WCSession не отправляет сообщения с iPhone для просмотра, когда приложение просмотра находится в фоновом режиме - PullRequest
0 голосов
/ 26 июня 2018

Я работаю над приложением для iOS, которое должно отправлять обновления в приложение Apple Watch с помощью WCSession.Он работает безупречно в симуляторах iOS / Watch, но не на реальных устройствах.

Когда я пытаюсь отправить сообщение методом sendMessage:replyHandler:errorHandler:, если приложение Apple Watch находится в фоновом режиме, я получаю следующую ошибку:

[WCSession _onqueue_notifyOfMessageError: messageID: withErrorHandler:] B322D88E-8F50-4BAB-86FF-AFD3B851E1CC errorHandler: НЕТ с WCErrorCodeMessageReplyFaable, 1001 * * * * * * * * *все виды проверок:

if (_session &&
    _session.isPaired &&
    _session.isWatchAppInstalled &&
    _session.isReachable &&
    _session.activationState == WCSessionActivationStateActivated)
{
    [_session sendMessage:dictionary 
             replyHandler:nil 
             errorHandler:^(NSError * _Nonnull error) {
                 NSLog(@"%@",error);
             }
    ];
}
else
{
    [_session transferUserInfo:dictionary];
}

Есть ли какая-либо причина, по которой я мог получить сообщение об ошибке «Недоступен» при отправке сообщения, но session.isReachable возвращает true?

Я также обработал случай, когда сеанс недоступен, и я помещаю в очередь сообщение с transferUserInfo: там, но поскольку сеанс определяется как доступный, сообщение отправляется немедленно, и поэтому оно теряется.

1 Ответ

0 голосов
/ 28 ноября 2018

Вы также написали параметр обработчика ошибок селектора sendMessage?Там вы также можете проверить тип ошибки, возникшей в WCSession при попытке отправить сообщение, и в случае, если вы также можете повторно отправить данные сообщения в виде ApplicationContext / UserInfo / FileTransfer, в зависимости от логики вашего приложения.Обычно я снова отправляю данные сообщения в виде userInfo, когда получаю следующие коды ошибок: WCErrorCodeNotReachable, WCErrorCodeDeliveryFailed, WCErrorCodePayloadTooLarge, WCErrorCodeTransferTimedOut

Хотя в вашем случае селектор sendMessage

может * выглядеть примерно так:
...