Skip to content

Commit 320990b

Browse files
committed
make onesignalliveactivitycontroller
1 parent 8fcb316 commit 320990b

File tree

5 files changed

+193
-130
lines changed

5 files changed

+193
-130
lines changed

iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@
203203
918CB0301E73388E0067130F /* OneSignalFramework.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 912411F01E73342200E41FD7 /* OneSignalFramework.h */; };
204204
91C7725E1E7CCE1000D612D0 /* OneSignalInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C7725D1E7CCE1000D612D0 /* OneSignalInternal.h */; };
205205
91F60F7D1E80E4E400706E60 /* UncaughtExceptionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 91F60F7C1E80E4E400706E60 /* UncaughtExceptionHandler.m */; };
206+
944F7ECF296F890900AEBA54 /* OneSignalLiveActivityController.m in Sources */ = {isa = PBXBuildFile; fileRef = 944F7ECE296F890900AEBA54 /* OneSignalLiveActivityController.m */; };
206207
9D3300F523145AF3000F0A83 /* OneSignalViewHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D3300F223145AF3000F0A83 /* OneSignalViewHelper.m */; };
207208
9D3300F623145AF3000F0A83 /* OneSignalViewHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D3300F223145AF3000F0A83 /* OneSignalViewHelper.m */; };
208209
9D3300FA23149DAE000F0A83 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D3300F923149DAE000F0A83 /* CoreGraphics.framework */; };
@@ -853,6 +854,8 @@
853854
91C7725D1E7CCE1000D612D0 /* OneSignalInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OneSignalInternal.h; sourceTree = "<group>"; };
854855
91F60F7B1E80E49A00706E60 /* UncaughtExceptionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UncaughtExceptionHandler.h; sourceTree = "<group>"; };
855856
91F60F7C1E80E4E400706E60 /* UncaughtExceptionHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UncaughtExceptionHandler.m; sourceTree = "<group>"; };
857+
944F7ECE296F890900AEBA54 /* OneSignalLiveActivityController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OneSignalLiveActivityController.m; sourceTree = "<group>"; };
858+
944F7ED0296F892400AEBA54 /* OneSignalLiveActivityController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OneSignalLiveActivityController.h; sourceTree = "<group>"; };
856859
9D1BD95D237663BF00A064F7 /* OSInfluenceDataDefines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSInfluenceDataDefines.h; sourceTree = "<group>"; };
857860
9D1BD95E2379E7A900A064F7 /* OSOutcomeEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSOutcomeEvent.h; sourceTree = "<group>"; };
858861
9D1BD95F2379E7C300A064F7 /* OSOutcomeEvent.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSOutcomeEvent.m; sourceTree = "<group>"; };
@@ -1642,6 +1645,8 @@
16421645
CA70E3382023F24500019273 /* OneSignalCommonDefines.h */,
16431646
7AD8DDE8234BD3CF00747A8A /* OneSignalUserDefaults.h */,
16441647
7AD8DDE6234BD3BE00747A8A /* OneSignalUserDefaults.m */,
1648+
944F7ED0296F892400AEBA54 /* OneSignalLiveActivityController.h */,
1649+
944F7ECE296F890900AEBA54 /* OneSignalLiveActivityController.m */,
16451650
912411FC1E73342200E41FD7 /* OneSignalMobileProvision.h */,
16461651
912411FD1E73342200E41FD7 /* OneSignalMobileProvision.m */,
16471652
4529DF0A1FA932AC00CEAB1D /* OneSignalTrackFirebaseAnalytics.h */,
@@ -2824,6 +2829,7 @@
28242829
DEF78497291479C100A1F3A5 /* SwizzlingForwarder.m in Sources */,
28252830
3CE8CC542911B037000DB0D3 /* OneSignalReachability.m in Sources */,
28262831
DE7D17EA27026B95002D3A5D /* OneSignalCore.docc in Sources */,
2832+
944F7ECF296F890900AEBA54 /* OneSignalLiveActivityController.m in Sources */,
28272833
DE7D18702703751B002D3A5D /* OSRequests.m in Sources */,
28282834
DEF7845D2912E89200A1F3A5 /* OSObservable.m in Sources */,
28292835
DE971752274C48B700FC409E /* OSPrivacyConsentController.m in Sources */,
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//
2+
// OneSignalLiveActivityController.h
3+
// OneSignal
4+
//
5+
// Created by Henry Boswell on 1/11/23.
6+
// Copyright © 2023 Hiptic. All rights reserved.
7+
//
8+
9+
#ifndef OneSignalLiveActivityController_h
10+
#define OneSignalLiveActivityController_h
11+
12+
#import <OneSignalUser/OneSignalUser-Swift.h>
13+
14+
15+
@interface OneSignalLiveActivityController: NSObject<OSPushSubscriptionObserver>
16+
17+
+ (void)enterLiveActivity:(NSString * _Nonnull)activityId appId:(NSString *)appId withToken:(NSString * _Nonnull)token withSuccess:(OSResultSuccessBlock _Nullable)successBlock withFailure:(OSFailureBlock _Nullable)failureBlock;
18+
+ (void)exitLiveActivity:(NSString * _Nonnull)activityId appId:(NSString *)appId withSuccess:(OSResultSuccessBlock _Nullable)successBlock withFailure:(OSFailureBlock _Nullable)failureBlock;
19+
20+
21+
@end
22+
23+
#endif /* OneSignalLiveActivityController_h */
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
//
2+
// OneSignalLiveActivityController.m
3+
// OneSignalCore
4+
//
5+
// Created by Henry Boswell on 1/11/23.
6+
// Copyright © 2023 Hiptic. All rights reserved.
7+
//
8+
9+
#import <Foundation/Foundation.h>
10+
#import <OneSignalCore/OneSignalCore.h>
11+
12+
#import "OneSignalLiveActivityController.h"
13+
14+
@interface OSPendingLiveActivityUpdate: NSObject
15+
@property NSString* activityId;
16+
@property NSString* appId;
17+
@property NSString* token;
18+
@property BOOL isEnter;
19+
@property OSResultSuccessBlock successBlock;
20+
@property OSFailureBlock failureBlock;
21+
- (id)initWith:(NSString * _Nonnull)activityId
22+
appId:(NSString * _Nonnull)appId
23+
withToken:(NSString * _Nonnull)token
24+
isEnter:(BOOL)isEnter
25+
withSuccess:(OSResultSuccessBlock _Nullable)successBlock
26+
withFailure:(OSFailureBlock _Nullable)failureBlock;
27+
@end
28+
29+
@implementation OSPendingLiveActivityUpdate
30+
31+
- (id)initWith:(NSString * _Nonnull)activityId
32+
appId:(NSString * _Nonnull)appId
33+
withToken:(NSString *)token
34+
isEnter:(BOOL)isEnter
35+
withSuccess:(OSResultSuccessBlock)successBlock
36+
withFailure:(OSFailureBlock)failureBlock {
37+
self.token = token;
38+
self.activityId = activityId;
39+
self.appId = appId;
40+
self.isEnter = isEnter;
41+
self.successBlock = successBlock;
42+
self.failureBlock = failureBlock;
43+
return self;
44+
};
45+
@end
46+
47+
@implementation OneSignalLiveActivityController
48+
49+
static NSMutableArray* pendingLiveActivityUpdates;
50+
static NSString* subscriptionId;
51+
52+
- (void)onOSPushSubscriptionChangedWithStateChanges:(OSPushSubscriptionStateChanges * _Nonnull)stateChanges {
53+
if(stateChanges.to.id){
54+
subscriptionId = OneSignalUserManagerImpl.sharedInstance.pushSubscriptionId;
55+
[OneSignalLiveActivityController executePendingLiveActivityUpdates];
56+
}
57+
}
58+
59+
+ (void)enterLiveActivity:(NSString * _Nonnull)activityId appId:(NSString *)appId withToken:(NSString * _Nonnull)token withSuccess:(OSResultSuccessBlock _Nullable)successBlock withFailure:(OSFailureBlock _Nullable)failureBlock{
60+
61+
if ([OSPrivacyConsentController shouldLogMissingPrivacyConsentErrorWithMethodName:@"enterLiveActivity:onSuccess:onFailure:"]) {
62+
if (failureBlock) {
63+
NSError *error = [NSError errorWithDomain:@"com.onesignal.tags" code:0 userInfo:@{@"error" : @"Your application has called enterLiveActivity:onSuccess:onFailure: before the user granted privacy permission. Please call `consentGranted(bool)` in order to provide user privacy consent"}];
64+
failureBlock(error);
65+
}
66+
return;
67+
}
68+
69+
if(subscriptionId) {
70+
[OneSignalClient.sharedClient executeRequest:[OSRequestLiveActivityEnter withUserId:subscriptionId appId:appId activityId:activityId token:token]
71+
onSuccess:^(NSDictionary *result) {
72+
[self callSuccessBlockOnMainThread:successBlock withResult:result];
73+
} onFailure:^(NSError *error) {
74+
[self callFailureBlockOnMainThread:failureBlock withError:error];
75+
}];
76+
} else {
77+
[self addPendingLiveActivityUpdate:activityId appId:appId withToken:token isEnter:true withSuccess:successBlock withFailure:failureBlock];
78+
}
79+
}
80+
81+
+ (void)exitLiveActivity:(NSString * _Nonnull)activityId appId:(NSString *)appId withSuccess:(OSResultSuccessBlock _Nullable)successBlock withFailure:(OSFailureBlock _Nullable)failureBlock{
82+
83+
if ([OSPrivacyConsentController shouldLogMissingPrivacyConsentErrorWithMethodName:@"exitLiveActivity:onSuccess:onFailure:"]) {
84+
if (failureBlock) {
85+
NSError *error = [NSError errorWithDomain:@"com.onesignal.tags" code:0 userInfo:@{@"error" : @"Your application has called exitLiveActivity:onSuccess:onFailure: before the user granted privacy permission. Please call `consentGranted(bool)` in order to provide user privacy consent"}];
86+
failureBlock(error);
87+
}
88+
return;
89+
}
90+
91+
if(subscriptionId) {
92+
[OneSignalClient.sharedClient executeRequest:[OSRequestLiveActivityExit withUserId:subscriptionId appId:appId activityId:activityId]
93+
onSuccess:^(NSDictionary *result) {
94+
[self callSuccessBlockOnMainThread:successBlock withResult:result];
95+
} onFailure:^(NSError *error) {
96+
[self callFailureBlockOnMainThread:failureBlock withError:error];
97+
}];
98+
} else {
99+
[self addPendingLiveActivityUpdate:activityId appId:appId withToken:nil isEnter:false withSuccess:successBlock withFailure:failureBlock];
100+
}
101+
}
102+
103+
+ (void)callFailureBlockOnMainThread:(OSFailureBlock)failureBlock withError:(NSError *)error {
104+
if (failureBlock) {
105+
dispatch_async(dispatch_get_main_queue(), ^{
106+
failureBlock(error);
107+
});
108+
}
109+
}
110+
111+
+ (void)callSuccessBlockOnMainThread:(OSResultSuccessBlock)successBlock withResult:(NSDictionary *)result{
112+
if (successBlock) {
113+
dispatch_async(dispatch_get_main_queue(), ^{
114+
successBlock(result);
115+
});
116+
}
117+
}
118+
119+
+ (void)addPendingLiveActivityUpdate:(NSString * _Nonnull)activityId
120+
appId:(NSString * _Nonnull)appId
121+
withToken:(NSString * _Nullable)token
122+
isEnter:(BOOL)isEnter
123+
withSuccess:(OSResultSuccessBlock _Nullable)successBlock
124+
withFailure:(OSFailureBlock _Nullable)failureBlock {
125+
OSPendingLiveActivityUpdate *pendingLiveActivityUpdate = [[OSPendingLiveActivityUpdate alloc] initWith:activityId appId:appId withToken:token isEnter:isEnter withSuccess:successBlock withFailure:failureBlock];
126+
127+
if (!pendingLiveActivityUpdates) {
128+
pendingLiveActivityUpdates = [NSMutableArray new];
129+
}
130+
[pendingLiveActivityUpdates addObject:pendingLiveActivityUpdate];
131+
}
132+
133+
+ (void)executePendingLiveActivityUpdates {
134+
subscriptionId = OneSignalUserManagerImpl.sharedInstance.pushSubscriptionId;
135+
if(pendingLiveActivityUpdates.count <= 0) {
136+
return;
137+
}
138+
139+
OSPendingLiveActivityUpdate * updateToProcess = [pendingLiveActivityUpdates objectAtIndex:0];
140+
[pendingLiveActivityUpdates removeObjectAtIndex: 0];
141+
if (updateToProcess.isEnter) {
142+
[OneSignalClient.sharedClient executeRequest:[OSRequestLiveActivityEnter withUserId:subscriptionId appId:updateToProcess.appId activityId:updateToProcess.activityId token:updateToProcess.token]
143+
onSuccess:^(NSDictionary *result) {
144+
[self callSuccessBlockOnMainThread:updateToProcess.successBlock withResult:result];
145+
[self executePendingLiveActivityUpdates];
146+
} onFailure:^(NSError *error) {
147+
[self callFailureBlockOnMainThread:updateToProcess.failureBlock withError:error];
148+
[self executePendingLiveActivityUpdates];
149+
}];
150+
} else {
151+
[OneSignalClient.sharedClient executeRequest:[OSRequestLiveActivityExit withUserId:subscriptionId appId:updateToProcess.appId activityId:updateToProcess.activityId]
152+
onSuccess:^(NSDictionary *result) {
153+
[self callSuccessBlockOnMainThread:updateToProcess.successBlock withResult:result];
154+
[self executePendingLiveActivityUpdates];
155+
} onFailure:^(NSError *error) {
156+
[self callFailureBlockOnMainThread:updateToProcess.failureBlock withError:error];
157+
[self executePendingLiveActivityUpdates];
158+
}];
159+
}
160+
}
161+
@end

