iOS不可靠的位置许可警报



在我们的应用程序中,我们在一个视图上要求位置许可(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对话框仅在authorizationStatusundetermined时发布。如果状态为denied(仅拒绝特定应用程序或禁用整个位置服务时),则需要发出自己的对话框,并具有深层链接到设置

相关内容

  • 没有找到相关文章

最新更新