diff --git a/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java b/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java index 332ad64a..6e98d993 100644 --- a/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java +++ b/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java @@ -96,6 +96,9 @@ public class RNOneSignal extends ReactContextBaseJavaModule private boolean hasAddedNotificationClickListener = false; private boolean hasAddedInAppMessageClickListener = false; + // Static reference to track current instance for cleanup on reload + private static RNOneSignal currentInstance = null; + private IInAppMessageClickListener rnInAppClickListener = new IInAppMessageClickListener() { @Override public void onClick(IInAppMessageClickEvent event) { @@ -203,6 +206,13 @@ public RNOneSignal(ReactApplicationContext reactContext) { mReactContext.addLifecycleEventListener(this); notificationWillDisplayCache = new HashMap(); preventDefaultCache = new HashMap(); + + // Clean up previous instance if it exists (handles reload scenario) + if (currentInstance != null && currentInstance != this) { + currentInstance.removeHandlers(); + currentInstance.removeObservers(); + } + currentInstance = this; } /** Native Module Overrides */ diff --git a/examples/RNOneSignalTS/OSDemo.tsx b/examples/RNOneSignalTS/OSDemo.tsx index b65a125a..3eccd7f5 100644 --- a/examples/RNOneSignalTS/OSDemo.tsx +++ b/examples/RNOneSignalTS/OSDemo.tsx @@ -135,16 +135,13 @@ const OSDemo: React.FC = () => { ); useEffect(() => { - const initializeOneSignal = async () => { - OneSignal.initialize(APP_ID); - OneSignal.Debug.setLogLevel(LogLevel.None); + OneSignal.initialize(APP_ID); + OneSignal.Debug.setLogLevel(LogLevel.None); + }, []); + useEffect(() => { + const setup = async () => { OneSignal.LiveActivities.setupDefault(); - // OneSignal.LiveActivities.setupDefault({ - // enablePushToStart: false, - // enablePushToUpdate: true, - // }); - OneSignal.Notifications.addEventListener( 'foregroundWillDisplay', onForegroundWillDisplay, @@ -166,7 +163,7 @@ const OSDemo: React.FC = () => { OneSignal.User.addEventListener('change', onUserChange); }; - initializeOneSignal(); + setup(); return () => { // Clean up all event listeners diff --git a/examples/RNOneSignalTS/ios/Podfile.lock b/examples/RNOneSignalTS/ios/Podfile.lock index f5dcb5fc..af15b3d0 100644 --- a/examples/RNOneSignalTS/ios/Podfile.lock +++ b/examples/RNOneSignalTS/ios/Podfile.lock @@ -2665,7 +2665,7 @@ SPEC CHECKSUMS: React-logger: a3cb5b29c32b8e447b5a96919340e89334062b48 React-Mapbuffer: 9d2434a42701d6144ca18f0ca1c4507808ca7696 React-microtasksnativemodule: 75b6604b667d297292345302cc5bfb6b6aeccc1b - react-native-onesignal: 6c5758aa56975db4bca9956d18d83dd62444c931 + react-native-onesignal: b68c981956150f288c1585889871affcef3c0b8b react-native-safe-area-context: c00143b4823773bba23f2f19f85663ae89ceb460 React-NativeModulesApple: 879fbdc5dcff7136abceb7880fe8a2022a1bd7c3 React-oscompat: 93b5535ea7f7dff46aaee4f78309a70979bdde9d