Babette Stam created CB-13680:
---------------------------------

             Summary: cordova-plugin-geolocation permission request going wrong 
in newer iOS version
                 Key: CB-13680
                 URL: https://issues.apache.org/jira/browse/CB-13680
             Project: Apache Cordova
          Issue Type: Bug
          Components: cordova-plugin-geolocation
         Environment: iOS
            Reporter: Babette Stam
            Priority: Minor
             Fix For: Master


When you want to request the always access location permissions the newer iOS 
version requires that the NSLocationAlwaysUsageDescription and 
NSLocationWhenInUseUsageDescription are both set. It is not allowed to only set 
the NSLocationAlwaysUsageDescription anymore.

But in the Cordova code there is a check that when you have the 
NSLocationWhenInUseUsageDescription set, the application will only ask the user 
permission to use the location in app usage (requestWhenInUseAuthorization). It 
will run the requestAlwaysAuthorization.

I saw a different issue reported 2 years ago with the question reversed 
(CB-8826). This was then implemented, but is not working with the latest 
version. The following code should be edited:


{code:javascript}

#ifdef __IPHONE_8_0
    NSUInteger code = [CLLocationManager authorizationStatus];
    if (code == kCLAuthorizationStatusNotDetermined && ([self.locationManager 
respondsToSelector:@selector(requestAlwaysAuthorization)] || 
[self.locationManager 
respondsToSelector:@selector(requestWhenInUseAuthorization)])) { //iOS8+
        __highAccuracyEnabled = enableHighAccuracy;
        if([[NSBundle mainBundle] 
objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]){
            [self.locationManager requestWhenInUseAuthorization];
        } else if([[NSBundle mainBundle] 
objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]) {
            [self.locationManager  requestAlwaysAuthorization];
        } else {
            NSLog(@"[Warning] No NSLocationAlwaysUsageDescription or 
NSLocationWhenInUseUsageDescription key is defined in the Info.plist file.");
        }
        return;
    }
#endif

{code}

It should be: 


#ifdef __IPHONE_8_0
    NSUInteger code = [CLLocationManager authorizationStatus];
    if (code == kCLAuthorizationStatusNotDetermined && ([self.locationManager 
respondsToSelector:@selector(requestAlwaysAuthorization)] || 
[self.locationManager 
respondsToSelector:@selector(requestWhenInUseAuthorization)])) { //iOS8+
        __highAccuracyEnabled = enableHighAccuracy;
        if([[NSBundle mainBundle] 
objectForInfoDictionaryKey:@"NSLocationAlwaysUsageDescription"]) {
            [self.locationManager  requestAlwaysAuthorization];
        } else if([[NSBundle mainBundle] 
objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]){
            [self.locationManager requestWhenInUseAuthorization];
        } else {
            NSLog(@"[Warning] No NSLocationAlwaysUsageDescription or 
NSLocationWhenInUseUsageDescription key is defined in the Info.plist file.");
        }
        return;
    }
#endif





--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to