【问题标题】:Getting addresses from iCloud contacts via CloudKit JS通过 CloudKit JS 从 iCloud 联系人获取地址
【发布时间】:2017-01-01 19:57:49
【问题描述】:

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

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

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

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

看起来.discoverAllUserIdentities是我需要的:

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

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

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

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

【问题讨论】:

    标签: icloud cloudkit icloud-api


    【解决方案1】:

    更新答案

    由于您不是在构建本机网络应用程序,因此您无法请求访问用户的 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
      }
    

    【讨论】:

    • 问题是关于 Web 应用程序的。 Matthew,请解释一下,网站如何向 iOS 请求权限?
    • 如果它是 iOS 的原生 Web 应用程序,您可以使用上面链接的文档请求访问联系人。如果它只是您在 Safari 或其他浏览器中加载的网页,那么不,您无法访问 iOS 或 Android 上的联系人。
    • 是的,问题是关于一个普通的网站,无论访问者使用哪种设备,都可能在桌面浏览器的帮助下访问。
    • 只有浏览器才能获得 iCloud/通讯录访问权限是没有合法的方法的。那将是一场安全噩梦,所以它在很多层面上都被锁定了。只有在构建原生 Web 应用程序时它才会起作用。
    • 为了让问题更清楚,我添加了以下内容: > 场景是,用户使用桌面浏览器访问我的站点并导入他们的所有联系人。因此,用户不应浪费时间输入所有联系人以便在网站上使用它们。
    【解决方案2】:

    来自苹果的文件:

    讨论

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

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

    Guide of discoverAllUserIdentities

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2012-09-09
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      相关资源
      最近更新 更多