notes apple app ios swift notifications cloudkit

ios - apple - NSUbiquityIdentityDidChangeNotification no funciona?



apple notes windows (2)

Estoy creando una aplicación de Cloudkit y he intentado varias formas de obtener NSUbiquityIdentityDidChangeNotification , pero nunca puedo recibir esta notificación.

He intentado ambas versiones de código bajo el delegado didFinish y los métodos viewDidLoad . Intenté llamarlo desde otra notificación: UIApplicationDidBecomeActiveNotification . También puse import Foundation en la parte superior de los archivos.

Aquí está el código básico que he intentado:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleIdentityChanged:", name: NSUbiquityIdentityDidChangeNotification, object: nil)

// Y este lo intenté también desde otra publicación aquí en SO:

var localeChangeObserver = NSNotificationCenter.defaultCenter().addObserverForName(NSUbiquityIdentityDidChangeNotification, object: nil, queue: NSOperationQueue.mainQueue()) { _ in println("The user’s iCloud login changed: should refresh all user data.") }

¿Alguien sabe cómo hacer que esta notificación funcione solo para una aplicación de cloudkit en poco tiempo? Realmente solo quiero detectar el cambio de estado de iCloud y luego iniciar la búsqueda del userID si ha habido un cambio.

No es que necesite acceder a ubiquityIdentityToken , pero me preguntaba por qué no almacenar el token y cada vez que la aplicación comienza a comparar el token actual con el del almacenamiento local para ver si es una cuenta diferente o nula. Por lo tanto, ¿por qué es necesaria la notificación?

Además, el código para obtener el token solo funciona si activo "iCloud Documents", que no necesito. ¿Alguien sabe las implicaciones de tener eso activado para una aplicación social que no lo necesita? ¿Y hay otra forma de obtener el token sin habilitar los documentos de iCloud?

Este es el código que utilicé para obtener el token y lo coloqué en el método delegar didFinish , pero solo funciona si los documentos iCloud están activados:

var token = NSFileManager.defaultManager().ubiquityIdentityToken println("token is /(token!)")


En iOS, cuando salgo de iCloud, mi aplicación muere. Por lo tanto, parece que no es realmente necesario recibir NSUbiquityIdentityDidChangeNotification . Como ya dijiste, parece ser suficiente comparar el token actual con el token guardado.

Sin embargo, en el Apple TV, mi aplicación no murió cuando salí de iCloud. Aquí noté que la notificación no se activó, como usted describió. Dado que la aplicación no se elimina, una notificación estaría en orden. (¿Apple olvidó matar aplicaciones en Apple TV cuando se cambia la cuenta de iCloud?)

Con Apple TV no hay ningún contenedor de documentos de iCloud disponible (a menos que lo comparta explícitamente desde una aplicación de iOS). Encontré que en el sitio web del centro de desarrollo, para el identificador de la aplicación, iCloud se mostraba como "Configurable" y no como "Activado" si no se seleccionaba ningún contenedor de documentos. Me pregunto si esto tiene un efecto en la recepción de notificaciones.

Tanto en Apple TV como en iOS, también puedo confirmar que el token de iCloud es nil cuando no se usan documentos (aquí: key-value-store solamente). Ahora eso dificulta las aplicaciones de Apple TV (porque la aplicación no se elimina en el cambio de la cuenta de iCloud, como en iOS) para detectar cambios en la cuenta.

Me acabo de dar cuenta de que mi aplicación Apple TV recibió varios NSUbiquitousKeyValueStoreDidChangeExternallyNotification cuando NSUbiquitousKeyValueStoreDidChangeExternallyNotification a otra cuenta de iCloud, para reflejar los cambios. Supongo que esto es tan bueno como se pone. Estas notificaciones vienen con la clave NSUbiquitousKeyValueStoreChangeReasonKey en userInfo , y un valor de NSUbiquitousKeyValueStoreAccountChange indica que la cuenta ha cambiado.

Lamento no poder brindar una solución directa, tal vez ayudó a compartir mi experiencia.


Para recibir una notificación en iOS cuando un usuario inicia o CKAccountChangedNotification sesión en iCloud mientras usa su aplicación, use CKAccountChangedNotification lugar de la notificación NSUbiquityIdentityChanged .

(Explicación más larga: https://.com/a/38689094/54423 .)