CNAuthorizationStatus和相关文档似乎表明您需要阅读或保存到CNContactStore的权限。 (而且我已经阅读了大多数基于CNContact的问题,它们在该主题上非常一致)。
但是我发现一个应用程序带有“保存联系人”按钮,并以CNContactViewController的形式显示联系人,当我按保存时,该应用程序确实保存到了联系人,但是没有任何权限对话框(而且我从未授予它权限)。
我已卸载,重新安装并再次保存联系人,以确认。
有人做过吗?我使用的是iOS 11.4.1。
答案 0 :(得分:1)
我编写了一个应用程序,用于显示新联系人的联系人视图,并将其保存到不包含以下内容的联系人中:
该内容已在应用程序商店中以“ DropCard”的形式发布了一段时间。
该应用程序还使用CNContactPickerViewController
从商店中选择一个联系人,有趣的是这样:
使用联系人选择器视图的应用不需要访问用户的联系人,并且不会提示用户“授予许可”访问权限。该应用只能访问用户的最终选择。
我得出结论,允许创建单个联系人的行为类似且未记录。
注意:此行为不允许恶意应用程序以编程方式将大量垃圾数据塞入联系人存储,因为您仍然需要用户单击按钮来保存每个新联系人。
这是我用于该部分的代码
let contact = CNMutableContact()
let saveContactVC = CNContactViewController(forNewContact: contact)
saveContactVC.contactStore = CNContactStore()
saveContactVC.delegate = <your delegate here> as? CNContactViewControllerDelegate
saveContactVC.allowsActions = false
let navigationController = UINavigationController(rootViewController: saveContactVC)
root.present(navigationController, animated: false)
// NOTE: app *will* use right->left slide-over annimation...
// then the 'animated: false' supresses the NavUI's top->new VC animation.