iOS_SDK/OneSignalSDK/Source/OneSignal.m

Lines changed: 3 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -92,54 +92,10 @@
9292
@interface OneSignal (SessionStatusDelegate)
9393
@end
9494

95-
@interface OSPendingLiveActivityUpdate: NSObject
96-
@property NSString* token;
97-
@property NSString* activityId;
98-
@property BOOL isEnter;
99-
@property OSResultSuccessBlock successBlock;
100-
@property OSFailureBlock failureBlock;
101-
- (id)initWith:(NSString * _Nonnull)activityId
102-
withToken:(NSString * _Nonnull)token
103-
isEnter:(BOOL)isEnter
104-
withSuccess:(OSResultSuccessBlock _Nullable)successBlock
105-
withFailure:(OSFailureBlock _Nullable)failureBlock;
106-
@end
107-
108-
@implementation OSPendingLiveActivityUpdate
109-
110-
- (id)initWith:(NSString *)activityId
111-
withToken:(NSString *)token
112-
isEnter:(BOOL)isEnter
113-
withSuccess:(OSResultSuccessBlock)successBlock
114-
withFailure:(OSFailureBlock)failureBlock {
115-
self.token = token;
116-
self.activityId = activityId;
117-
self.isEnter = isEnter;
118-
self.successBlock = successBlock;
119-
self.failureBlock = failureBlock;
120-
return self;
121-
};
122-
@end
123-
124-
@interface OSSubscriptionObserver: NSObject<OSPushSubscriptionObserver>
125-
@end
126-
127-
@implementation OSSubscriptionObserver
128-
129-
- (void)onOSPushSubscriptionChangedWithStateChanges:(OSPushSubscriptionStateChanges * _Nonnull)stateChanges {
130-
if(stateChanges.to.id){
131-
[OneSignal executePendingLiveActivityUpdates];
132-
}
133-
}
134-
@end
135-
13695
@implementation OneSignal
13796

