Получение адресов из контактов iCloud через CloudKit JS

Я хочу, чтобы мое веб-приложение позволяло импортировать контакты пользователя (особенно адреса) из контактов iCloud.

Нечто подобное тому, что API Google People предоставляет для контактов Google.

Сценарий таков, что пользователь заходит на мой сайт с помощью браузера на рабочем столе и импортирует все свои контакты.
Таким образом, пользователь не должен тратить время на ввод всех своих контактов, чтобы иметь возможность использовать их на сайте.

Я пытаюсь использовать CloudKit JS для этой проблемы.

Похоже, что .discoverAllUserIdentities это то, что мне нужно в соответствии с этим:

ПОЛУЧИТЬ пользователей / обнаружение: получает все идентификаторы пользователей в адресной книге текущего пользователя, как описано в разделе "Обнаружение всех идентификаторов пользователей" (ПОЛУЧИТЬ пользователей / обнаружение)

Тем не менее, я получаю пустой набор: {"users":[]}

Похоже, что веб-приложение не имеет прав для получения контактов. Если это так, как запросить разрешения?

Или, может быть, я нахожусь на совершенно неверном пути, тогда, пожалуйста, укажите мне правильное направление, если проблема решаема.

2 ответа

Обновленный ответ

Поскольку вы не создаете нативное веб-приложение, вы не можете запрашивать доступ к контактам пользователей iCloud. Это будет кошмар безопасности, если веб-сайтам будет разрешен доступ к данным пользователей. Существуют такие инструменты, как ShuttleCloud, которые предлагают API для переноса контактов пользователей. Это то, что Google использует для своей собственной службы Gmail.

Так что нет, вы не можете запросить прямой доступ к контактам через браузер, но есть инструменты, облегчающие импорт.

Старый ответ

Вы должны спросить у iOS разрешение. Вы можете сделать это, просмотрев документацию Apple.

пример

#import <AddressBookUI/AddressBookUI.h>

  // Request authorization to Address Book
  ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);

  if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
      if (granted) {
          // First time access has been granted, add the contact
          [self _addContactToAddressBook];
      } else {
          // User denied access
          // Display an alert telling user the contact could not be added
      }
    });
  }
  else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
    // The user has previously given access, add the contact
    [self _addContactToAddressBook];
  }
  else {
    // The user has previously denied access
    // Send an alert telling user to change privacy setting in settings app
  }

Документ от яблока:

обсуждение

Используйте этот метод для получения информации о других пользователях приложения. Этот метод возвращает информацию о тех пользователях, которые соответствуют следующим критериям:

  • Пользователь должен быть в адресной книге текущего пользователя.
  • Пользователь должен запустить приложение.
  • Пользователь должен был предоставить разрешение на обнаружение для этого контейнера.

Руководство по открытию всех пользователей

Другие вопросы по тегам