summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform/ios/src/MGLMapboxEvents.m27
1 files changed, 22 insertions, 5 deletions
diff --git a/platform/ios/src/MGLMapboxEvents.m b/platform/ios/src/MGLMapboxEvents.m
index 53b917f701..4d62e9d724 100644
--- a/platform/ios/src/MGLMapboxEvents.m
+++ b/platform/ios/src/MGLMapboxEvents.m
@@ -129,6 +129,7 @@ const NSTimeInterval MGLFlushInterval = 180;
@implementation MGLMapboxEvents {
NSString *_instanceID;
+ UIBackgroundTaskIdentifier _backgroundTaskIdentifier;
}
+ (void)initialize {
@@ -257,9 +258,20 @@ const NSTimeInterval MGLFlushInterval = 180;
}
- (void)pauseOrResumeMetricsCollectionIfRequired {
+ UIApplication *application = [UIApplication sharedApplication];
+
// Prevent blue status bar when host app has `when in use` permission only and it is not in foreground
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse &&
- [UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
+ application.applicationState == UIApplicationStateBackground) {
+
+ if (_backgroundTaskIdentifier == UIBackgroundTaskInvalid) {
+ _backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{
+ [application endBackgroundTask:_backgroundTaskIdentifier];
+ _backgroundTaskIdentifier = UIBackgroundTaskInvalid;
+ }];
+ [self flush];
+ }
+
[self pauseMetricsCollection];
return;
}
@@ -307,7 +319,10 @@ const NSTimeInterval MGLFlushInterval = 180;
return;
}
- if ([self.eventQueue count] == 0) {
+ if ([self.eventQueue count] <= 1) {
+ [self.eventQueue removeAllObjects];
+ [[UIApplication sharedApplication] endBackgroundTask:_backgroundTaskIdentifier];
+ _backgroundTaskIdentifier = UIBackgroundTaskInvalid;
return;
}
@@ -485,10 +500,12 @@ const NSTimeInterval MGLFlushInterval = 180;
if (error) {
[strongSelf pushDebugEvent:MGLEventTypeLocalDebug withAttributes:@{MGLEventKeyLocalDebugDescription: @"Network error",
@"error": error}];
- return;
+ } else {
+ [strongSelf pushDebugEvent:MGLEventTypeLocalDebug withAttributes:@{MGLEventKeyLocalDebugDescription: @"post",
+ @"debug.eventsCount": @(events.count)}];
}
- [strongSelf pushDebugEvent:MGLEventTypeLocalDebug withAttributes:@{MGLEventKeyLocalDebugDescription: @"post",
- @"debug.eventsCount": @(events.count)}];
+ [[UIApplication sharedApplication] endBackgroundTask:_backgroundTaskIdentifier];
+ _backgroundTaskIdentifier = UIBackgroundTaskInvalid;
}];
});
}