From 9487c336720db0cef8c57209248a767afeccca98 Mon Sep 17 00:00:00 2001 From: Vadim Yeshkunov Date: Wed, 13 Apr 2022 12:53:17 +0300 Subject: [PATCH] Add permissionStatus field to the location event --- .../CLLocationManager+MMEMobileEvents.h | 1 + .../CLLocationManager+MMEMobileEvents.m | 19 +++++++++++++++++++ Sources/MapboxMobileEvents/MMEConstants.m | 3 +++ Sources/MapboxMobileEvents/MMEEventsManager.m | 6 ++++++ .../MapboxMobileEvents/MMELocationManager.h | 1 + .../MapboxMobileEvents/MMELocationManager.m | 4 ++++ .../MapboxMobileEvents/include/MMEConstants.h | 4 ++++ 7 files changed, 38 insertions(+) diff --git a/Sources/MapboxMobileEvents/CLLocationManager+MMEMobileEvents.h b/Sources/MapboxMobileEvents/CLLocationManager+MMEMobileEvents.h index 2a6845e3..0ca8bdff 100644 --- a/Sources/MapboxMobileEvents/CLLocationManager+MMEMobileEvents.h +++ b/Sources/MapboxMobileEvents/CLLocationManager+MMEMobileEvents.h @@ -9,6 +9,7 @@ void mme_linkCLLocationManagerCategory(); - (CLAuthorizationStatus)mme_authorizationStatus; - (NSString *)mme_authorizationStatusString; +- (NSString *)mme_permissionStatusString; #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 - (CLAccuracyAuthorization)mme_accuracyStatus API_AVAILABLE(ios(14.0), macos(11.0), watchos(7.0), tvos(14.0)); diff --git a/Sources/MapboxMobileEvents/CLLocationManager+MMEMobileEvents.m b/Sources/MapboxMobileEvents/CLLocationManager+MMEMobileEvents.m index 836e4b42..016c2569 100644 --- a/Sources/MapboxMobileEvents/CLLocationManager+MMEMobileEvents.m +++ b/Sources/MapboxMobileEvents/CLLocationManager+MMEMobileEvents.m @@ -48,6 +48,25 @@ - (NSString *)mme_authorizationStatusString { return statusString; } +- (NSString *)mme_permissionStatusString { + // this method should be called when generation a location event, so the authorization should be granted + CLAuthorizationStatus status = [self mme_authorizationStatus]; + NSString *statusString; + + switch (status) { + case kCLAuthorizationStatusAuthorizedAlways: + statusString = MMEEventAuthStatusAllowAlways; + break; + case kCLAuthorizationStatusAuthorizedWhenInUse: + statusString = MMEEventAuthStatusAllowWhenInUse; + break; + default: + statusString = @""; + break; + } + return statusString; +} + #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 - (CLAccuracyAuthorization)mme_accuracyStatus { return [self accuracyAuthorization]; diff --git a/Sources/MapboxMobileEvents/MMEConstants.m b/Sources/MapboxMobileEvents/MMEConstants.m index 06eaec82..8bc5607f 100644 --- a/Sources/MapboxMobileEvents/MMEConstants.m +++ b/Sources/MapboxMobileEvents/MMEConstants.m @@ -52,6 +52,7 @@ NSString * const MMEEventKeySpeedAccuracy = @"speedAccuracy"; NSString * const MMEEventKeyCourseAccuracy = @"courseAccuracy"; NSString * const MMEEventKeyVerticalAccuracy = @"verticalAccuracy"; +NSString * const MMEEventKeyPermissionStatus = @"permissionStatus"; NSString * const MMEEventKeyFloor = @"floor"; NSString * const MMEEventHorizontalAccuracy = @"horizontalAccuracy"; NSString * const MMEEventKeyLocalDebugDescription = @"debug.description"; @@ -121,6 +122,8 @@ NSString * const MMEEventStatusAuthorizedAlways = @"always"; NSString * const MMEEventStatusAuthorizedWhenInUse = @"whenInUse"; NSString * const MMEEventUnknown = @"unknown"; +NSString * const MMEEventAuthStatusAllowWhenInUse = @"AllowWhenInUse"; +NSString * const MMEEventAuthStatusAllowAlways = @"AllowAlways"; NSString * const MMEAccuracyAuthorizationFull = @"full"; NSString * const MMEAccuracyAuthorizationReduced = @"reduced"; diff --git a/Sources/MapboxMobileEvents/MMEEventsManager.m b/Sources/MapboxMobileEvents/MMEEventsManager.m index a663d075..7ca6931a 100644 --- a/Sources/MapboxMobileEvents/MMEEventsManager.m +++ b/Sources/MapboxMobileEvents/MMEEventsManager.m @@ -644,6 +644,12 @@ - (void)locationManager:(MMELocationManager *)locationManager didUpdateLocations MMEEventKeyCourse: @([location mme_roundedCourse]) }]; + if (locationManager != nil) { + [eventAttributes addEntriesFromDictionary:@{ + MMEEventKeyPermissionStatus: locationManager.locationPermissionStatusString, + }]; + } + NSString *digest = NSUserDefaults.mme_configuration.mme_configDigestValue; if (digest) { [eventAttributes addEntriesFromDictionary:@{ diff --git a/Sources/MapboxMobileEvents/MMELocationManager.h b/Sources/MapboxMobileEvents/MMELocationManager.h index fccd0775..c23f6226 100644 --- a/Sources/MapboxMobileEvents/MMELocationManager.h +++ b/Sources/MapboxMobileEvents/MMELocationManager.h @@ -13,6 +13,7 @@ - (void)startUpdatingLocation; - (void)stopUpdatingLocation; - (NSString *)locationAuthorizationString; +- (NSString *)locationPermissionStatusString; - (CLAuthorizationStatus)locationAuthorization; - (BOOL)isReducedAccuracy; diff --git a/Sources/MapboxMobileEvents/MMELocationManager.m b/Sources/MapboxMobileEvents/MMELocationManager.m index b61e38c3..a82c6952 100644 --- a/Sources/MapboxMobileEvents/MMELocationManager.m +++ b/Sources/MapboxMobileEvents/MMELocationManager.m @@ -85,6 +85,10 @@ - (NSString *)locationAuthorizationString { return [self.locationManager mme_authorizationStatusString]; } +- (NSString *)locationPermissionStatusString { + return [self.locationManager mme_permissionStatusString]; +} + - (CLAuthorizationStatus)locationAuthorization { return [self.locationManager mme_authorizationStatus]; } diff --git a/Sources/MapboxMobileEvents/include/MMEConstants.h b/Sources/MapboxMobileEvents/include/MMEConstants.h index a5023121..92298db2 100644 --- a/Sources/MapboxMobileEvents/include/MMEConstants.h +++ b/Sources/MapboxMobileEvents/include/MMEConstants.h @@ -57,6 +57,7 @@ extern NSString * const MMEEventKeyCourse; extern NSString * const MMEEventKeySpeedAccuracy; extern NSString * const MMEEventKeyCourseAccuracy; extern NSString * const MMEEventKeyVerticalAccuracy; +extern NSString * const MMEEventKeyPermissionStatus; extern NSString * const MMEEventKeyFloor; extern NSString * const MMEEventKeyVendorId; extern NSString * const MMEEventKeyModel; @@ -135,6 +136,9 @@ extern NSString * const MMEEventStatusRestricted; extern NSString * const MMEEventStatusNotDetermined; extern NSString * const MMEEventStatusAuthorizedAlways; extern NSString * const MMEEventStatusAuthorizedWhenInUse; +extern NSString * const MMEEventAuthStatusAllow; +extern NSString * const MMEEventAuthStatusAllowWhenInUse; +extern NSString * const MMEEventAuthStatusAllowAlways; extern NSString * const MMEEventUnknown; extern NSString * const MMEAccuracyAuthorizationFull; extern NSString * const MMEAccuracyAuthorizationReduced;