为啥我的 iOS 应用程序不询问用户访问相机的权限?

Posted

技术标签:

【中文标题】为啥我的 iOS 应用程序不询问用户访问相机的权限?【英文标题】:Why my iOS app does not ask user permission to access camera?为什么我的 iOS 应用程序不询问用户访问相机的权限? 【发布时间】:2016-02-19 08:13:04 【问题描述】:

我开发 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 doesn't have permission to use Camera, please change privacy settings" 并且应用无法使用相机。

编辑: 这意味着未经用户许可,不允许该应用访问相机。 不仅是相机,相机胶卷也有同样的问题。

所有这些事情都是在我重置设置/重置/重置所有设置中的设置后发生的。在此之前,该应用运行良好。

【问题讨论】:

我想不知何故你没有允许相机启动,一旦设置了权限警报就不会再出现你可以通过更改设备日期来尝试。 看看这个***.com/questions/26070393/… @ReshmiMajumder,今天是 19 岁。我删除了该应用程序。将电话日期更改为 21。然后关闭电话。然后开启。重新安装应用程序。但还是不问。为什么已经超过 24 小时了? @sbarow,该链接显示将用户带到设置页面。但是该应用程序不要求许可,然后设置没有任何东西可以更改我的应用程序的相机访问权限。根据文件是,在请求许可后,这些用户设置就出来了。现在该应用不请求许可了。 @batuman 该链接实际上显示检查当前身份验证状态是什么,然后根据该状态进行处理。您检查过您的身份验证状态吗? 【参考方案1】:

问题现在解决了。我需要逐步追溯并花了我很长时间来解决问题。 有人建议包括 NSCamerausageDescription 键。实际上对于 iOS 7 及更高版本的设备是必需的。我包含了密钥,但尚未询问用户权限。 最后我在 Info.plist 发现了问题。 有一些额外的行,我删除了三行。不确定它们与我的问题有什么关系。 我删除的是

(1)获取信息字符串

(2)捆绑显示名称

(3)应用类别

删除 info.plist 中的这三行后。然后应用程序询问用户权限。关键是您可能需要检查您的 Info.plist 是否存在此类问题。

【讨论】:

哇...这实际上对我也有用。在我的情况下,我只需要删除捆绑显示名称,现在它要求相机权限,而以前不是。 NSCameraUsageDescriptionKey 一直存在。 从 plist 中删除 Bundle 显示名称,然后运行该应用程序也对我有用。然后我取消了删除,从设备中删除了应用程序并重新运行,现在显示相机权限警报。这是在带有 iOS 12.0.1 的 iPhone 6s 上。很奇怪。【参考方案2】:

你需要在 info.plist 中的“Bundle display name”中输入你的应用名称

【讨论】:

【参考方案3】:

看看上面矛盾的解决方案 - 删除和添加捆绑显示名称 - 让我想到了这个错误的原因。我猜这个(Apple)错误只出现在没有相机权限时安装了相同应用程序的设备上(没有相机功能的旧版本或只是糟糕的测试飞行版本)。因此,如果您只是从头开始删除并安装错误的应用程序权限将变得正常。说到不卸载现有应用程序的解决方法,如果您在 plist 中更改捆绑包描述(删除或添加),那么 iOS 将使用新的 plist,并按照我们的预期使用已安装的权限。

【讨论】:

以上是关于为啥我的 iOS 应用程序不询问用户访问相机的权限?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中请求和检查权限

为啥iOS上的FB SDK要求朋友列表的权限,而应用程序不要求它

如何关闭 iOS 相机访问弹出窗口?

仅在单击按钮后请求相机权限

为啥在设置中显示应用之前需要询问所有权限?

iOS:控制访问相机胶卷新出现