当前位置: 首页 > 面试题库 >

Game Center无法使用Swift进行身份验证

萧晓博
2023-03-14
问题内容

我正在尝试使用swift来对本地播放器进行身份验证,但是每次我为.authenticated属性获取错误值时,都无法使用。这是我正在使用的代码,应用启动时,主视图控制器会调用它。

func authenticateLocalPlayer(){
  var localPlayer = GKLocalPlayer()
  localPlayer.authenticateHandler = {(viewController, error) -> Void in
    if viewController {
      self.presentViewController(viewController, animated: true, completion: nil)
    }else{
      println((GKLocalPlayer().authenticated))
    }
  }
}

它可以很好地显示登录视图,但是当我输入测试帐户登录名时,它只是将GKLocalPlayer().authenticatedas
返回为false。iTunes Connect中的捆绑包标识符和info.plist完全相同,版本和应用程序名称也相同。iTunes
Connect和Xcode都为Game Center启用了所有功能,但我感觉这不是编码错误,这是某个地方的应用程序记录中的设置错误,但我终生无法找到。

进一步修改后,出现此错误:

错误域= GKErrorDomain代码= 15“由于游戏中心无法识别此应用程序,因此无法完成请求的操作。” UserInfo = 0x17006b300

我不知道为什么会这样,bundle ID,名称和版本都匹配…

任何帮助将不胜感激。


问题答案:

Apple已解决了此问题-只需致电:

GKLocalPlayer.localPlayer()

以前的问题是GKLocalPlayer()不返回GKLocalPlayer单例,而是返回一个新的GKLocalPlayer实例

如果您使用的是Xcode 6 BETA,则可以添加C函数或Objective-
C方法来返回真正的GKLocalPlayer单例,然后在Swift中使用它。这是我的解决方法的要点(使用错误的命名约定):

在Objective-C标头中:

GKLocalPlayer *getLocalPlayer(void);

在Objective-C实现中:

GKLocalPlayer *getLocalPlayer(void) {
    return [GKLocalPlayer localPlayer];
}

在您的桥接标题中:

#import "ThatHeader.h"

然后,每当需要在Swift中访问GKLocalPlayer单例时,都可以使用getLocalPlayer()代替GKLocalPlayer()。将其保留在GKLocalPlayer类别的方法中可能是一个更好的主意。

但是,如上所述,这不再是必需的。



 类似资料:
  • 问题内容: 在我的iOS应用程序中,我想使用WKWebView在应用程序中包装外部URL 。此URL需要基本身份验证(它需要用户和密码凭据,如以下屏幕截图所示)。 经过一番调查,我尝试使用 didReceiveAuthenticationChallengemethod来启用自动 登录,因此我不了解它的工作原理。 这是我的代码。 I’m facing with this exception: If

  • 我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢

  • jwt不应该仅仅用于认证用户吗?我读到过可以在里面存储非敏感的东西,比如用户ID。将权限级别之类的东西存储在令牌中可以吗?这样我可以避免数据库调用。

  • 我尝试在Azure门户上创建的O365应用程序上进行身份验证,但它没有按预期工作。 以下代码运行良好,但它使用的是登录/密码,Microsoft不推荐使用。(在此处找到https://github.com/jstedfast/MailKit/issues/989) 事实上,我希望能够使用tenanid、客户端机密和clientid进行身份验证,但没有交互模式(因为该应用程序是Windows服务)。

  • 很抱歉,如果这个问题写得不好,我宁愿解释一下。一切都很好,突然间,每次我做时,我都会出错。我已经测试了我的ssh密钥,它似乎在工作,所以我不知道发生了什么。 以下是VSCode集成终端的情况: 然后当我尝试提交时: 如果y尝试从Linux mint终端执行相同的操作,我会得到,当我推时,我推: 我不知道如何解决这个问题。希望有人能帮帮我! PD:我尝试使用令牌进行身份验证,但我想用ssh解决这个问

  • 我正在尝试使用Shiro对我正在构建的JSF Web应用程序进行身份验证和授权。不幸的是,我仍然有一些困难缠绕我的头如何把所有的东西放在一起。 我已经成功地(100%使用shiro.ini文件)将身份验证配置回存储测试凭据集的JDBC领域。当凭据以明文形式存储时,它对我来说非常有效。 我的最终目标是统一MySQL数据库中的现有凭证集。密码存储为SHA-256盐哈希。我花了一整天的时间阅读可用的文档