在我们的应用程序中,我们在一个视图上要求位置许可(niNuse),该视图用于显示地图。
如果用户选择禁用设备位置服务(即设备设置中全局禁用),然后在应用程序中打开我们的视图,则将显示位置权限弹出窗口。冲洗几次重复几次(重新打开服务,继续应用,离开应用程序,关闭服务等),几次位置许可警报将停止显示。
有人知道这是否是iOS中的错误(发生在iOS 10上)?
我们可以使用自己的警报,该警报显示
CLLocationManager locationServicesEnabled = NO
,但由于我们无法/何时iOS位置警报弹出,有时会碰到他们俩都会同时显示不良UX。
对该问题有任何已知解决方案吗?我必须向我们的质量检查和经理解释这是否是iOS中的错误。
编辑:
- (BOOL)negotiateLocationServicePermission:(UIViewController *)context
{
/* Device location service is enabled. */
if ([CLLocationManager locationServicesEnabled])
{
/* App location service is already authorized. */
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse
|| [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedAlways)
{
/* App location service is authorized. Start location updates ... */
[self startUpdatingLocation];
return YES;
}
else
{
/* App location service not yet authorized and status is not determined (aka: first time asking for permission). */
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined)
{
/* Request the location permission from the user. */
if ([self respondsToSelector:@selector(requestWhenInUseAuthorization)])
[self requestWhenInUseAuthorization]; /* iOS 8+ */
else
[self startUpdatingLocation]; /* iOS 7 */
return YES;
}
/* App location service not authorized and previously denied. */
else
{
/* App location service permission was denied before. */
// Show custom alert!
return NO;
}
}
}
/* Device location service is disabled. */
else
{
// Show custom alert!
return NO;
}
}
我不认为这是一个错误,这是不同的arterview。
如果用户接受一次位置许可,则保存了,它不会再次问他。但是,如果禁用了位置服务,这是不同的情况。
您可以这样实现:
if ([CLLocationManager locationServicesEnabled]){
NSLog(@"Location Services Enabled");
if ([CLLocationManager authorizationStatus]==kCLAuthorizationStatusDenied){
alert = [[UIAlertView alloc] initWithTitle:@"App Permission Denied"
message:@"To re-enable, please go to Settings and turn on Location Service for this app."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
因此,如果用户从设置中禁用位置服务,则警报视图可以重定向到设置页面。
以这种方式,多个AlertView不会出现。这仅取决于您要如何处理所有情况,例如:
- 在设置中启用了位置服务,但拒绝此应用程序的权限
- 在设置中启用的位置服务并授权许可
- 设置中禁用的位置服务
确保您处理每种情况,然后对其进行测试。
我不知道我是否精确地回答了您的问题,希望它对您的实施有所帮助。
如果我没记错的话,iOS对话框仅在authorizationStatus
为undetermined
时发布。如果状态为denied
(仅拒绝特定应用程序或禁用整个位置服务时),则需要发出自己的对话框,并具有深层链接到设置