有一些帖子讨论了 Game Center 的推送通知在沙箱中相当不可靠。然而,沙箱在 iOS 9 中被混淆了,所以我不确定为什么我的 Game Center 推送通知如此不可靠。
当我回复活跃的交换时,发件人很少收到通知。
[exchange replyWithLocalizableMessageKey:@"EXCHANGE_REPLY" arguments:@[] data:data completionHandler:^(NSError *error) {
if (error)
{
NSLog(@"");
}
}];
在发件人设备上,如果我刷新匹配数据,我将看到待处理的回复。如果我处理回复,一切都会正常。
这个方法也是同样的道理:
- (void)sendExchangeToParticipants:(NSArray<GKTurnBasedParticipant *> *)participants
data:(NSData *)data
localizableMessageKey:(NSString *)key
arguments:(NSArray<NSString *> *)arguments
timeout:(NSTimeInterval)timeout
completionHandler:(void(^__nullable)(GKTurnBasedExchange *exchange, NSError *error))completionHandler
此时,我认为最好的选择是运行我自己的推送通知逻辑来触发更新匹配数据。或者我读到发送提醒更可靠,尽管我相信这存在限制。
Update
我尝试过仅使用设备而不是模拟器。同样的问题。看起来这是一个众所周知的问题。这本书的第 766 页甚至还提到了这一点。
Update
发送提醒没有帮助。
Update
通常在回复交流时,我会从 GameKit 收到此错误。
The connection to service named com.apple.gamed was interrupted, but the message was sent over an additional proxy and therefore this proxy has become invalid.
由于 Apple 后端的错误,直到 2020 年 10 月,Exchanges 从未真正按照需要或指定运行。然而现在,一位苹果工程师似乎暗示它已经修复了——要求我验证它是否有效。我打算使用我的公共项目尽快执行此操作(我只需要更新 Xcode):https://github.com/Gatada/TurnBasedGameFlow
更多细节
基于回合的交换依赖于在交换完成时通知回合持有者,以便回合持有者可以解决它(将其提交到游戏中心)。然而,该通知从未被推送给回合持有者。
由于这个错误,我们制作的游戏必须依赖回合持有者在交换完成后重新加载游戏,并且我们的代码必须优雅地处理由于游戏数据不同步而导致的回合提交失败(由已完成的交换引起)。
我在 WWDC 2020 期间与 Apple 进行了一对一的 Game Center 会议,其中我用确凿的证据报告了这个问题(毕竟,这个 bug 自 2010 年以来就已经存在),这说服了 Apple 工程师。他们花了三个月才回复我,我又花了三个月才回复他们——呵呵,把我们带到了现在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)