GameCenter登录提醒

Ale*_*lex 11 iphone gamekit game-center

在我使用GameCenter开发的游戏中,我想处理以下场景:

  1. 用户启动游戏.系统会显示系统警报,提示他登录GameCenter.他暂时忽略了它.
  2. 过了一会儿,用户想要登录GameCenter并点击(例如)Leaderboards菜单项.他现在选择取消而不是登录.
  3. 这个过程重复了好几次.最终用户想要登录GameCenter.他再次单击Leaderboard菜单项.

在我的测试中,我发现通过调用"authenticateWithCompletionHandler"(由Apple的示例GameCenterManager调用)引发的警报弹出窗口建议登录到GameCenter只出现有限次数(4或5).最后一次显示,它显示"游戏中心已禁用,请使用Game Center应用程序登录以启用"Afterwards".之后,调用authenticateWithCompletionHandler不再执行任何操作 - 根本没有提示.

玩FruitNinja我试图复制这个.但是,在他们的情况下,每当我点击GameCenter项目(例如,成就)时,会出现"禁止游戏中心"的弹出窗口.

我想要做的是复制功能:也就是说,如果您没有登录到GameCenter,则在您单击Leaderboard菜单项时始终显示标准游戏中心警报.

有没有办法了解标准"登录游戏中心"警报是否已经出现,或者强制它始终出现(而不仅仅是前几次尝试)?

thu*_*sup 8

这是一个解决此问题的想法:

无论"GC authenticateWithCompletionHandler"-Request是否被取消

  • 用户点击对话框中的"取消"

或者由于这个事实

  • 在设备上禁用GC(在用户完全取消警报对话框3次后发生(至少在iOS 5中))

您将始终收到一个NSError,其代码为2,"请求的操作已被取消.".

我能找到的唯一区别是authenticateWithCompletionHandler-Request和completion-Handler的执行之间传递的时间.

所以在发送请求时我节省了时间:

requestTime = [NSDate date]; 
Run Code Online (Sandbox Code Playgroud)

在我的完成处理程序中,我测量经过的时间:

NSDate* now = [NSDate date];
CFTimeInterval elapsedTimeSinceAuthenticationRequest = [now timeIntervalSinceDate:requestTime];
NSLog(@"time Elapsed: %f", elapsedTimeSinceAuthenticationRequest);
Run Code Online (Sandbox Code Playgroud)

如果用户取消了请求,则与GC取消操作所经过的时间相比,通过的时间将显着延长.在我的测试中,用户至少花了一秒钟取消对话,而GC取消的请求花了不到0.1秒(在我的iPhone 4上)

当然,这些值可能会有所不同,具体取决于代码运行的设备以及处理器目前忙于处理的其他内容.我已经检查过的一个缺陷是应用程序启动:如果你在Apple建议的applicationDidFinishLaunching期间发送authenticationRequest,那么在我的情况下GC需要更长的时间才能取消请求,因为设备正忙于加载视图以及启动所需的任何内容该应用程序.

所以让我知道你是否尝试过这个解决方案,如果它对你起作用,我曾经做过进一步的测试......


Bri*_*pek 3

该行为的结果是,在 N 次不成功的尝试之后 - 禁用应用程序的 GameCenter。重新启动应用程序或登录游戏中心即可使其恢复在线状态。

我忘记了我在哪个文档中读到过这个,但是有一个 Apple 文档解释了这种行为。

  • 我不认为 FruitNinja 使用 API。根据我的观察,他们所做的如下:每当他们从 GameCenter 看到代码 2 的错误(“请求的操作已被取消”)时,他们就会设置一个标记“gameCenterDisabled”。下次**用户**尝试访问游戏中心功能时,他们将显示警报 (3认同)