CKContainer.discoverAllIdentities always fails

前端 未结 3 1560
别那么骄傲
别那么骄傲 2021-02-14 23:08

The CKContainer.discoverAllIdentities request always fails in my CloudKit app. It has continually failed over the course of several days.

A simplified versi

3条回答
  •  不知归路
    2021-02-14 23:55

    Edit:

    Apple fixed this issue day after this answer was posted, coincidence?! I don't think so :)


    This is not actually the answer to the question, but a fix that helped me to cross over this error. It will require you to change your app UI interaction and add ContactsUI framework to your project, moreover your user will be responsible for selecting a contact with iCloud related email.

    Good news is that the method discoverUserIdentity is still works. So, you can use it to get CKUserIdentity from manually selected contact.

    func addContact(_ contact:CNContact) {
    
         var lookUpEmails = [CKUserIdentityLookupInfo]()
         for email in contact.emailAddresses {
             lookUpEmails.append(CKUserIdentityLookupInfo(emailAddress: (email.value as String)))
         }
    
         let checkUserOperation = CKDiscoverUserIdentitiesOperation()
            
         checkUserOperation.userIdentityLookupInfos = lookUpEmails
            
         checkUserOperation.userIdentityDiscoveredBlock = { [unowned self] (identity, info) -> Void in
             if identity.hasiCloudAccount {
                 if let recordID = identity.userRecordID {
                      //do something with discovered user
                 }
                 checkUserOperation.cancel()
             }
         }
         checkUserOperation.queuePriority = Operation.QueuePriority.high
         CKContainer.default().add(checkUserOperation)
    }
    

    It might sound useless, but in my case, it helped me to solve the Server Rejected Request" (15/2000) error, to fix one of the features of my app and continue to use the other feature related code with less efforts than I thought.

    I hope someone will find this helpful.

提交回复
热议问题