Пример WKWatchConnectivityRefreshBackgroundTask

Я хочу передать данные из своего приложения iOS в приложение watchOS 3 с помощью WKWatchConnectivityRefreshBackgroundTask

Как мне настроить код в моем приложении watchOS для обработки передаваемых данных?

Например, в прошлом я использовал этот код iOS для отправки сообщения из приложения iOS и, если не было соединения, отправлял контекст:

func sendTable()
{
    let tableInfo: WatchWorkout = PhoneData().buildWatchTableData(Foundation.Date().refDays())
    let archivedTable: Data = NSKeyedArchiver.archivedData(withRootObject: tableInfo)
    if validSession
    {
        sendMessage([Keys.UpdateType : PhoneUpdateType.TableInfo.rawValue, Keys.Workout: archivedTable])
    }
    else
    {
        do
        {
            try updateApplicationContext([Keys.UpdateType : PhoneUpdateType.TableInfo.rawValue, Keys.Workout: archivedTable])
        }
        catch
        {
            print("Phone Session - error sending info: \(error)")
        }
    }
}


func sendMessage(_ message: [String : AnyObject], replyHandler: (([String : AnyObject]) -> Void)? = nil, errorHandler: ((NSError) -> Void)? = nil)
{
    print("Phone Session - phone sent message")
    session!.sendMessage(message,
        replyHandler:
        nil,
        errorHandler:
        {
            (error) -> Void in
            print("Phone Session - Error Message during transfer to Watch: \(error)")
        }
    )
}


func updateApplicationContext(_ applicationContext: [String : AnyObject]) throws
{
    print("Phone Session - phone sent context")
    if ((session) != nil)
    {
        do
        {
            try session!.updateApplicationContext(applicationContext)
        }
        catch let error
        {
            print("Phone Session - OPPS something wrong - context send failed")
            throw error
        }
    }
}

Я не уверен, как закодировать получение этих данных в качестве фоновой задачи на часах.

Может ли кто-нибудь предоставить пример кода или опубликовать ссылку? Единственный пример кода Apple не очень полезен: https://developer.apple.com/library/prerelease/content/samplecode/WatchBackgroundRefresh/Introduction/Intro.html

Спасибо

Грег


person Greg Robertson    schedule 22.07.2016    source источник


Ответы (2)


Быстрое переключение образец кода был обновлен вместе с выпуском watchOS 3, чтобы включить пример обработки задачи фонового обновления WatchConnectivity.

person ccjensen    schedule 24.07.2016
comment
У меня похожая проблема, см. здесь. По-видимому, WKWatchConnectivityRefreshBackgroundTask никогда не вызывается, даже в демонстрационном проекте QuickSwitch. - person Reinhard Männer; 12.11.2016
comment
Я отправил проблему в службу технической поддержки разработчиков Apple, и они подтвердили (# 652471299) проблему в watchOS 3 и предложили подать отчет об ошибке, что я и сделал (# 29284559). Однако, должен сказать, у меня нет большой надежды, что это скоро поможет. Мои предыдущие отчеты об ошибках обычно обрабатывались спустя месяцы, если вообще обрабатывались... - person Reinhard Männer; 16.11.2016
comment
Было ли какое-либо обновление по этой ошибке? Сам имею некоторые проблемы - person Adam Carter; 13.04.2017

@ccjensen Пример кода быстрого переключения не работает, не так ли? Он выйдет из строя на моем iPhone6 ​​iOS10.0 beta3. Я отправил отзыв уже в прошлую пятницу.

В моем случае вызов updateApplicationContext(_:) transferUserInfo(_:) transferCurrentComplicationUserInfo(_:) transferFile(_:metadata:) на стороне iPhone никогда не запускает прослушиватель handle(_:).

person iamhite    schedule 25.07.2016
comment
Не могу комментировать, поэтому пишите ответ - person iamhite; 25.07.2016
comment
вероятно, лучше всего подать радар и обязательно приложить отчет о сбое! - person ccjensen; 25.07.2016