为什么我的iOS应用程序没有要求用户允许访问相机?

6

我开发iOS应用程序,使用摄像头。AVCaptureDeviceInput用于与相机进行接口交互。 我检查授权状态如下:

- (void)checkDeviceAuthorizationStatus
{
    NSString *mediaType = AVMediaTypeVideo;

    [AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {
        if (granted)
        {
            //Granted access to mediaType
            [self setDeviceAuthorized:YES];
        }
        else
        {
            //Not granted access to mediaType
            dispatch_async(dispatch_get_main_queue(), ^{
                [[[UIAlertView alloc] initWithTitle:@"AVCam!"
                                            message:@"AVCam doesn't have permission to use Camera, please change privacy settings"
                                           delegate:self
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil] show];
                [self setDeviceAuthorized:NO];
            });
        }
    }];
}

当我启动应用程序时,为什么它不会要求用户授权访问相机?因此,该应用程序不会出现在设置/隐私/相机中,以手动允许访问相机。然后显示此错误消息“AVCam没有权限使用相机,请更改隐私设置”,应用程序无法使用相机。
编辑:这意味着未经用户许可,应用程序不允许访问相机。不仅如此,相册也有相同的问题。
所有这些都是在我重置设置中发生的(设置/重置/重置所有设置)。在那之前,该应用程序运行良好。

请看这个链接:https://dev59.com/cl8e5IYBdhLWcg3wHXeJ - sbarow
@ReshmiMajumder,今天是19号。我删除了这个应用程序。将手机日期更改为21号。然后关闭手机。再打开。重新安装应用程序。但仍然没有询问。为什么已经超过24小时了? - batuman
@sbarow,该链接显示将用户带到设置页面。但是该应用程序不会询问权限,因此设置没有任何更改我的应用程序相机访问权限的选项。根据文档,在请求权限后,这些用户设置会出现。现在该应用程序不会请求权限。 - batuman
@batuman 那个链接实际上展示了检查当前的授权状态,然后根据那个状态进行处理。你有检查过你的授权状态吗? - sbarow
显示剩余2条评论
3个回答

6
问题现已解决。我需要逐步追溯并花费很长时间来解决这个问题。 一些人建议包括 NSCamerausageDescription 键。实际上,对于使用 iOS 7 及以上版本的设备是必需的。我包含了键,但仍未要求用户权限。 最后,我在 Info.plist 中找到了问题。 有一些额外的行,我删除了三行。不确定它们与我的问题有什么关系。 我删除的是: (1)获取信息字符串 (2)包显示名称 (3)应用程序类别 在 info.plist 中删除这三行后,应用程序会询问用户权限。关键是您可能需要检查您的 Info.plist 是否存在此类问题。

2
哇...这对我也起作用了。在我的情况下,我只需要删除Bundle Display Name,现在它正在请求相机权限,在此之前它没有。NSCameraUsageDescriptionKey一直存在。 - gregtzar
1
从plist中删除Bundle Display Name,然后运行应用程序对我也起作用。然后我撤消了删除操作,从设备中删除了应用程序并重新运行,现在相机权限警报显示出来了。这是在iOS 12.0.1的iPhone 6s上发生的。非常奇怪。 - Robert Hartman

0

你需要在 info.plist 文件中的 "Bundle display name" 中填写你的应用名称。


0

看到上面矛盾的解决方案——删除和添加捆绑显示名称——让我想到了这个 bug 的原因。我猜这个(苹果)bug 只会出现在那些在没有相机权限的时候安装了同一个应用程序的设备上(没有相机功能的旧版本或者只是测试版的不好版本)。所以,如果你只是删除并从头安装有问题的应用程序,权限就会变得正常。说到不卸载现有应用程序的解决方法,如果你在 plist 中更改捆绑描述(删除或添加),那么 iOS 就会使用新的 plist,并覆盖已经安装的权限,正如我们所期望的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接