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

时间:2014-06-04 18:46:55

标签: xcode authentication 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))
    }
  }
}

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

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

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

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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:11)

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

GKLocalPlayer.localPlayer()

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

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

在Objective-C标题中:

GKLocalPlayer *getLocalPlayer(void);

在Objective-C实现中:

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

在您的桥接标题中:

#import "ThatHeader.h"

然后,只要您需要访问Swift中的GKLocalPlayer单例,就可以使用getLocalPlayer()而不是GKLocalPlayer()。将它粘贴在GKLocalPlayer类别的方法中可能是个更好的主意。

但是,如上所述,不再需要这样做。

答案 1 :(得分:10)

即使使用Xcode 6 Beta 6,在使用iOS 8 beta 5的设备上,使GKLocalPlayer.localPlayer()可用,我仍然会收到错误:

  

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

解决方案(通过Apple的Dev论坛发现)是转到设备上的“设置”,然后进入“游戏中心”并在开发者部分下启用“沙盒”。

答案 2 :(得分:0)

你可以使用它,我在github上为iOS游戏中心创建了一个简单的类 Easy Class Game Center Swift

https://github.com/DaRkD0G/Easy-Game-Center-Swift

来自法国的消息,圣诞快乐

相关问题