2828#import < OneSignalCore/OneSignalCore.h>
2929#import " OneSignalFramework.h"
3030#import " OSAttributedFocusTimeProcessor.h"
31+ #import < OneSignalUser/OneSignalUser.h>
3132
3233@interface OneSignal ()
3334+ (void )sendSessionEndOutcomes : (NSNumber *)totalTimeActive params : (OSFocusCallParams *)params onSuccess : (OSResultSuccessBlock _Nonnull)successBlock onFailure : (OSFailureBlock _Nonnull)failureBlock ;
@@ -43,6 +44,8 @@ @implementation OSAttributedFocusTimeProcessor {
4344- (instancetype )init {
4445 self = [super init ];
4546 [OSBackgroundTaskManager setTaskInvalid: ATTRIBUTED_FOCUS_TASK];
47+ [OSBackgroundTaskManager setTaskInvalid: SEND_SESSION_TIME_TO_USER_TASK];
48+
4649 return self;
4750}
4851
@@ -80,37 +83,51 @@ - (void)sendOnFocusCallWithParams:(OSFocusCallParams *)params totalTimeActive:(N
8083 }
8184
8285 [OSBackgroundTaskManager beginBackgroundTask: ATTRIBUTED_FOCUS_TASK];
86+ [OSBackgroundTaskManager beginBackgroundTask: SEND_SESSION_TIME_TO_USER_TASK];
8387
8488 if (params.onSessionEnded ) {
85- [self sendBackgroundAttributedFocusPingWithParams : params withTotalTimeActive: @(totalTimeActive)];
89+ [self sendBackgroundAttributedSessionTimeWithParams : params withTotalTimeActive: @(totalTimeActive)];
8690 return ;
8791 }
8892
8993 restCallTimer = [NSTimer
9094 scheduledTimerWithTimeInterval: DELAY_TIME
9195 target: self
92- selector: @selector (sendBackgroundAttributedFocusPingWithNSTimer : )
96+ selector: @selector (sendBackgroundAttributedSessionTimeWithNSTimer : )
9397 userInfo: @{@" params" : params, @" time" : @(totalTimeActive)}
9498 repeats: false ];
9599}
96100
97- - (void )sendBackgroundAttributedFocusPingWithNSTimer : (NSTimer *)timer {
101+ - (void )sendBackgroundAttributedSessionTimeWithNSTimer : (NSTimer *)timer {
98102 let userInfo = (NSDictionary <NSString *, id >*)timer.userInfo ;
99103 let params = (OSFocusCallParams*)userInfo[@" params" ];
100104 let totalTimeActive = (NSNumber *)userInfo[@" time" ];
101- [self sendBackgroundAttributedFocusPingWithParams : params withTotalTimeActive: totalTimeActive];
105+ [self sendBackgroundAttributedSessionTimeWithParams : params withTotalTimeActive: totalTimeActive];
102106}
103107
104- - (void )sendBackgroundAttributedFocusPingWithParams : (OSFocusCallParams *)params withTotalTimeActive : (NSNumber *)totalTimeActive {
105-
106- [OneSignalLog onesignalLog: ONE_S_LL_DEBUG message: @" OSAttributedFocusTimeProcessor:sendBackgroundAttributedFocusPingWithParams start" ];
107- // TODO: Can we get wait for onSuccess to call [super saveUnsentActiveTime:0]
108- // Need on failure an success to end background task
109- if ([OneSignal sendSessionEndOutcomes: totalTimeActive params: params]) {
110- [super saveUnsentActiveTime: 0 ];
111- }
108+ - (void )sendBackgroundAttributedSessionTimeWithParams : (OSFocusCallParams *)params withTotalTimeActive : (NSNumber *)totalTimeActive {
109+ [OneSignalLog onesignalLog: ONE_S_LL_DEBUG message: @" OSAttributedFocusTimeProcessor:sendBackgroundAttributedSessionTimeWithParams start" ];
112110
113- [OSBackgroundTaskManager endBackgroundTask: ATTRIBUTED_FOCUS_TASK];
111+ dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{
112+ [OneSignalUserManagerImpl.sharedInstance updateSessionWithSessionCount: nil sessionTime: totalTimeActive refreshDeviceMetadata: false sendImmediately: true onSuccess: ^{
113+ [super saveUnsentActiveTime: 0 ];
114+ [OneSignalLog onesignalLog: ONE_S_LL_DEBUG message: @" sendBackgroundAttributed session time succeed, saveUnsentActiveTime with 0" ];
115+ [OSBackgroundTaskManager endBackgroundTask: SEND_SESSION_TIME_TO_USER_TASK];
116+ } onFailure: ^{
117+ [OneSignalLog onesignalLog: ONE_S_LL_ERROR message: @" sendBackgroundAttributed session time failed, will retry on next open" ];
118+ [OSBackgroundTaskManager endBackgroundTask: SEND_SESSION_TIME_TO_USER_TASK];
119+ }];
120+ });
121+
122+ dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{
123+ [OneSignal sendSessionEndOutcomes: totalTimeActive params: params onSuccess: ^(NSDictionary *result) {
124+ [OneSignalLog onesignalLog: ONE_S_LL_DEBUG message: @" sendBackgroundAttributed succeed" ];
125+ [OSBackgroundTaskManager endBackgroundTask: ATTRIBUTED_FOCUS_TASK];
126+ } onFailure: ^(NSError *error) {
127+ [OneSignalLog onesignalLog: ONE_S_LL_ERROR message: @" sendBackgroundAttributed failed, will retry on next open" ];
128+ [OSBackgroundTaskManager endBackgroundTask: ATTRIBUTED_FOCUS_TASK];
129+ }];
130+ });
114131}
115132
116133- (void )cancelDelayedJob {
@@ -120,6 +137,8 @@ - (void)cancelDelayedJob {
120137 [restCallTimer invalidate ];
121138 restCallTimer = nil ;
122139 [OSBackgroundTaskManager endBackgroundTask: ATTRIBUTED_FOCUS_TASK];
140+ [OSBackgroundTaskManager endBackgroundTask: SEND_SESSION_TIME_TO_USER_TASK];
141+
123142}
124143
125144@end
0 commit comments