iOS Contacts - сохранить один контакт без разрешений (или разрешений UI)
Похоже, что CNAuthorizationStatus и соответствующая документация предполагают, что вам нужно разрешение на чтение или сохранение в CNContactStore. (И я прочитал большинство вопросов на основе CNContact, и они довольно последовательны по этой теме).
Но я нашел приложение, которое имеет кнопку "Сохранить контакт" и отображает контакт в виде, похожем на CNContactViewController, и когда я нажал кнопку "Сохранить", приложение действительно сохранило контакты, но без диалогового окна разрешений (и я никогда не давал ему разрешения),
Я удалил, переустановил и снова сохранил контакт, чтобы подтвердить.
Кто-нибудь делал это раньше? Я был на iOS 11.4.1.
0 ответов
Я написал приложение, которое представляет представление контактов для нового контакта и сохраняет его в контактах без:
- запрашивая разрешение
- с использованием целевой строки NSContactsUsageDescription
Некоторое время он был опубликован в магазине приложений под названием "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.