Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 4 additions & 9 deletions iOS_SDK/OneSignalSDK/Source/OSAttributedFocusTimeProcessor.m
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ @implementation OSAttributedFocusTimeProcessor {
NSTimer* restCallTimer;
}

static let ATTRIBUTED_MIN_SESSION_TIME_SEC = 1;
static let DELAY_TIME = 30;

- (instancetype)init {
Expand All @@ -48,10 +47,6 @@ - (instancetype)init {
return self;
}

- (int)getMinSessionTime {
return ATTRIBUTED_MIN_SESSION_TIME_SEC;
}

- (NSString*)unsentActiveTimeUserDefaultsKey {
return OSUD_UNSENT_ACTIVE_TIME_ATTRIBUTED;
}
Expand All @@ -61,11 +56,8 @@ - (void)sendOnFocusCall:(OSFocusCallParams *)params {
let totalTimeActive = unsentActive + params.timeElapsed;
[OneSignalLog onesignalLog:ONE_S_LL_DEBUG
message:[NSString stringWithFormat:@"sendOnFocusCall attributed with totalTimeActive %f", totalTimeActive]];

[super saveUnsentActiveTime:totalTimeActive];

[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:[NSString stringWithFormat:@"OSAttributedFocusTimeProcessor:sendSessionTime of %@", @(params.timeElapsed)]];
[OneSignalUserManagerImpl.sharedInstance sendSessionTime:@(params.timeElapsed)];

[self sendOnFocusCallWithParams:params totalTimeActive:totalTimeActive];
}
Expand Down Expand Up @@ -110,6 +102,9 @@ - (void)sendBackgroundAttributedSessionTimeWithNSTimer:(NSTimer*)timer {
- (void)sendBackgroundAttributedSessionTimeWithParams:(OSFocusCallParams *)params withTotalTimeActive:(NSNumber*)totalTimeActive {
[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:@"OSAttributedFocusTimeProcessor:sendBackgroundAttributedSessionTimeWithParams start"];

[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:[NSString stringWithFormat:@"OSAttributedFocusTimeProcessor:sendSessionTime of %@", totalTimeActive]];
[OneSignalUserManagerImpl.sharedInstance sendSessionTime:totalTimeActive];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[OneSignal sendSessionEndOutcomes:totalTimeActive params:params onSuccess:^(NSDictionary *result) {
[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:@"sendBackgroundAttributed succeed"];
Expand Down
2 changes: 0 additions & 2 deletions iOS_SDK/OneSignalSDK/Source/OSBaseFocusTimeProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,7 @@

@property (nonatomic, readonly) BOOL onFocusCallEnabled;

- (int)getMinSessionTime;
- (NSString*)unsentActiveTimeUserDefaultsKey;
- (BOOL)hasMinSyncTime:(NSTimeInterval)activeTime;

- (void)resetUnsentActiveTime;
- (void)sendOnFocusCall:(OSFocusCallParams *)params;
Expand Down
11 changes: 0 additions & 11 deletions iOS_SDK/OneSignalSDK/Source/OSBaseFocusTimeProcessor.m
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,6 @@ @implementation OSBaseFocusTimeProcessor {
NSNumber* unsentActiveTime;
}

// Must override
- (int)getMinSessionTime {
@throw [NSException exceptionWithName:NSInternalInconsistencyException
reason:[NSString stringWithFormat:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)] userInfo:nil];
}

- (BOOL)hasMinSyncTime:(NSTimeInterval)activeTime {
[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:[NSString stringWithFormat:@"OSBaseFocusTimeProcessor hasMinSyncTime getMinSessionTime: %d activeTime: %f", [self getMinSessionTime], activeTime]];
return activeTime >= [self getMinSessionTime];
}

- (void)resetUnsentActiveTime {
unsentActiveTime = nil;
}
Expand Down
71 changes: 49 additions & 22 deletions iOS_SDK/OneSignalSDK/Source/OSUnattributedFocusTimeProcessor.m
Original file line number Diff line number Diff line change
Expand Up @@ -36,67 +36,94 @@ @interface OneSignal ()
+ (void)sendSessionEndOutcomes:(NSNumber*)totalTimeActive params:(OSFocusCallParams *)params onSuccess:(OSResultSuccessBlock _Nonnull)successBlock onFailure:(OSFailureBlock _Nonnull)failureBlock;
@end

@implementation OSUnattributedFocusTimeProcessor
@implementation OSUnattributedFocusTimeProcessor {
NSTimer* restCallTimer;
}

static let UNATTRIBUTED_MIN_SESSION_TIME_SEC = 60;
static let DELAY_TIME = 30;

- (instancetype)init {
self = [super init];
[OSBackgroundTaskManager setTaskInvalid:SESSION_OUTCOMES_TASK];
return self;
}

- (int)getMinSessionTime {
return UNATTRIBUTED_MIN_SESSION_TIME_SEC;
}

- (NSString*)unsentActiveTimeUserDefaultsKey {
return OSUD_UNSENT_ACTIVE_TIME;
}

- (void)sendOnFocusCall:(OSFocusCallParams *)params {
let unsentActive = [super getUnsentActiveTime];
let totalTimeActive = unsentActive + params.timeElapsed;

[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:[NSString stringWithFormat:@"sendOnFocusCall unattributed with totalTimeActive %f", totalTimeActive]];

if (![super hasMinSyncTime:totalTimeActive]) {
[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:[NSString stringWithFormat:@"unattributed influence saveUnsentActiveTime %f", totalTimeActive]];
[super saveUnsentActiveTime:totalTimeActive];
return;
}

[super saveUnsentActiveTime:totalTimeActive];

[self sendOnFocusCallWithParams:params totalTimeActive:totalTimeActive];
}

- (void)sendUnsentActiveTime:(OSFocusCallParams *)params {
let unsentActive = [super getUnsentActiveTime];
[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:[NSString stringWithFormat:@"sendUnsentActiveTime unattributed with unsentActive %f", unsentActive]];

[self sendOnFocusCallWithParams:params totalTimeActive:unsentActive];
}

- (void)sendOnFocusCallWithParams:(OSFocusCallParams *)params totalTimeActive:(NSTimeInterval)totalTimeActive {
[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:[NSString stringWithFormat:@"OSUnattributedFocusTimeProcessor:sendSessionTime of %@", @(totalTimeActive)]];
[OneSignalUserManagerImpl.sharedInstance sendSessionTime:@(totalTimeActive)];
[super saveUnsentActiveTime:0];

if (totalTimeActive < 1) {
[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:[NSString stringWithFormat:@"sendSessionEndOutcomes not sending active time %f", totalTimeActive]];
return;
}

[OSBackgroundTaskManager beginBackgroundTask:SESSION_OUTCOMES_TASK];

if (params.onSessionEnded) {
[self sendBackgroundUnattributedSessionTimeWithParams:params withTotalTimeActive:@(totalTimeActive)];
return;
}

restCallTimer = [NSTimer
scheduledTimerWithTimeInterval:DELAY_TIME
target:self
selector:@selector(sendBackgroundUnattributedSessionTimeWithNSTimer:)
userInfo:@{@"params": params, @"time": @(totalTimeActive)}
repeats:false];
}

- (void)sendBackgroundUnattributedSessionTimeWithNSTimer:(NSTimer*)timer {
let userInfo = (NSDictionary<NSString*, id>*)timer.userInfo;
let params = (OSFocusCallParams*)userInfo[@"params"];
let totalTimeActive = (NSNumber*)userInfo[@"time"];
[self sendBackgroundUnattributedSessionTimeWithParams:params withTotalTimeActive:totalTimeActive];
}

- (void)sendBackgroundUnattributedSessionTimeWithParams:(OSFocusCallParams *)params withTotalTimeActive:(NSNumber*)totalTimeActive {
[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:@"OSUnattributedFocusTimeProcessor:sendBackgroundUnattributedSessionTimeWithParams start"];

[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:[NSString stringWithFormat:@"OSUnattributedFocusTimeProcessor:sendSessionTime of %@", totalTimeActive]];
[OneSignalUserManagerImpl.sharedInstance sendSessionTime:totalTimeActive];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[OneSignal sendSessionEndOutcomes:@(totalTimeActive) params:params onSuccess:^(NSDictionary *result) {
[OneSignal sendSessionEndOutcomes:totalTimeActive params:params onSuccess:^(NSDictionary *result) {
[OneSignalLog onesignalLog:ONE_S_LL_DEBUG message:@"sendUnattributed session end outcomes succeed"];
[super saveUnsentActiveTime:0];
[OSBackgroundTaskManager endBackgroundTask:SESSION_OUTCOMES_TASK];
} onFailure:^(NSError *error) {
[OneSignalLog onesignalLog:ONE_S_LL_ERROR message:@"sendUnattributed session end outcomes failed"];
[OneSignalLog onesignalLog:ONE_S_LL_ERROR message:@"sendUnattributed session end outcomes failed, will retry on next open"];
[OSBackgroundTaskManager endBackgroundTask:SESSION_OUTCOMES_TASK];
}];
});
}

- (void)cancelDelayedJob {
// No job to cancel, network call is made right away.
}
if (!restCallTimer)
return;

[restCallTimer invalidate];
restCallTimer = nil;
[OSBackgroundTaskManager endBackgroundTask:SESSION_OUTCOMES_TASK];
}

@end

Loading