gpt4 book ai didi

objective-c - 当 watch 应用程序在后台时,WCSession 不会从 iPhone 向 watch 发送消息

转载 作者:行者123 更新时间:2023-12-03 21:21:57 48 4
gpt4 key购买 nike

我正在开发一个必须使用 WCSession 向 Apple Watch 应用程序发送更新的 iOS 应用程序。它在 iOS/Watch 模拟器中完美运行,但在真实设备中却无法运行。

当我尝试使用 sendMessage:replyHandler:errorHandler: 发送消息时方法,如果 Apple Watch 应用程序在后台,我会收到以下错误:

[WCSession _onqueue_notifyOfMessageError:messageID:withErrorHandler:] B322D88E-8F50-4BAB-86FF-AFD3B851E1CC errorHandler: NO with WCErrorCodeMessageReplyFailed -> WCErrorCodeNotReachable



但在我的代码中,我添加了各种检查:
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 ?

我还处理了无法访问 session 的情况,并且我正在使用 transferUserInfo: 将消息排队在那里,但由于 session 被检测为可访问,消息会立即发送,因此它会丢失。

最佳答案

您是否也编写了 sendMessage 选择器的错误处理程序参数?
在那里,您不妨检查 WCSession 在尝试发送消息时引发的错误类型,以防万一,您还可以根据应用程序逻辑将消息数据重新发送为 ApplicationContext/UserInfo/FileTransfer。
当我收到这些错误代码时,我通常会再次将消息数据作为 userInfo 发送:
WCErrorCodeNotReachable,
WCErrorCodeDeliveryFailed,
WCErrorCodePayloadTooLarge,
WCErrorCodeTransferTimedOut

尽管在您的情况下,sendMessage 选择器可能是这样的:

if (YES == self.session.isReachable) {
__weak typeof(self) weakSelf = self;
[self.session sendMessage:dictionary
replyHandler:nil
errorHandler:^(NSError * _Nonnull error) {
switch (error.code) {
case WCErrorCodeNotReachable:
case WCErrorCodeDeliveryFailed:
case WCErrorCodePayloadTooLarge:
case WCErrorCodeTransferTimedOut:
[weakSelf.session sendUserInfo:dictionary];
break;

default:
NSLog(@"Unrecoverable WCSession transfer error: %@", error);
break;
}
}];
} else {
[self.session sendUserInfo:dictionary];
}

关于objective-c - 当 watch 应用程序在后台时,WCSession 不会从 iPhone 向 watch 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51032193/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com