@@ -19,6 +19,8 @@ @implementation RCTOneSignalEventEmitter {
1919}
2020
2121static BOOL _didStartObserving = false ;
22+ // Static reference to track current instance for cleanup on reload
23+ static RCTOneSignalEventEmitter *_currentInstance = nil ;
2224
2325+ (BOOL )hasSetBridge {
2426 return _didStartObserving;
@@ -48,6 +50,13 @@ - (instancetype)init {
4850 selector: @selector (emitEvent: )
4951 name: eventName
5052 object: nil ];
53+
54+ // Clean up previous instance if it exists (handles reload scenario)
55+ if (_currentInstance != nil && _currentInstance != self) {
56+ [_currentInstance removeHandlers ];
57+ [_currentInstance removeObservers ];
58+ }
59+ _currentInstance = self;
5160 }
5261
5362 return self;
@@ -64,6 +73,8 @@ - (void)startObserving {
6473
6574- (void )stopObserving {
6675 _hasListeners = false ;
76+ [self removeHandlers ];
77+ [self removeObservers ];
6778}
6879
6980- (NSArray <NSString *> *)supportedEvents {
@@ -584,4 +595,37 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
584595 // iOS Stub
585596}
586597
598+ - (void )removeObservers {
599+ [self removePermissionObserver ];
600+ [self removePushSubscriptionObserver ];
601+ [self removeUserStateObserver ];
602+ }
603+
604+ - (void )removeHandlers {
605+ if (_hasAddedInAppMessageClickListener) {
606+ [OneSignal.InAppMessages removeClickListener: [RCTOneSignal sharedInstance ]];
607+ _hasAddedInAppMessageClickListener = false ;
608+ }
609+ if (_hasAddedInAppMessageLifecycleListener) {
610+ [OneSignal.InAppMessages
611+ removeLifecycleListener: [RCTOneSignal sharedInstance ]];
612+ _hasAddedInAppMessageLifecycleListener = false ;
613+ }
614+ if (_hasAddedNotificationClickListener) {
615+ [OneSignal.Notifications removeClickListener: [RCTOneSignal sharedInstance ]];
616+ _hasAddedNotificationClickListener = false ;
617+ }
618+ if (_hasAddedNotificationForegroundLifecycleListener) {
619+ [OneSignal.Notifications removeForegroundLifecycleListener: self ];
620+ _hasAddedNotificationForegroundLifecycleListener = false ;
621+ }
622+ }
623+
624+ - (void )removeUserStateObserver {
625+ if (_hasSetUserStateObserver) {
626+ [OneSignal.User removeObserver: [RCTOneSignal sharedInstance ]];
627+ _hasSetUserStateObserver = false ;
628+ }
629+ }
630+
587631@end
0 commit comments