@@ -104,6 +104,7 @@ - (id)initWith:(NSString * _Nonnull)activityId
104104 withSuccess:(OSResultSuccessBlock _Nullable)successBlock
105105 withFailure:(OSFailureBlock _Nullable)failureBlock;
106106@end
107+
107108@implementation OSPendingLiveActivityUpdate
108109
109110- (id )initWith : (NSString *)activityId
@@ -120,6 +121,18 @@ - (id)initWith:(NSString *)activityId
120121};
121122@end
122123
124+ @interface OSSubscriptionObserver : NSObject <OSPushSubscriptionObserver>
125+ @end
126+
127+ @implementation OSSubscriptionObserver
128+
129+ - (void )onOSPushSubscriptionChangedWithStateChanges : (OSPushSubscriptionStateChanges * _Nonnull)stateChanges {
130+ if (stateChanges.to .subscriptionId ){
131+ [OneSignal executePendingLiveActivityUpdates ];
132+ }
133+ }
134+ @end
135+
123136@implementation OneSignal
124137
125138static NSString * mSDKType = @" native" ;
@@ -129,6 +142,8 @@ @implementation OneSignal
129142static OSFailureBlock pendingGetTagsFailureBlock;
130143
131144static NSMutableArray * pendingLiveActivityUpdates;
145+ static OSSubscriptionObserver* _subscriptionObserver;
146+
132147
133148// Has attempted to register for push notifications with Apple since app was installed.
134149static BOOL registeredWithApple = NO ;
@@ -174,6 +189,7 @@ + (ObservablePermissionStateChangesType*)permissionStateChangesObserver {
174189 return _permissionStateChangesObserver;
175190}
176191
192+
177193/*
178194 Indicates if the iOS params request has started
179195 Set to true when the method is called and set false if the request's failure callback is triggered
@@ -413,16 +429,19 @@ + (void)enterLiveActivity:(NSString * _Nonnull)activityId withToken:(NSString *
413429 return ;
414430 }
415431
416-
417- if (self. currentSubscriptionState . userId ) {
418- [OneSignalClient.sharedClient executeRequest: [OSRequestLiveActivityEnter withUserId: self .currentSubscriptionState.userId appId: appId activityId: activityId token: token]
432+ NSString *subscriptionId = [OneSignalUserManagerImpl.sharedInstance addObserver: _subscriptionObserver]. subscriptionId ;
433+ if (subscriptionId ) {
434+ [OneSignalClient.sharedClient executeRequest: [OSRequestLiveActivityEnter withUserId: subscriptionId appId: appId activityId: activityId token: token]
419435 onSuccess: ^(NSDictionary *result) {
420436 [self callSuccessBlockOnMainThread: successBlock withResult: result];
421437 } onFailure: ^(NSError *error) {
422438 [self callFailureBlockOnMainThread: failureBlock withError: error];
423439 }];
424440 } else {
441+ _subscriptionObserver = [OSSubscriptionObserver new ];
442+
425443 [self addPendingLiveActivityUpdate: activityId withToken: token isEnter: true withSuccess: successBlock withFailure: failureBlock];
444+
426445 }
427446}
428447
@@ -443,8 +462,10 @@ + (void)exitLiveActivity:(NSString * _Nonnull)activityId withSuccess:(OSResultSu
443462 }
444463 return ;
445464 }
446- if (self.currentSubscriptionState .userId ) {
447- [OneSignalClient.sharedClient executeRequest: [OSRequestLiveActivityExit withUserId: self .currentSubscriptionState.userId appId: appId activityId: activityId]
465+
466+ NSString *subscriptionId = OneSignalUserManagerImpl.sharedInstance .pushSubscription .subscriptionId ;
467+ if (subscriptionId) {
468+ [OneSignalClient.sharedClient executeRequest: [OSRequestLiveActivityExit withUserId: subscriptionId appId: appId activityId: activityId]
448469 onSuccess: ^(NSDictionary *result) {
449470 [self callSuccessBlockOnMainThread: successBlock withResult: result];
450471 } onFailure: ^(NSError *error) {
@@ -455,6 +476,22 @@ + (void)exitLiveActivity:(NSString * _Nonnull)activityId withSuccess:(OSResultSu
455476 }
456477}
457478
479+ + (void )callFailureBlockOnMainThread : (OSFailureBlock)failureBlock withError : (NSError *)error {
480+ if (failureBlock) {
481+ dispatch_async (dispatch_get_main_queue (), ^{
482+ failureBlock (error);
483+ });
484+ }
485+ }
486+
487+ + (void )callSuccessBlockOnMainThread : (OSResultSuccessBlock)successBlock withResult : (NSDictionary *)result {
488+ if (successBlock) {
489+ dispatch_async (dispatch_get_main_queue (), ^{
490+ successBlock (result);
491+ });
492+ }
493+ }
494+
458495+ (void )addPendingLiveActivityUpdate : (NSString * _Nonnull)activityId
459496 withToken : (NSString * _Nullable)token
460497 isEnter : (BOOL )isEnter
0 commit comments