游戏中心不使用Swift进行身份验证

And*_*ard 6 authentication xcode game-center 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))
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它可以很好地显示日志视图,但是当我输入测试帐户登录时,它只返回GKLocalPlayer().authenticatedfalse.iTunes Connect和info.plist中的软件包标识符与版本和应用程序名称完全相同.在iTunes Connect和Xcode上为Game Center启用了所有内容,但我感觉这不是编码错误,这是应用程序记录中的设置错误,但我不能在我的生活中找到哪里.

经过进一步的修补,我收到了这个错误:

Error Domain = GKErrorDomain Code = 15"无法完成请求的操作,因为Game Center无法识别此应用程序." UserInfo = 0x17006b300 {NSLocalizedDescription =无法完成请求的操作,因为Game Center无法识别此应用程序.}

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

任何帮助将不胜感激.

小智 11

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

GKLocalPlayer.localPlayer()
Run Code Online (Sandbox Code Playgroud)

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

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

在Objective-C标题中:

GKLocalPlayer *getLocalPlayer(void);
Run Code Online (Sandbox Code Playgroud)

在Objective-C实现中:

GKLocalPlayer *getLocalPlayer(void) {
    return [GKLocalPlayer localPlayer];
}
Run Code Online (Sandbox Code Playgroud)

在您的桥接标题中:

#import "ThatHeader.h"
Run Code Online (Sandbox Code Playgroud)

然后,无论何时需要访问Swift中的GKLocalPlayer单例,您都可以使用getLocalPlayer()而不是GKLocalPlayer().将它粘贴在GKLocalPlayer类别的方法中可能更好.

但是,如上所述,这不再是必要的.

  • 这已在Xcode Beta 6中修复 - 现在有一个`GKLocalPlayer.localPlayer()`类func. (4认同)

Raz*_*Raz 10

甚至在Xcode 6试用版6,使用的是iOS 8个β5,使得GKLocalPlayer.localPlayer()可用的,我仍然得到错误的设备上:

"NSLocalizedDescription =无法完成请求的操作,因为Game Center无法识别此应用程序"

解决方案(通过苹果开发论坛发现的)是去到"设置"设备上,然后进入"游戏中心",并在显影部启用了"沙盒".