From ba298b6440aee5d1c7d4344278e50cd100d22d45 Mon Sep 17 00:00:00 2001 From: Nan Date: Thu, 4 Dec 2025 18:19:09 -0800 Subject: [PATCH 1/2] fix: prevent crash when cleaning up uninitialized SDK on destroy * Wrap removeHandlers() and removeObservers() calls in try-catch blocks within onHostDestroy() and onCatalystInstanceDestroy() to handle cases where the native OneSignal SDK throws "Must call 'initWithContext' before use" during activity destruction. * Also move the oneSignalInitDone flag further down past the native `OneSignal.initWithContext(context, appId)` call. --- .../rnonesignalandroid/RNOneSignal.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java b/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java index 2b5c8ea7..01c9193f 100644 --- a/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java +++ b/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java @@ -172,6 +172,11 @@ public void onClick(INotificationClickEvent event) { }; private void removeObservers() { + if(!oneSignalInitDone) { + Logging.debug("OneSignal React-Native SDK not initialized yet. Could not remove observers.", null); + return; + } + this.removePermissionObserver(); this.removePushSubscriptionObserver(); this.removeUserStateObserver(); @@ -226,8 +231,12 @@ public String getName() { @Override public void onHostDestroy() { - removeHandlers(); - removeObservers(); + try { + removeHandlers(); + removeObservers(); + } catch (Exception e) { + Logging.debug("OneSignal SDK not fully initialized. Could not remove handlers/observers: " + e.getMessage(), null); + } } @Override @@ -238,8 +247,12 @@ public void onHostResume() {} @Override public void onCatalystInstanceDestroy() { - removeHandlers(); - removeObservers(); + try { + removeHandlers(); + removeObservers(); + } catch (Exception e) { + Logging.debug("OneSignal SDK not fully initialized. Could not remove handlers/observers: " + e.getMessage(), null); + } } // OneSignal namespace methods @@ -254,8 +267,6 @@ public void initialize(String appId) { return; } - oneSignalInitDone = true; - if (context == null) { // in some cases, especially when react-native-navigation is installed, // the activity can be null, so we can initialize with the context instead @@ -263,6 +274,7 @@ public void initialize(String appId) { } OneSignal.initWithContext(context, appId); + oneSignalInitDone = true; } @ReactMethod From c6f57703b8eed0b66cde38be4c7e806050afa0c2 Mon Sep 17 00:00:00 2001 From: Nan Date: Tue, 9 Dec 2025 08:58:09 -0800 Subject: [PATCH 2/2] don't catch and simplify methods --- .../rnonesignalandroid/RNOneSignal.java | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java b/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java index 01c9193f..9abde946 100644 --- a/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java +++ b/android/src/main/java/com/onesignal/rnonesignalandroid/RNOneSignal.java @@ -180,9 +180,7 @@ private void removeObservers() { this.removePermissionObserver(); this.removePushSubscriptionObserver(); this.removeUserStateObserver(); - } - private void removeHandlers() { if (hasAddedInAppMessageClickListener) { OneSignal.getInAppMessages().removeClickListener(rnInAppClickListener); hasAddedInAppMessageClickListener = false; @@ -217,7 +215,6 @@ public RNOneSignal(ReactApplicationContext reactContext) { // Clean up previous instance if it exists (handles reload scenario) if (currentInstance != null && currentInstance != this) { - currentInstance.removeHandlers(); currentInstance.removeObservers(); } currentInstance = this; @@ -231,12 +228,7 @@ public String getName() { @Override public void onHostDestroy() { - try { - removeHandlers(); - removeObservers(); - } catch (Exception e) { - Logging.debug("OneSignal SDK not fully initialized. Could not remove handlers/observers: " + e.getMessage(), null); - } + removeObservers(); } @Override @@ -247,12 +239,7 @@ public void onHostResume() {} @Override public void onCatalystInstanceDestroy() { - try { - removeHandlers(); - removeObservers(); - } catch (Exception e) { - Logging.debug("OneSignal SDK not fully initialized. Could not remove handlers/observers: " + e.getMessage(), null); - } + removeObservers(); } // OneSignal namespace methods