[ 
https://issues.apache.org/jira/browse/CB-13680?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jan Piotrowski (Sujan) updated CB-13680:
----------------------------------------
    Remaining Estimate:     (was: 1h)
     Original Estimate:     (was: 1h)

> 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: 
> {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:@"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
> {code}



--
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