ios - 我如何“通过电子邮件查找我”

标签 ios icloud icloud-drive

我正在制作一个iOS应用程序,我想使用iOS设置中iCloud下的iCloud功能“通过电子邮件查找我”。

我想通过按用户的iCloud识别用户来简化用户体验,这样他们就不必记住我的应用程序的登录信息。

最佳答案

据我了解,这是与CKDiscoverAllContactsOperation相关的CloudKit功能。您可以使用同一应用从联系人中发现人,并且可以被他们发现。您需要先请求该功能的权限,如下所示:

CKContainer.defaultContainer().requestApplicationPermission(CKApplicationPermissions.UserDiscoverability) { [unowned self] (status, error) -> Void in
   //Your code handling error or success...
}

注意

iOS 10发行说明提到,此操作和相关功能将被更改。在iOS 10以上版本中,您需要使用CKDiscoverAllUserIdentitiesOperation
用法示例

首先初始化容器,请注意您的容器accountStatus必须正确
let container = CKContainer(identifier: "iCloud.com.YourContainerID")

稍后,请允许
container.requestApplicationPermission(CKApplicationPermissions.userDiscoverability) { [unowned self] (status, error) -> Void in     
   if let err = error {
      print(err)
   }
   else if status == CKApplicationPermissionStatus.granted{
      //success
   }
   else{
      print("Permission not granted")
      print(status)
   }
}

以后,您可以获取当前的用户记录ID并创建订阅(例如,请注意,创建订阅不需要您的权限和用户记录ID,但在我的情况下,需要创建谓词):
container.fetchUserRecordID { [weak self] (recordID, error) in

    let predicate = NSPredicate(format: "user = %@",userRecordID.recordName)
    let subscription = CKSubscription(recordType: "myRecordType", predicate: predicate, options: CKSubscriptionOptions.firesOnRecordCreation)

    container.publicCloudDatabase.save(subscription, completionHandler: { (subscription, error) in 
        //completion stuff here
    }
}

friend 可发现性示例
let discoverOperation = CKDiscoverAllUserIdentitiesOperation()

var users = [CKUserIdentity]()

discoverOperation.discoverAllUserIdentitiesCompletionBlock = { [weak self] (error: Error?) -> Void in

   if let err = error as? NSError{
      print("Discover Friends Error: \(err)")
   } else {    
      //do whatever you want with discovered contacts
   }
}

discoverOperation.userIdentityDiscoveredBlock = { (userIdentity: CKUserIdentity) -> Void in
   users.append(userIdentity)
}

discoverOperation.queuePriority = Operation.QueuePriority.high //this option is up to your tasks
container.add(discoverOperation)

关于ios - 我如何“通过电子邮件查找我”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746935/

相关文章:

iphone - 将联系人从一个源复制到另一个源

git - iCloud Drive 桌面同步与 Git - 已删除的文件重新出现并带有数字后缀的重复项

ios - 当我尝试在 Swift 中排序操作时,为什么总是收到此错误?

ios - 核心数据与 Ensembles 同步 : Remote changes aren't pulled down until the local model changes

ios - 如何从字符串中删除换行符?

iphone - 为什么我们的应用程序无法在iCloud中存储简单的键/值对?

iOS无处不在的文件没有上传到iCloud(模拟器)

ios - iCloud Drive 与 iCloud 文档

iOS:使对象数组在屏幕上移动

ios - 在Xcode中更改导航栏高度后如何更改标题的位置