Передача данных с iPhone на iWatch с платформой связи Watch

Я хочу задать вопрос о связи часов.

1) Можно ли читать данные с iPhone при открытии приложения iWatch. Я не хочу ждать, чтобы открыть приложение iPhone для передачи данных в iWatch.

2) Можно ли создать экран входа в систему (чтобы получить пользовательский ввод из текстовых полей) на iWatch

3) У iWatch есть токен устройства и идентификатор производителя? Как получить эту информацию от iWatch?

4) Можно ли прочитать базу данных приложения iPhone (например, sql lite db в приложении iPhone) из приложения iWatch?

5) Как перенести словарь из приложения iPhone в приложение iWatch. Поделитесь любым примером плз.

1 ответ

Решение

1) Можно ли читать данные с iPhone при открытии приложения iWatch. Я не хочу ждать, чтобы открыть приложение iPhone для передачи данных в iWatch.

ДА, используя любой из фоновых методов (transferUserInfo:, transferCurrentComplicationUserInfo:, transferFile:, updateApplicationContext:infoToSend) вы можете разбудить приложение для iPhone и добиться успеха. наоборот не возможно Смотреть приложение должно быть открыто.

2) Можно ли создать экран входа в систему (чтобы получить пользовательский ввод из текстовых полей) на iWatch

НЕТ, текстовые поля недоступны в WatchOS2.

3) У iWatch есть токен устройства и идентификатор производителя? Как получить эту информацию от iWatch?

В watchOS 1 идентификатор продавца и рекламный идентификатор были на самом деле на iPhone, так как расширение iPhone было установлено на iPhone.

В watchOS 2 вам нужно будет синхронизировать идентификатор продавца и рекламный идентификатор с iPhone на часы и использовать его там. И вам нужно будет поддерживать идентификатор поставщика и рекламный идентификатор в актуальном состоянии.

4) Можно ли прочитать базу данных приложения iPhone (например, sql lite db в приложении iPhone) из приложения iWatch?

Это было возможно в WatchKit, но с введением общего контейнера на основе групп WatchConnectivity Framework было ограничено. Я уверен в UserDefualts, но еще не тестировал для файлов.

5) Как перенести словарь из приложения iPhone в приложение iWatch. Поделитесь любым примером плз.

Есть два способа выполнить эти вещи:

Использование TransferUserInfo

С помощью этого метода Watch будет получать словарь каждый раз, это означает, что если Watch неактивен и iphone отправляет 3 словаря в течение этого периода времени, всякий раз, когда watch активируется, он получает все 3 словаря путем множественных вызовов методов делегата - - (void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary<NSString *, id> *)userInfo на стороне часов.

-(void)sendDictionaryToWatch:(NSDictionary*)infoToSend{
        if([WCSession isSupported]){
            WCSession *aDefaultSession           = [WCSession defaultSession];
            aDefaultSession.delegate  = self;
            if([aDefaultSession isPaired] && [aDefaultSession isWatchAppInstalled]){
                [aDefaultSession activateSession];
                [aDefaultSession transferUserInfo:infoToSend];
            }
        }
    }

Использование updateApplicationContext: error:

В этом случае устройство отправит последнюю версию Context для наблюдения при активации. Это означает, что допустим, скажем, если вы отправили три Info обратно, тогда, когда Watch активирован, он получит только самую последнюю, а не предыдущие в методе делегата - -(void)session:(WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)applicationContext,

-(void)sendDictionaryToWatch:(NSDictionary*)infoToSend{
    if([WCSession isSupported]){
        WCSession *aDefaultSession           = [WCSession defaultSession];
        aDefaultSession.delegate  = self;
        if([aDefaultSession isPaired] && [aDefaultSession isWatchAppInstalled]){
            [aDefaultSession activateSession];
            [aDefaultSession updateApplicationContext:infoToSend error:nil];
        }
    }
}
Другие вопросы по тегам