Saltar al contenido

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

Te recomendamos que revises esta solución en un entorno controlado antes de pasarlo a producción, saludos.

Solución:

Obtenga iCloud ID / CloudKit Record ID con Swift 2

Aquí hay un fragmento que siempre uso para obtener el ID de iCloud del usuario de iPhone (Apple lo llama ID de registro de CloudKit) 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 la ID real de iCloud, sino que siempre devuelve un hash seguro de la ID de iCloud y la ID de su aplicación. Pero eso no debe preocuparte porque eso string sigue siendo único 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 un personaje de 33 string donde el primer carácter es siempre un guión bajo seguido de 32 caracteres únicos (== su ID de iCloud de usuario codificada para su aplicación). Se parece 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")
    

querrás llamar -[CKContainer fetchUserRecordIDWithCompletionHandler:] para obtener el ID de registro de usuario actual:

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")
    

valoraciones y comentarios

Puedes asentar nuestra faena dejando un comentario y puntuándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.