@@ -79,7 +79,7 @@ - (void)stopObserving {
7979 } else if (error.userInfo [@" returned" ]) {
8080 return @[error.userInfo[@" returned" ]];
8181 }
82-
82+
8383 return @[error.localizedDescription];
8484}
8585
@@ -112,7 +112,7 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
112112 [OneSignal logout ];
113113}
114114
115- RCT_EXPORT_METHOD (enterLiveActivity:(NSString *)activityId
115+ RCT_EXPORT_METHOD (enterLiveActivity:(NSString *)activityId
116116 withToken:(NSString *)token
117117 withResponse:(RCTResponseSenderBlock)callback) {
118118 [OneSignal.LiveActivities enter: activityId withToken: token withSuccess: ^(NSDictionary *result) {
@@ -131,7 +131,7 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
131131 }];
132132}
133133
134- RCT_EXPORT_METHOD (setPushToStartToken:(NSString *)activityType
134+ RCT_EXPORT_METHOD (setPushToStartToken:(NSString *)activityType
135135 withToken:(NSString *)token) {
136136 #if !TARGET_OS_MACCATALYST
137137 NSError * err=nil ;
@@ -209,7 +209,7 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
209209}
210210
211211// OneSignal.InAppMessages namespace methods
212- RCT_REMAP_METHOD (getPaused,
212+ RCT_REMAP_METHOD (getPaused,
213213 getPausedResolver:(RCTPromiseResolveBlock)resolve
214214 rejecter:(RCTPromiseRejectBlock)reject) {
215215 resolve (@([OneSignal.InAppMessages paused ]));
@@ -269,13 +269,13 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
269269}
270270
271271// OneSignal.Notifications namespace methods
272- RCT_REMAP_METHOD (hasNotificationPermission,
272+ RCT_REMAP_METHOD (hasNotificationPermission,
273273 hasNotificationPermissionResolver:(RCTPromiseResolveBlock)resolve
274274 rejecter:(RCTPromiseRejectBlock)reject) {
275275 resolve (@([OneSignal.Notifications permission ]));
276276}
277277
278- RCT_REMAP_METHOD (canRequestNotificationPermission,
278+ RCT_REMAP_METHOD (canRequestNotificationPermission,
279279 canRequestNotificationPermissionResolver:(RCTPromiseResolveBlock)resolve
280280 rejecter:(RCTPromiseRejectBlock)reject) {
281281 resolve (@([OneSignal.Notifications canRequestPermission ]));
@@ -408,7 +408,7 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
408408}
409409
410410RCT_EXPORT_METHOD (removeSms:(NSString *)smsNumber) {
411- [OneSignal.User removeSms: smsNumber];
411+ [OneSignal.User removeSms: smsNumber];
412412}
413413
414414RCT_EXPORT_METHOD (addTag:(NSString *)key value:(id )value) {
@@ -436,7 +436,7 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
436436 getOnesignalIdResolver:(RCTPromiseResolveBlock)resolve
437437 rejecter:(RCTPromiseRejectBlock)reject) {
438438 NSString *onesignalId = OneSignal.User .onesignalId ;
439-
439+
440440 if (onesignalId == nil || [onesignalId length ] == 0 ) {
441441 resolve ([NSNull null ]); // Resolve with null if nil or empty
442442 } else {
@@ -448,7 +448,7 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
448448 getExternalIdResolver:(RCTPromiseResolveBlock)resolve
449449 rejecter:(RCTPromiseRejectBlock)reject) {
450450 NSString *externalId = OneSignal.User .externalId ;
451-
451+
452452 if (externalId == nil || [externalId length ] == 0 ) {
453453 resolve ([NSNull null ]); // Resolve with null if nil or empty
454454 } else {
@@ -474,13 +474,13 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
474474
475475
476476// OneSignal.User.pushSubscription namespace methods
477- RCT_REMAP_METHOD (getOptedIn,
477+ RCT_REMAP_METHOD (getOptedIn,
478478 getOptedInResolver:(RCTPromiseResolveBlock)resolve
479479 rejecter:(RCTPromiseRejectBlock)reject) {
480480 resolve (@(OneSignal.User .pushSubscription .optedIn ));
481481}
482482
483- RCT_REMAP_METHOD (getPushSubscriptionId,
483+ RCT_REMAP_METHOD (getPushSubscriptionId,
484484 getPushSubscriptionIdResolver:(RCTPromiseResolveBlock)resolve
485485 rejecter:(RCTPromiseRejectBlock)reject) {
486486 NSString *pushId = OneSignal.User .pushSubscription .id ;
@@ -491,7 +491,7 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
491491 }
492492}
493493
494- RCT_REMAP_METHOD (getPushSubscriptionToken,
494+ RCT_REMAP_METHOD (getPushSubscriptionToken,
495495 getPushSubscriptionTokenResolver:(RCTPromiseResolveBlock)resolve
496496 rejecter:(RCTPromiseRejectBlock)reject) {
497497 NSString *token = OneSignal.User .pushSubscription .token ;
@@ -502,6 +502,78 @@ + (void)sendEventWithName:(NSString *)name withBody:(NSDictionary *)body {
502502 }
503503}
504504
505+ RCT_REMAP_METHOD (waitForPushSubscriptionIdAsync,
506+ waitForPushSubscriptionIdWithTimeoutMs:(nonnull NSNumber *)timeoutMs
507+ resolver:(RCTPromiseResolveBlock)resolve
508+ rejecter:(RCTPromiseRejectBlock)reject) {
509+ NSString *currentId = OneSignal.User .pushSubscription .id ;
510+
511+ // If ID already exists, resolve immediately
512+ if (currentId && ![currentId isEqualToString: @" " ]) {
513+ resolve (currentId);
514+ return ;
515+ }
516+
517+ __block BOOL isResolved = NO ;
518+ __block id <NSObject > observer = nil ;
519+
520+ // Create observer
521+ observer = [OneSignal.User.pushSubscription addObserver: ^(OSPushSubscriptionChangedState * _Nonnull state) {
522+ NSString *newId = state.current .id ;
523+ if (newId && ![newId isEqualToString: @" " ] && !isResolved) {
524+ isResolved = YES ;
525+ [OneSignal.User.pushSubscription removeObserver: observer];
526+ resolve (newId);
527+ }
528+ }];
529+
530+ // Set up timeout
531+ dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )([timeoutMs integerValue ] * NSEC_PER_MSEC)),
532+ dispatch_get_main_queue (), ^{
533+ if (!isResolved) {
534+ isResolved = YES ;
535+ [OneSignal.User.pushSubscription removeObserver: observer];
536+ resolve ([NSNull null ]);
537+ }
538+ });
539+ }
540+
541+ RCT_REMAP_METHOD (waitForPushSubscriptionTokenAsync,
542+ waitForPushSubscriptionTokenWithTimeoutMs:(nonnull NSNumber *)timeoutMs
543+ resolver:(RCTPromiseResolveBlock)resolve
544+ rejecter:(RCTPromiseRejectBlock)reject) {
545+ NSString *currentToken = OneSignal.User .pushSubscription .token ;
546+
547+ // If token already exists, resolve immediately
548+ if (currentToken && ![currentToken isEqualToString: @" " ]) {
549+ resolve (currentToken);
550+ return ;
551+ }
552+
553+ __block BOOL isResolved = NO ;
554+ __block id <NSObject > observer = nil ;
555+
556+ // Create observer
557+ observer = [OneSignal.User.pushSubscription addObserver: ^(OSPushSubscriptionChangedState * _Nonnull state) {
558+ NSString *newToken = state.current .token ;
559+ if (newToken && ![newToken isEqualToString: @" " ] && !isResolved) {
560+ isResolved = YES ;
561+ [OneSignal.User.pushSubscription removeObserver: observer];
562+ resolve (newToken);
563+ }
564+ }];
565+
566+ // Set up timeout
567+ dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t )([timeoutMs integerValue ] * NSEC_PER_MSEC)),
568+ dispatch_get_main_queue (), ^{
569+ if (!isResolved) {
570+ isResolved = YES ;
571+ [OneSignal.User.pushSubscription removeObserver: observer];
572+ resolve ([NSNull null ]);
573+ }
574+ });
575+ }
576+
505577RCT_EXPORT_METHOD (optIn) {
506578 [OneSignal.User.pushSubscription optIn ];
507579}
0 commit comments