Game Center / GameKit在网络可用时重新提交分数

时间:2013-01-17 14:02:37

标签: networking report submit game-center leaderboard

我正在创建一个支持Game Center的应用程序游戏。当播放器正确地通过GC验证但是当我想报告我的分数时网络(wifi和蜂窝电话)不可用时,我在向排行榜报告分数时遇到问题。

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

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

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

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

是否有关于此重新提交时间的任何文件?我找不到任何......我的意思是什么时候重新提交?我需要保持我的应用程序和我的wifi打开,直到它重新提交?

感谢您的回答......

1 个答案:

答案 0 :(得分:-1)

如果您还有蜂窝连接,无论是打开还是关闭都无关紧要。 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];
    }];
}