Подтвердить что ты не робот

Отправлять сообщения между iOS и WatchOS с WatchConnectivity в watchOS2

Я смотрел WWDC2015 и увидел, что теперь вы можете создавать собственные приложения на часах. Это открыло множество возможностей, и мне интересно, как я мог отправлять данные между моим приложением iOS и моим приложением AppleWatch.

Я увидел, что есть новая структура, называемая WatchConnectivity. Как я могу использовать это и каковы мои параметры при отправке данных назад и вперед?

4b9b3361

Ответ 1

WatchConnectivity

Сначала два класса, которые должны взаимодействовать друг с другом (iOS и watchOS), должны соответствовать структурам <WCSessionDelegate> и #import WatchConnectivity

Перед отправкой данных необходимо проверить, может ли ваше устройство отправлять данные.

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

Затем, если вы хотите использовать "интерактивные сообщения" (API-интерфейсы sendMessage), вам нужно будет проверить, доступно ли другое устройство:

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

API-интерфейсы "фоновых операций" не требуют, чтобы устройство-партнер было доступно в тот момент, когда вы вызываете API WCSession.

У вас есть несколько вариантов передачи данных между вашими приложениями, в Apple Documentation они описываются следующим образом:

  • Используйте метод updateApplicationContext:error: для передачи только самой последней информации о состоянии в аналог. Когда встречный сигнал просыпается, он может использовать эту информацию для обновления своего собственного состояния и оставаться в синхронизации. Отправка нового словаря с помощью этого метода перезаписывает предыдущий словарь.

  • Используйте метод sendMessage:replyHandler:errorHandler: или sendMessageData:replyHandler:errorHandler: для немедленной передачи данных в аналог. Эти методы предназначены для немедленной связи, когда ваши приложения iOS и расширение WatchKit являются активными.

  • Используйте метод transferUserInfo: для переноса словаря данных в фоновом режиме. Словаки, которые вы отправляете, поставлены в очередь для доставки к контрагенту, и передачи продолжаются, когда текущее приложение приостановлено или завершено.

  • Используйте метод transferFile:metadata: для передачи файлов в фоновом режиме. Используйте этот метод в тех случаях, когда вы хотите отправить более простой словарь значений. Например, используйте этот метод для отправки изображений или файлов на основе документов.

Я приведу вам пример того, как отправлять/получать данные с помощью Контекст приложения

Отправить данные:

WCSession *session = [WCSession defaultSession];
NSError *error;

[session updateApplicationContext:@{@"firstItem": @"item1", @"secondItem":[NSNumber numberWithInt:2]} error:&error];

Получить данные:

- (void) session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext {

    NSLog(@"%@", applicationContext);


    NSString *item1 = [applicationContext objectForKey:@"firstItem"];
    int item2 = [[applicationContext objectForKey:@"secondItem"] intValue];
}

Для получения дополнительной информации о WatchConnectivity я действительно рекомендую смотреть видеозапись WWDC2015 и читать Документация Apple на WatchConnectivity