小编典典

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

swift

我正在尝试使用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,名称和版本都匹配…

任何帮助将不胜感激。


阅读 302

收藏
2020-07-07

共1个答案

小编典典

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类别的方法中可能是一个更好的主意。

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

2020-07-07