Если пользователь явно запретил авторизацию для этого приложения или службы определения местоположения отключены в настройках, оно вернет статус Denied. Как я могу узнать точную причину этого?
Как получить точный статус авторизации службы определения местоположения?
Ответы (3)
Я сделал эти две функции для проверки каждого случая
Если пользователь явно запретил авторизацию для вашего приложения, только вы можете проверить это следующим образом,
+ (BOOL) isLocationDisableForMyAppOnly
{
if([CLLocationManager locationServicesEnabled] &&
[CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied)
{
return YES;
}
return NO;
}
Если службы определения местоположения отключены в настройках,
+ (BOOL) userLocationAvailable {
return [CLLocationManager locationServicesEnabled];
}
И я использую его так,
if([UserLocation userLocationAvailable]) {
//.... Get location.
}
else
{
if([UserLocation isLocationDisableForMyAppOnly]) {
//... Location not available. Denied accessing location.
}
else{
//... Location not available. Enable location services from settings.
}
}
P.S. UserLocation — это пользовательский класс для определения местоположения пользователя.
Свифт
Использовать:
CLLocationManager.authorizationStatus()
Получить статус авторизации. Это CLAuthorizationStatus
, вы можете включить другой статус следующим образом:
let status = CLLocationManager.authorizationStatus()
switch status {
case .authorizedAlways:
<#code#>
case .authorizedWhenInUse:
<#code#>
case .denied:
<#code#>
case .notDetermined:
<#code#>
case .restricted:
<#code#>
}
Свифт:
Я сделал эти две функции для проверки каждого случая
Если пользователь явно запретил авторизацию для вашего приложения, только вы можете проверить это следующим образом,
class func isLocationDisableForMyAppOnly() -> Bool {
if CLLocationManager.locationServicesEnabled() && CLLocationManager.authorizationStatus() == .denied {
return true
}
return false
}
Если службы определения местоположения отключены в настройках,
class func userLocationAvailable() -> Bool {
return CLLocationManager.locationServicesEnabled()
}
И я использую его так,
if UserLocation.userLocationAvailable() {
//.... Get location.
} else {
if UserLocation.isLocationDisableForMyAppOnly() {
//... Location not available. Denied accessing location.
} else {
//... Location not available. Enable location services from settings.
}
}
P.S. UserLocation
— это пользовательский класс для определения местоположения пользователя.