Skip to content

Commit 9b2674c

Browse files
committed
Fix GetTags Sync Crash
• React-Native only allows a callback to be invoked once. • When RN apps call getTags() multiple times very quickly, the Android SDK will crash because it only stores a reference to the most recent callback • Fixed by maintaining a callback reference in RNOneSignal
1 parent 5c62534 commit 9b2674c

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

android/src/main/java/com/geektime/rnonesignalandroid/RNOneSignal.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ public class RNOneSignal extends ReactContextBaseJavaModule implements Lifecycle
5050
private boolean oneSignalInitDone;
5151
private static boolean registeredEvents = false;
5252

53+
//ensure only one callback exists at a given time due to react-native restriction
54+
private Callback pendingGetTagsCallback;
55+
5356
public RNOneSignal(ReactApplicationContext reactContext) {
5457
super(reactContext);
5558
mReactApplicationContext = reactContext;
@@ -137,10 +140,16 @@ public void sendTags(ReadableMap tags) {
137140

138141
@ReactMethod
139142
public void getTags(final Callback callback) {
143+
if (pendingGetTagsCallback == null)
144+
pendingGetTagsCallback = callback;
145+
140146
OneSignal.getTags(new OneSignal.GetTagsHandler() {
141147
@Override
142148
public void tagsAvailable(JSONObject tags) {
143-
callback.invoke(RNUtils.jsonToWritableMap(tags));
149+
if (pendingGetTagsCallback != null)
150+
pendingGetTagsCallback.invoke(RNUtils.jsonToWritableMap(tags));
151+
152+
pendingGetTagsCallback = null;
144153
}
145154
});
146155
}

0 commit comments

Comments
 (0)