【问题标题】:How do I "Look Me Up By Email"如何“通过电子邮件查找我”
【发布时间】:2016-03-02 12:13:53
【问题描述】:

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

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

【问题讨论】:

    标签: ios icloud icloud-drive


    【解决方案1】:

    据我了解,这是与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
        }
    }
    

    好友可发现性示例

    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)
    

    【讨论】:

    • 我在 Apple Docs 中找不到任何有关“查找我”iCloud 设置的文档,您是否有解释它的链接或使用 iCloud 电子邮件发现联系人的意义何在?
    • 你有这个功能的示例教程吗?
    • @JAHelia 重点是您可以让您的用户能够与他们的朋友进行交流,而他们的朋友也已经是该应用的用户。你如何以及为什么这样做是另一个问题。在我看来,这个功能现在几乎被放弃了,它也受到了很大的限制。
    • @JAHelia 偶尔我有这个功能的旧代码。它在 Swift v.3 或 v.2 上。
    猜你喜欢
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多