2

我正在创建一个支持 Game Center 的类似游戏的应用程序。当玩家通过正确的 GC 身份验证但网络(wifi 和蜂窝网络)在我想要报告我的分数时不可用时,我在向排行榜报告分数时遇到问题。

我的应用程序适用于 iOS 5.0 及更高版本,根据文档,它应该在网络可用时重新提交分数。让我解释一下我的尝试:

  • 我打开了我的应用程序并验证了我的 GC 帐户,关闭了 wifi,报告了分数,然后打开了 wifi 并等待了 30 分钟。之后我检查了排行榜,但我的排行榜上没有任何更新的分数。(也许我不耐烦,那是因为苹果决定重新提交分数的时间/间隔未定义?)

  • 我打开了我的应用程序并验证了我的 GC 帐户,终止了应用程序,关闭了 wifi,再次打开了我的应用程序,它自动验证了我的 GC 帐户,我报告了分数然后打开了 wifi,但我的排行榜上仍然没有更新分数。(也许我不耐烦,那是因为苹果决定重新提交分数的时间/间隔未定义?)

如果重新提交需要超过 30 分钟,我认为它没有用吗?有没有办法克服这个问题?我的意思是,如果我稍后保存并发送分数,这也会很糟糕,因为 GC 稍后也会重新提交它们?(它不会那么糟糕,但仍然是不必要的)

有没有关于这个重新提交时间的文件?我找不到任何...我的意思是什么时候重新提交?在重新提交之前,我是否需要让我的应用程序和 wifi 保持打开状态?

谢谢您的回答 ...

4

1 回答 1

-1

如果您还有蜂窝网络连接,wifi 是打开还是关闭都没有关系。GC 代码将使用任何可用的网络访问。如果调用 'reportScoreWithCompletionHandler:^(NSError *error)' 时两者都不可用,它将在下次网络可用时报告分数。

您没有说您的代码是否有效。一个常见错误是代码中的排行榜标识符与 iTunesConnect 中的排行榜 ID 不完全匹配。如果他们不匹配分数将永远不会成功报告,但它不会告诉你问题是什么。

另请注意,分数应为 64 位值。也许您正在报告一个 32 位的值。

还要确保您没有在本地玩家通过身份验证之前提交分数。

你在检查错误代码吗?如果您从“reportScoreWithCompletionHandler:^(NSError *error)”返回的“错误”不为 NULL,那么您的代码有问题。它的值可能没有帮助(当它不是 NULL 时),但至少你知道有些东西不起作用。

根据我的经验,在沙盒模式下,排行榜通常会很快更新(不到一分钟),但不会立即更新。但是有些日子服务器出了问题,更新需要几个小时或根本不起作用。我读过生产 GC 服务器比沙盒服务器更可靠且更新更快。

值得一提的是我用来报告分数的代码。它似乎工作:

-(void) submitScore:(int64_t)score category:(NSString *)leaderboardIdentifier {
    if (!!! [GKLocalPlayer localPlayer].authenticated ) {
        CCLOG(@"GKLocalPlayer is not authenticated");
        return;
    }

    GKScore *gkScore = [[[GKScore alloc] initWithCategory:leaderboardIdentifier] autorelease];
    gkScore.value = score;
    [gkScore reportScoreWithCompletionHandler:^(NSError *error) {
        [self setLastError:error];
    }];
}
于 2013-01-18T16:10:29.307 回答