我正在研究需要加载用户联系人的项目。为此,我需要联系信息。因此,我正在使用Contacts Framework。它易于使用,而且速度也非常快。我是iOS的新手,所以我只使用了获取联系人信息的代码段。
我做了什么:但是我有问题,那就是当用户安装应用程序并转到相应的ViewController时,ViewController会显示Dialog以获得权限。那里的用户可以拒绝和允许权限。当用户允许该权限但不能以其他方式运行时,我的应用程序运行良好。因此,我使用了一个功能来检查用户是否已向我的应用授予权限。
因此我读到,当用户未授予权限时,我们将无法执行任何操作。除了我们可以带他去允许他允许并取回应用程序的设置。这是我用来转到设置应用程序的代码。
if let appSettings = URL(string: UIApplicationOpenSettingsURLString + Bundle.main.bundleIdentifier!) {
if UIApplication.shared.canOpenURL(appSettings) {
UIApplication.shared.open(appSettings)
}
}
问题:
现在我的问题很关键,也就是说我知道可以带用户 设置视图,现在,如果用户仍然不允许Permission和 只需回到我们的应用程序,在这种情况下,如何检查用户是否给出了 我们是否允许?
我是iOS的新手,很快,请通过示例向我提供帮助。我搜索了很多,但没有找到任何东西。在Android中,有回调函数,也可以使用onResume,但是在iOS中,我使用ViewWillAppear认为与onResume等效,但这种方法不起作用。
答案 0 :(得分:0)
如果您有一个刷新按钮,则可以执行以下操作:
@IBAction func refreshButtonPressed(_ sender: UIButton) {
ContactsService.sharedInstance.CNContactStore.requestAccess(to: .contacts, completion: { granted, error in
if !granted {
//TODO: - Do something (e.g)
self.[method to display an access denied alert to the user]
return
} else {
[insert your code here]
}
}
此外,正如另一位用户在对您的原始问题的答复中所指出的那样:Why does viewWillAppear not get called when an app comes back from the background?可能会让您感兴趣。您可能要在函数内调用ContactsService.sharedInstance.CNContactStore.requestAccess( .... { }
块的内容,并将其挂钩到UIApplication.willEnterForegroundNotification
https://developer.apple.com/documentation/contacts https://developer.apple.com/documentation/contacts/cncontactstore https://developer.apple.com/documentation/contacts/cncontactstore/1402873-requestaccess