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类别的方法中可能更好.
但是,如上所述,这不再是必要的.
Raz*_*Raz 10
甚至在Xcode 6试用版6,使用的是iOS 8个β5,使得GKLocalPlayer.localPlayer()可用的,我仍然得到错误的设备上:
"NSLocalizedDescription =无法完成请求的操作,因为Game Center无法识别此应用程序"
该解决方案(通过苹果开发论坛发现的)是去到"设置"设备上,然后进入"游戏中心",并在显影部启用了"沙盒".
| 归档时间: |
|
| 查看次数: |
7175 次 |
| 最近记录: |