Enviar mensajes entre iOS y WatchOS con WatchConnectivity en watchOS2

Vi el WWDC2015 y vi que ahora puedes desarrollar aplicaciones nativas en observación. Esto abrió muchas capacidades y me pregunto cómo podría enviar datos entre mi aplicación iOS y mi aplicación AppleWatch.

Vi que hay un nuevo marco llamado WatchConnectivity. ¿Cómo puedo usar esto y cuáles son mis opciones cuando envío datos hacia adelante y hacia atrás?

WatchConnectivity

En primer lugar, las dos clases que se supone que deben comunicarse entre sí (iOS y watchOS) deben cumplir el y WatchConnectivity marco de WatchConnectivity

Antes de poder enviar datos, debe verificar si su dispositivo puede enviar datos

 if ([WCSession isSupported]) { WCSession *session = [WCSession defaultSession]; session.delegate = self; [session activateSession]; NSLog(@"WCSession is supported"); } 

Luego, si desea utilizar la “mensajería interactiva” (API sendMessage), deberá ver si el otro dispositivo es accesible primero:

 if ([[WCSession defaultSession] isReachable]) { //Here is where you will send you data } 

Las API de “operaciones en segundo plano” no requieren que el dispositivo homólogo sea accesible en el momento en que se llama a la API WCSession.

Tiene varias opciones cuando se trata de transferir datos entre sus aplicaciones, en la Documentación de Apple se describen de esta manera:

  • Use el updateApplicationContext:error: para comunicar solo la información de estado más reciente a la contraparte. Cuando la contraparte se despierta, puede usar esta información para actualizar su propio estado y permanecer sincronizada. Enviar un nuevo diccionario con este método sobrescribe el diccionario anterior.

  • Utilice sendMessage:replyHandler:errorHandler: o sendMessageData:replyHandler:errorHandler: método para transferir datos inmediatamente a la contraparte. Estos métodos están destinados a la comunicación inmediata cuando su aplicación iOS y la extensión WatchKit están ambas activas.

  • Use el método transferUserInfo: para transferir un diccionario de datos en segundo plano. Los diccionarios que envía se ponen en cola para su entrega a la contraparte y las transferencias continúan cuando la aplicación actual se suspende o finaliza.

  • Utilice el método transferFile:metadata: para transferir archivos en segundo plano. Use este método en los casos en que desee enviar más de un simple diccionario de valores. Por ejemplo, use este método para enviar imágenes o documentos basados ​​en archivos.

Le daré un ejemplo de cómo enviar / recibir datos con el contexto de la aplicación

Enviar datos:

 WCSession *session = [WCSession defaultSession]; NSError *error; [session updateApplicationContext:@{@"firstItem": @"item1", @"secondItem":[NSNumber numberWithInt:2]} error:&error]; 

Recibir datos:

 - (void) session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary *)applicationContext { NSLog(@"%@", applicationContext); NSString *item1 = [applicationContext objectForKey:@"firstItem"]; int item2 = [[applicationContext objectForKey:@"secondItem"] intValue]; } 

Para obtener más información sobre WatchConnectivity, realmente recomiendo ver el video de la sesión de WWDC2015 y leer la documentación de Apple sobre WatchConnectivity.

    Intereting Posts