Ответ 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