12

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

类似于Google People API为 Google Contacts 提供的东西。

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

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

看起来.discoverAllUserIdentities是我需要的:

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

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

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

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

4

2 回答 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
  }
于 2017-02-17T07:22:18.327 回答
1

来自苹果的文件:

讨论

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

  • 用户必须在当前用户的通讯录中。
  • 用户必须已运行该应用程序。
  • 用户必须已授予此容器的发现权限。

discoverAllUserIdentities 指南

于 2017-08-29T06:47:48.337 回答