ioscloudkitairplane-mode

How to identify iCloud logged in user in airplane mode?


I try to get userRecordID in airplane mode, but I get an error, any other way?

class func asdf() {

    var defaultContainer = CKContainer.defaultContainer()
    var publicDatabase = defaultContainer.publicCloudDatabase

    defaultContainer.fetchUserRecordIDWithCompletionHandler({ userRecordID, error in

        if error == nil {

            println("userRecordID.recordName : \(userRecordID.recordName)")
        } else {
            println("\(error.localizedDescription)")
        }
    })
}

Terminal: Couldn't renew our secure session

I put an accountStatusWithCompletionHandler call outside of fetchUserRecordIDWithCompletionHandler, that returned CKAccountStatus.Available.


Solution

  • I came across to this code, comparing recently and previous logged in user's token, and if the same, use the previously downloaded userRecordID. The only problem that in some cases on my iPad ubiquityIdentityToken method returns nil even dow I am logged in, strange.

    class func checkUser() {
    
            let ubiquityIdentityToken = NSFileManager.defaultManager().ubiquityIdentityToken
            let status = Utility.status()
            let prevUbiquityIdentityToken = status.objectForKey("ubiquityIdentityToken")
    
            if ubiquityIdentityToken != nil && ubiquityIdentityToken!.isEqual(prevUbiquityIdentityToken) {
    
            } else if ubiquityIdentityToken != nil && !ubiquityIdentityToken!.isEqual(prevUbiquityIdentityToken) {
    
                status.setObject(ubiquityIdentityToken!, forKey: "ubiquityIdentityToken")
                Utility.saveStatus(status)
    
                let defaultContainer = CKContainer.defaultContainer()
                let publicDatabase = defaultContainer.publicCloudDatabase
    
                defaultContainer.fetchUserRecordIDWithCompletionHandler({ userRecordID, error in
                    if error == nil {
                        //do some stuff
                        }) 
                    } else {
                        println("\(error.localizedDescription)")
                    }
                })
            } else {
                //do some stuff
                status.removeObjectForKey("ubiquityIdentityToken")
                Utility.saveStatus(status)
            }
        }