Skip to content

Commit ece6e02

Browse files
committed
fix removing of listeners on app reload
1 parent cbddc6a commit ece6e02

2 files changed

Lines changed: 26 additions & 13 deletions

File tree

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

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ public class RNOneSignal extends ReactContextBaseJavaModule
9696
private boolean hasAddedNotificationClickListener = false;
9797
private boolean hasAddedInAppMessageClickListener = false;
9898

99+
// Static reference to track current instance for cleanup on reload
100+
private static RNOneSignal currentInstance = null;
101+
99102
private IInAppMessageClickListener rnInAppClickListener = new IInAppMessageClickListener() {
100103
@Override
101104
public void onClick(IInAppMessageClickEvent event) {
@@ -175,19 +178,22 @@ private void removeObservers() {
175178
}
176179

177180
private void removeHandlers() {
178-
if (!oneSignalInitDone) {
179-
Logging.debug("OneSignal React-Native SDK not initialized yet. Could not remove handlers.", null);
180-
return;
181+
if (hasAddedInAppMessageClickListener) {
182+
OneSignal.getInAppMessages().removeClickListener(rnInAppClickListener);
183+
hasAddedInAppMessageClickListener = false;
184+
}
185+
if (hasAddedInAppMessageLifecycleListener) {
186+
OneSignal.getInAppMessages().removeLifecycleListener(rnInAppLifecycleListener);
187+
hasAddedInAppMessageLifecycleListener = false;
188+
}
189+
if (hasAddedNotificationClickListener) {
190+
OneSignal.getNotifications().removeClickListener(rnNotificationClickListener);
191+
hasAddedNotificationClickListener = false;
192+
}
193+
if (hasAddedNotificationForegroundListener) {
194+
OneSignal.getNotifications().removeForegroundLifecycleListener(this);
195+
hasAddedNotificationForegroundListener = false;
181196
}
182-
183-
OneSignal.getInAppMessages().removeClickListener(rnInAppClickListener);
184-
hasAddedInAppMessageClickListener = false;
185-
OneSignal.getInAppMessages().removeLifecycleListener(rnInAppLifecycleListener);
186-
hasAddedInAppMessageLifecycleListener = false;
187-
OneSignal.getNotifications().removeClickListener(rnNotificationClickListener);
188-
hasAddedNotificationClickListener = false;
189-
OneSignal.getNotifications().removeForegroundLifecycleListener(this);
190-
hasAddedNotificationForegroundListener = false;
191197
}
192198

193199
private void sendEvent(String eventName, Object params) {
@@ -203,6 +209,13 @@ public RNOneSignal(ReactApplicationContext reactContext) {
203209
mReactContext.addLifecycleEventListener(this);
204210
notificationWillDisplayCache = new HashMap<String, INotificationWillDisplayEvent>();
205211
preventDefaultCache = new HashMap<String, INotificationWillDisplayEvent>();
212+
213+
// Clean up previous instance if it exists (handles reload scenario)
214+
if (currentInstance != null && currentInstance != this) {
215+
currentInstance.removeHandlers();
216+
currentInstance.removeObservers();
217+
}
218+
currentInstance = this;
206219
}
207220

208221
/** Native Module Overrides */

examples/RNOneSignalTS/ios/Podfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2665,7 +2665,7 @@ SPEC CHECKSUMS:
26652665
React-logger: a3cb5b29c32b8e447b5a96919340e89334062b48
26662666
React-Mapbuffer: 9d2434a42701d6144ca18f0ca1c4507808ca7696
26672667
React-microtasksnativemodule: 75b6604b667d297292345302cc5bfb6b6aeccc1b
2668-
react-native-onesignal: 6c5758aa56975db4bca9956d18d83dd62444c931
2668+
react-native-onesignal: b68c981956150f288c1585889871affcef3c0b8b
26692669
react-native-safe-area-context: c00143b4823773bba23f2f19f85663ae89ceb460
26702670
React-NativeModulesApple: 879fbdc5dcff7136abceb7880fe8a2022a1bd7c3
26712671
React-oscompat: 93b5535ea7f7dff46aaee4f78309a70979bdde9d

0 commit comments

Comments
 (0)