ios cloudkit

ios - ¿Cómo obtener el ID de usuario actual en CloudKit?



(3)

Obtenga iCloud ID / CloudKit Record ID con Swift 2

Aquí hay un fragmento de código que siempre estoy usando para obtener el ID de iCloud del usuario del iPhone (Apple lo llama CloudKit Record ID) para una aplicación de iOS.

Lo único que debe hacer en Xcode es activar la casilla de verificación "CloudKit" en las capacidades de iCloud de su proyecto. No es necesario que use CloudKit de forma activa; es solo el núcleo de todas las actividades de iCloud desde iOS 8.

Es importante saber que Apple nunca expone directamente el ID de iCloud real, sino que siempre devuelve un hash seguro del ID de iCloud y el ID de su aplicación. Pero eso no debería preocuparle, ya que esa cadena aún es única para cada usuario de su aplicación en todos sus dispositivos y se puede usar como reemplazo de inicio de sesión .

Mi función es asíncrona y devuelve un objeto CKRecordID opcional. La propiedad más interesante de ese objeto CKRecordID es recordName.

CKRecordID.recordName es una cadena de 33 caracteres en la que el primer carácter es siempre un guión bajo seguido de 32 caracteres únicos (== su usuario iCloud ID codificado para su aplicación). Es similar a: "_cd2f38d1db30d2fe80df12c89f463a9e"

import CloudKit /// async gets iCloud record name of logged-in user func iCloudUserIDAsync(complete: (instance: CKRecordID?, error: NSError?) -> ()) { let container = CKContainer.defaultContainer() container.fetchUserRecordIDWithCompletionHandler() { recordID, error in if error != nil { print(error!.localizedDescription) complete(instance: nil, error: error) } else { print("fetched ID /(recordID?.recordName)") complete(instance: recordID, error: nil) } } } // call the function above in the following way: // (userID is the string you are intersted in!) iCloudUserIDAsync() { recordID, error in if let userID = recordID?.recordName { print("received iCloudID /(userID)") } else { print("Fetched iCloudID was nil") } }

Me gustaría guardar como máximo un registro (es decir, una calificación) por usuario en una tabla de la base de datos pública. Para ello, necesito guardar la ID de usuario actual o la ID del dispositivo. Pero, ¿cómo puedo conseguirlo?


Aquí está el fragmento de código para Swift 3

import CloudKit /// async gets iCloud record ID object of logged-in iCloud user func iCloudUserIDAsync(complete: @escaping (_ instance: CKRecordID?, _ error: NSError?) -> ()) { let container = CKContainer.default() container.fetchUserRecordID() { recordID, error in if error != nil { print(error!.localizedDescription) complete(nil, error as NSError?) } else { print("fetched ID /(recordID?.recordName)") complete(recordID, nil) } } } // call the function above in the following way: // (userID is the string you are interested in!) iCloudUserIDAsync { (recordID: CKRecordID?, error: NSError?) in if let userID = recordID?.recordName { print("received iCloudID /(userID)") } else { print("Fetched iCloudID was nil") } }