13897
static NSString* mSDKType = @"native";
13998

140-
static NSMutableArray* pendingLiveActivityUpdates;
141-
static OSSubscriptionObserver* _subscriptionObserver;
142-
14399
// Has attempted to register for push notifications with Apple since app was installed.
144100
static BOOL registeredWithApple = NO;
145101

@@ -168,8 +124,6 @@ + (DelayedConsentInitializationParameters *)delayedInitParameters {
168124

169125
static LanguageContext* languageContext;
170126

171-
static NSString* subscriptionId;
172-
173127
// static property def to add developer's OSPermissionStateChanges observers to.
174128
static ObservablePermissionStateChangesType* _permissionStateChangesObserver;
175129
+ (ObservablePermissionStateChangesType*)permissionStateChangesObserver {
@@ -412,18 +366,8 @@ + (void)enterLiveActivity:(NSString * _Nonnull)activityId withToken:(NSString *
412366
}
413367
return;
414368
}
415-
416-
if(subscriptionId) {
417-
[OneSignalClient.sharedClient executeRequest:[OSRequestLiveActivityEnter withUserId:subscriptionId appId:appId activityId:activityId token:token]
418-
onSuccess:^(NSDictionary *result) {
419-
[self callSuccessBlockOnMainThread:successBlock withResult:result];
420-
} onFailure:^(NSError *error) {
421-
[self callFailureBlockOnMainThread:failureBlock withError:error];
422-
}];
423-
} else {
424-
_subscriptionObserver = [OSSubscriptionObserver new];
425-
[self addPendingLiveActivityUpdate:activityId withToken:token isEnter:true withSuccess:successBlock withFailure:failureBlock];
426-
}
369+
370+
[OneSignalLiveActivityController enterLiveActivity:activityId appId:appId withToken:token withSuccess: successBlock withFailure: failureBlock];
427371
}
428372

