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

12

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

类似于Google People API提供的Google联系人功能。

场景是用户使用桌面浏览器打开我的网站并导入所有联系人。
因此,用户不应该花时间输入他们的所有联系人才能在网站上使用它们。

我正在尝试使用CloudKit JS解决此问题。

根据此文献,.discoverAllUserIdentities 似乎符合我的需求:

GET users/discover: 获取当前用户通讯录中的所有用户标识,详见“发现所有用户标识(GET users/discover)”

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

看起来Web应用程序没有权限获取联系人。如果是这样,如何请求权限?

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

2个回答

3

更新的答案

由于您未构建本地Web应用程序,因此无法请求访问用户的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
  }

1
问题涉及Web应用程序。Matthew,请解释一下,一个网站如何向iOS请求权限? - user3697159
是的,这个问题是关于一个普通的网站,无论访问者使用哪种设备,都可以通过桌面浏览器来访问。 - user3697159
浏览器没有合法的方式可以获取iCloud /通讯录访问权限。这将是一个安全噩梦,因此它在多个级别上被锁定。只有在构建本地Web应用程序时才能起作用。 - Matthew Beckman
场景是这样的,一个用户使用桌面浏览器来访问我的网站,并导入全部联系人。因此,用户不应该浪费时间输入所有联系人以便在网站上使用它们。 - user3697159
我感到困惑。如果没有公共HTTP API,以下链接的GitHub存储库是如何工作的?https://github.com/adammck/ruby-icloudhttps://github.com/picklepete/pyicloud - bubbleking
显示剩余2条评论

1

来自苹果公司的文档:

讨论

使用此方法获取有关应用程序其他用户的信息。此方法返回满足以下条件的用户的信息:

  • 该用户必须在当前用户的通讯录中。
  • 该用户必须曾运行过该应用程序。
  • 该用户必须已经授权允许在此容器中被发现。

discoverAllUserIdentities指南


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接