ios objective-c apple-watch watch-os-2

Enviar mensajes entre iOS y WatchOS con WatchConnectivity en watchOS2



objective-c apple-watch (1)

Vi WWDC2015 y vi que ahora puedes desarrollar aplicaciones nativas en el reloj. 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 al enviar datos de un lado a otro?


WatchConnectivity

Primero, las dos clases que se supone que se comunican entre sí (iOS y watchOS) deben conformar el <WCSessionDelegate> 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 "mensajería interactiva" (API sendMessage), primero deberá ver si se puede acceder al otro dispositivo:

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

Las API de "operaciones en segundo plano" no requieren que el dispositivo de contraparte sea accesible en el momento en que llame a la API de WCSession.

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

  • Utilice 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 sincronizado. Enviar un nuevo diccionario con este método sobrescribe el diccionario anterior.

  • Utilice el sendMessage:replyHandler:errorHandler: o sendMessageData:replyHandler:errorHandler: 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 activas.

  • Utilice 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.

  • Use el método transferFile:metadata: para transferir archivos en segundo plano. Use este método en los casos en que desee enviar más que 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 Contexto de 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<NSString *,id> *)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 WWDC2015 y leer la Documentación de Apple sobre WatchConnectivity