通过CloudKit JS从iCloud联系人获取地址

时间:2016-08-25 11:43:16

标签: icloud cloudkit icloud-api

我希望我的网络应用程序允许从iCloud联系人导入用户联系人(特别是地址)。

类似于Google People API为Google通讯录提供的内容。

方案是,用户使用桌面浏览器访问我的网站并导入其所有联系人。
因此,用户不应该浪费时间键入所有联系人,以便能够在网站上使用它们。

我正在尝试使用CloudKit JS来解决这个问题。

看起来.discoverAllUserIdentities就是我需要的东西:

  

获取用户/发现:获取当前用户的地址簿中的所有用户身份,如发现所有用户身份(GET用户/发现)中所述

但是,我得到了空集: {"users":[]}

似乎Web应用程序没有获取联系人的权限。如果是这样,如何申请权限?

或者我可能是完全错误的方式,如果问题可以解决,请指出正确的方向。

2 个答案:

答案 0 :(得分:3)

更新答案

由于您没有构建本机Web应用程序,因此无法请求访问用户iCloud联系人。如果允许网站访问用户数据,这将是一场安全噩梦。像ShuttleCloud这样的工具提供了用于迁移用户联系人的API。这就是Google用于自己的Gmail服务。

所以不,你不能通过浏览器请求直接访问联系人,但有一些工具可以使导入更容易。

旧答案

您需要向iOS请求许可。您可以通过查看Apple的documentation

来完成此操作

实施例

#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
  }

答案 1 :(得分:1)

来自苹果的文件:

<强>讨论

使用此方法检索有关该应用的其他用户的信息。此方法返回有关满足以下条件的用户的信息:

  • 用户必须位于当前用户的地址簿中。
  • 用户必须 已经运行了应用程序。
  • 用户必须已授予权限 发现这个容器。

Guide of discoverAllUserIdentities