游戏中心login对话框首次取消后不再显示(iOS7)

将用户login到游戏中心时遇到问题。 我在应用程序完成加载之后首先显示login对话框。 如果用户取消对话框,我想通过在主菜单中提供一个loginbutton来让他改变主意。 然而,在使用iOS7的iPad上,该button不起任何作用 – 游戏中心对话框不显示(它在iOS6上正常工作)。 相反,我立即收到错误“请求的操作已被用户取消或禁用”。 在应用程序启动和button水龙头上调用相同的代码。 它使用authenticateWithCompletionHandler方法,基本如下所示:

GKLocalPlayer* localPlayer = [GKLocalPlayer localPlayer]; [localPlayer authenticateWithCompletionHandler:^(NSError *error) { OnLogin(error); }]; 

(我知道这个方法已经被弃用了,但是我对这个新方法的经验更糟)。

有趣的是,如果我将应用程序移动到背景,然后将其带回到前景,GC对话框会出现。

我所描述的问题甚至在第一次取消之后就会发生,所以我认为这与Game Center禁止取消应用程序之后有任何关系。

有谁知道如何解决这一问题?

关于你的评论,我发现苹果的文档提到了游戏工具包的政策,不要求用户login一次后再次login。

在“ Common Tasks When Working with Players ”下的“ Game Center编程指南”中 > Authenticating a Local Player on the Device 。 (粗体是我的)

重要提示:游戏工具包会在所有支持Game Center的游戏中select退出游戏中心。 如果玩家已经拒绝创build一个账户,那么当你的游戏authentication玩家时,会被告知没有经过authentication的玩家。 玩家永远不会看到一个validation对话框。 由于游戏工具包在所有游戏中处理此过程,因此您的游戏不应包含自己的机制来禁用游戏中心身份validation或要求玩家的权限进行身份validation。 相反,您的游戏应该在每次启动时对播放器进行身份validation,并在身份validation完成时进行适当的响应。

您可以通过在身份validation处理程序中包含一个NSLog来确认此事件,以显示每次处理程序被调用以及它是成功还是失败。 希望这可以帮助…