gpt4 book ai didi

ios - 如何避免 Game Center 身份验证重复其 block

转载 作者:行者123 更新时间:2023-11-29 13:13:04 26 4
gpt4 key购买 nike

Game Kit 存储了对我发送给 authenticateWithCompletionHandler: 的完成处理程序的强引用,这意味着每次用户退出和进入应用程序时,它都会被再次调用。这是有道理的,但它会导致我的用例出现问题:

1) 我在应用启动时提示用户登录 Game Center。

2) 他们点击取消,因为他们想玩一会儿单人游戏。因此他们没有登录。

3) 在某些时候,他们决定要在线玩,所以他们点击我的“在线玩”按钮。

4) 这应该显示一个屏幕,他们可以在其中设置在线游戏选项等,但我注意到他们没有经过身份验证的玩家,所以......

5) 我再次提示用户登录 Game Center。

6) 这次用户登录,在完成处理程序中我显示我的在线游戏选项屏幕。

第 6 步是问题所在:每次用户离开并重新进入应用程序时,它都会显示我的游戏选项屏幕,因为我的完成处理程序是重复的。如果我取出完成处理程序中的代码以显示在线游戏选项,用户必须点击按钮两次 - 一次用于登录,再次用于显示在线选项。

什么是聪明的解决方案?

作为引用,我的代码的简化版本如下所示:

- (IBAction)playOnlineTapped:(id)sender
{
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
[localPlayer authenticateWithCompletionHandler:^(NSError *error) {
if (localPlayer.authenticated) {
[self showOnlineGameOptions];
}
}];
}

我读过的许多示例都假定用户是第一次登录,但我认为情况并非总是如此。

预先感谢您的帮助!

最佳答案

对此的一种解决方案是不让完成处理程序更改您的 View 。这似乎是一个奇怪的想法,因为完成处理程序是异步调用的,并且可能在您请求身份验证后随时发生。

相反,完成处理程序可以检查您是否在在线菜单中并为您启用按钮。在此之前,请禁用这些按钮并显示一条消息“等待 Game Center”。关键是不要在完成处理程序中触发任何场景转换。那将是糟糕的设计,因为您不知道何时调用此 block 。

另一个提示。如果用户拒绝登录 Game Center,您的身份验证请求有时不会提示用户。如果我没记错的话,您将立即收到 GKErrorUserDenied。因此,您应该告诉用户他们可以从 Game Center 应用程序中启动您的游戏。

关于ios - 如何避免 Game Center 身份验证重复其 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com