429373
+ (void)exitLiveActivity:(NSString * _Nonnull)activityId{
@@ -444,76 +388,9 @@ + (void)exitLiveActivity:(NSString * _Nonnull)activityId withSuccess:(OSResultSu
444388
return;
445389
}
446390

447-
if(subscriptionId) {
448-
[OneSignalClient.sharedClient executeRequest:[OSRequestLiveActivityExit withUserId:subscriptionId appId:appId activityId:activityId]
449-
onSuccess:^(NSDictionary *result) {
450-
[self callSuccessBlockOnMainThread:successBlock withResult:result];
451-
} onFailure:^(NSError *error) {
452-
[self callFailureBlockOnMainThread:failureBlock withError:error];
453-
}];
454-
} else {
455-
_subscriptionObserver = [OSSubscriptionObserver new];
456-
[self addPendingLiveActivityUpdate:activityId withToken:nil isEnter:false withSuccess:successBlock withFailure:failureBlock];
457-
}
391+
[OneSignalLiveActivityController exitLiveActivity:activityId appId:appId withSuccess: successBlock withFailure: failureBlock];
458392
}
459393

460-
+ (void)callFailureBlockOnMainThread:(OSFailureBlock)failureBlock withError:(NSError *)error {
461-
if (failureBlock) {
462-
dispatch_async(dispatch_get_main_queue(), ^{
463-
failureBlock(error);
464-
});
465-
}
466-
}
467-
468-
+ (void)callSuccessBlockOnMainThread:(OSResultSuccessBlock)successBlock withResult:(NSDictionary *)result{
469-
if (successBlock) {
470-
dispatch_async(dispatch_get_main_queue(), ^{
471-
successBlock(result);
472-
});
473-
}
474-
}
475-
476-
+ (void)addPendingLiveActivityUpdate:(NSString * _Nonnull)activityId
477-
withToken:(NSString * _Nullable)token
478-
isEnter:(BOOL)isEnter
479-
withSuccess:(OSResultSuccessBlock _Nullable)successBlock
480-
withFailure:(OSFailureBlock _Nullable)failureBlock {
481-
OSPendingLiveActivityUpdate *pendingLiveActivityUpdate = [[OSPendingLiveActivityUpdate alloc] initWith:activityId withToken:token isEnter:isEnter withSuccess:successBlock withFailure:failureBlock];
482-
483-
if (!pendingLiveActivityUpdates) {
484-
pendingLiveActivityUpdates = [NSMutableArray new];
485-
}
486-
[pendingLiveActivityUpdates addObject:pendingLiveActivityUpdate];
487-
}
488-
489-
+ (void)executePendingLiveActivityUpdates {
490-
subscriptionId = OneSignalUserManagerImpl.sharedInstance.pushSubscriptionId;
491-
if(pendingLiveActivityUpdates.count <= 0) {
492-
return;
493-
}
494-
495-
OSPendingLiveActivityUpdate * updateToProcess = [pendingLiveActivityUpdates objectAtIndex:0];
496-
[pendingLiveActivityUpdates removeObjectAtIndex: 0];
497-
if (updateToProcess.isEnter) {
498-
[OneSignalClient.sharedClient executeRequest:[OSRequestLiveActivityEnter withUserId:subscriptionId appId:appId activityId:updateToProcess.activityId token:updateToProcess.token]
499-
onSuccess:^(NSDictionary *result) {
500-
[self callSuccessBlockOnMainThread:updateToProcess.successBlock withResult:result];
501-
[self executePendingLiveActivityUpdates];
502-
} onFailure:^(NSError *error) {
503-
[self callFailureBlockOnMainThread:updateToProcess.failureBlock withError:error];
504-
[self executePendingLiveActivityUpdates];
505-
}];
506-
} else {
507-
[OneSignalClient.sharedClient executeRequest:[OSRequestLiveActivityExit withUserId:subscriptionId appId:appId activityId:updateToProcess.activityId]
508-
onSuccess:^(NSDictionary *result) {
509-
[self callSuccessBlockOnMainThread:updateToProcess.successBlock withResult:result];
510-
[self executePendingLiveActivityUpdates];
511-
} onFailure:^(NSError *error) {
512-
[self callFailureBlockOnMainThread:updateToProcess.failureBlock withError:error];
513-
[self executePendingLiveActivityUpdates];
514-
}];
515-
}
516-
}
517394

518395
#pragma mark Initialization
519396

@@ -720,8 +597,6 @@ + (void)init {
720597
[self startInAppMessages];
721598
[self startNewSession:YES];
722599

723-
subscriptionId = OneSignalUserManagerImpl.sharedInstance.pushSubscriptionId;
724-
725600
initializationTime = [[NSDate date] timeIntervalSince1970];
726601
initDone = true;
727602
}

0 commit comments

Comments
 (0)