[
https://issues.apache.org/jira/browse/CB-13680?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Babette Stam updated CB-13680:
------------------------------
Description:
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}
was:
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
> 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
>
> Original Estimate: 1h
> Remaining Estimate: 1h
>
> 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]