iOS Contacts - сохранить один контакт без разрешений (или разрешений UI)

Похоже, что CNAuthorizationStatus и соответствующая документация предполагают, что вам нужно разрешение на чтение или сохранение в CNContactStore. (И я прочитал большинство вопросов на основе CNContact, и они довольно последовательны по этой теме).

Но я нашел приложение, которое имеет кнопку "Сохранить контакт" и отображает контакт в виде, похожем на CNContactViewController, и когда я нажал кнопку "Сохранить", приложение действительно сохранило контакты, но без диалогового окна разрешений (и я никогда не давал ему разрешения),

Я удалил, переустановил и снова сохранил контакт, чтобы подтвердить.

Кто-нибудь делал это раньше? Я был на iOS 11.4.1.

0 ответов

Я написал приложение, которое представляет представление контактов для нового контакта и сохраняет его в контактах без:

Некоторое время он был опубликован в магазине приложений под названием "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.
Другие вопросы по тегам