【问题标题】:How do I reply to a GKTurnBasedExchange? GKLocalPlayerListener delegate receivedExchangeReplies is called intermittently如何回复 GKTurnBasedExchange? GKLocalPlayerListener 委托 receivedExchangeReplies 被间歇性调用
【发布时间】:2016-01-02 20:28:53
【问题描述】:

有一些帖子讨论了 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

此时,我认为我最好的选择是运行我自己的推送通知逻辑来触发更新匹配数据。那或者我已经读过发送提醒更可靠,尽管我相信这有限制。

更新

我试过只使用设备而不是模拟器。同样的问题。看起来这是一个众所周知的问题。 It's even noted in this book on page 766.

更新

发送提醒没有帮助。

更新

通常在回复交换时,我会从 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.

【问题讨论】:

  • 还有一点需要注意,我使用的是模拟器和设备。根据这篇文章,我现在只尝试两种设备:stackoverflow.com/questions/7935336/…
  • 你今天试过了吗?过去几个月我一直在使用 GC API,今天突然间,我遇到的所有 GC 问题都开始正常工作了。
  • @user523234,不,我没有。它实际上确实经历了按预期工作的时期,但不会持续很长时间。
  • @user523234 我遇到了一个问题,我没有收到来自endTurnWithNextParticipants 的推送通知,在阅读了您的评论后,我今天刚刚尝试过,它可以工作。
  • 您是否找到了“与名为 com.apple.gamed ... 的服务的连接”的原因。知道消息的含义吗?

标签: ios game-center gkturnbasedmatch


【解决方案1】:

由于 Apple 后端存在错误,Exchanges 直到 2020 年 10 月才真正按需要或指定的方式运行。然而现在,一位 Apple 工程师似乎建议它已经修复 - 要求我验证它是否有效。我打算使用我的公共项目尽快完成(我只需要更新 Xcode):https://github.com/Gatada/TurnBasedGameFlow

更多细节

基于回合的交换依赖于在交换完成时通知回合持有者,因此回合持有者可以解决它(提交给 Game Center)。然而,这个通知从未被推送给轮到持有者。

由于这个错误,我们制作的游戏不得不依赖回合持有者在交换完成后重新加载游戏,我们的代码必须优雅地处理由于游戏数据不足而导致回合提交失败-sync(由完成的交换引起)。

在 WWDC 2020 期间,我与 Apple 进行了一对一的 Game Center 会议,我用确凿的证据报告了这个问题(毕竟,这个错误自 2010 年就已经存在),这说服了 Apple 工程师。他们花了 3 个月才回复我,我又花了 3 个月才回复他们 - 呵呵,把我们带到现在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2010-11-18
    相关资源
    最近更新 更多