[ios] Refactor way location permissions are requested
This commit is contained in:
@@ -5303,35 +5303,29 @@ public:
|
||||
|
||||
if (shouldEnableLocationServices)
|
||||
{
|
||||
if (self.locationManager.authorizationStatus == kCLAuthorizationStatusNotDetermined)
|
||||
{
|
||||
BOOL requiresWhenInUseUsageDescription = [NSProcessInfo.processInfo isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){11,0,0}];
|
||||
if (self.locationManager.authorizationStatus == kCLAuthorizationStatusNotDetermined) {
|
||||
BOOL hasWhenInUseUsageDescription = !![[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"];
|
||||
BOOL hasAlwaysUsageDescription;
|
||||
if (requiresWhenInUseUsageDescription)
|
||||
{
|
||||
hasAlwaysUsageDescription = !![[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysAndWhenInUseUsageDescription"] && hasWhenInUseUsageDescription;
|
||||
}
|
||||
else
|
||||
{
|
||||
hasAlwaysUsageDescription = !![[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"];
|
||||
}
|
||||
|
||||
if (hasAlwaysUsageDescription)
|
||||
{
|
||||
[self.locationManager requestAlwaysAuthorization];
|
||||
}
|
||||
else if (hasWhenInUseUsageDescription)
|
||||
{
|
||||
[self.locationManager requestWhenInUseAuthorization];
|
||||
}
|
||||
else
|
||||
{
|
||||
NSString *suggestedUsageKeys = requiresWhenInUseUsageDescription ?
|
||||
@"NSLocationWhenInUseUsageDescription and (optionally) NSLocationAlwaysAndWhenInUseUsageDescription" :
|
||||
@"NSLocationWhenInUseUsageDescription and/or NSLocationAlwaysUsageDescription";
|
||||
[NSException raise:MGLMissingLocationServicesUsageDescriptionException
|
||||
format:@"This app must have a value for %@ in its Info.plist.", suggestedUsageKeys];
|
||||
if (@available(iOS 11.0, *)) {
|
||||
// A WhenInUse string is required in iOS 11+ and the map never has any need for Always, so it's enough to just ask for WhenInUse.
|
||||
if (hasWhenInUseUsageDescription) {
|
||||
[self.locationManager requestWhenInUseAuthorization];
|
||||
} else {
|
||||
[NSException raise:MGLMissingLocationServicesUsageDescriptionException
|
||||
format:@"To use location services this app must have a NSLocationWhenInUseUsageDescription string in its Info.plist."];
|
||||
}
|
||||
} else {
|
||||
// We might have to ask for Always if the app does not provide a WhenInUse string.
|
||||
BOOL hasAlwaysUsageDescription = !![[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"];
|
||||
|
||||
if (hasWhenInUseUsageDescription) {
|
||||
[self.locationManager requestWhenInUseAuthorization];
|
||||
} else if (hasAlwaysUsageDescription) {
|
||||
[self.locationManager requestAlwaysAuthorization];
|
||||
} else {
|
||||
[NSException raise:MGLMissingLocationServicesUsageDescriptionException
|
||||
format:@"To use location services this app must have a NSLocationWhenInUseUsageDescription and/or NSLocationAlwaysUsageDescription string in its Info.plist."];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user