设置第三方服务器与Game Center进行交互

我正在考虑在iOS游戏中添加一个function,以便玩家创build自己的游戏关卡,与其他玩家分享关卡等等。还有一个用户创build关卡的公共存储库,可以按创builddatesorting,评分,难度或其他标准。

这种function需要第三方服务器。 我想我会用Sinatra创build一个RESTful API并在Heroku上运行它。 我的问题是:什么是最好的方式来validation这个API的请求? 我不想要求玩家创build用户名和密码。 我想只使用Game Center的ID系统。

有什么build议么? 我从来没有做过任何服务器端的东西,所以任何帮助表示赞赏!

澄清

是的,我知道苹果不提供自己的系统。 但它确实给开发人员提供了唯一的Game Center标识符(developer.apple.com/library/mac/#documentation/…),我希望能以某种方式使用它来推出我自己的身份validation系统,而不需要用户通过Facebooklogin/微博/等。 如果可能的话。

看起来像iOS 7,这是可能的游戏中心使用:

[localPlayer generateIdentityVerificationSignatureWithCompletionHandler]

一旦使用generateIdentity调用validation了玩家的身份,

  • 将玩家ID与服务器数据库中的用户相关联
  • 使用REST框架为后续调用提供的任何访问令牌/身份validation模式

https://developer.apple.com/library/ios/documentation/GameKit/Reference/GKLocalPlayer_Ref/Reference/Reference.html

另外供参考,这里是我们最终发送到我们的服务器的字典,基于来自generateIdentityVerificationSignatureWithCompletionHandler

 NSDictionary *paramsDict = @{ @"publicKeyUrl":[publicKeyUrl absoluteString], @"timestamp":[NSString stringWithFormat:@"%llu", timestamp], @"signature":[signature base64EncodedStringWithOptions:0], @"salt":[salt base64EncodedStringWithOptions:0], @"playerID":localPlayer.playerID, @"bundleID":[[NSBundle mainBundle] bundleIdentifier] }; 

编辑 :好像当我发布这个没有苹果的官方解决scheme,但现在。 请参阅其他答案,或纯粹为了历史/向后兼容性的兴趣而阅读。


苹果公司不提供使用Apple ID身份validation(包括Game Center)与第三方服务的任何forms的系统。 您自己进行身份validation,但您可以查看OAuth允许通过Facebook / Twitter /等单点login。 (只要注意,不是每个人都有Facebook / Twitter /等等的身份,或者他们想要用于你的游戏。)

理论上, GKPlayer上的playerID属性是唯一的,恒定的,并且不被其他人知道。 所以,从理论上说,你可以把它用于“穷人authentication”:把它展示给你的服务器,这就是所有的服务器需要查找并提供玩家特定的东西。 但是这就像UDIDauthentication或者用户名一样 – 它提供的唯一安全性是默默无闻的。 当你有一个没有loginGame Center的用户时会发生什么?

Andy的回答是正确的,但要完成这个故事:在他链接到的文档中,有一个关于如何实际validationApple服务的说明,GameCenter用户实际上是他自称的人。 链接到文档的这一部分如下。 基本上,客户端调用generateIdentityVerificationSignatureWithCompletionHandler给你的一些数据,包括一个URL。 您将这些数据和URL提供给您自己的服务器,然后从您的服务器中,您可以点击该URL来使用由generateIdentityVerificationSignatureWithCompletionHandler调用提供的其余数据对用户进行身份validation。

https://developer.apple.com/library/ios/documentation/GameKit/Reference/GKLocalPlayer_Ref/index.html#//apple_ref/occ/instm/GKLocalPlayer/generateIdentityVerificationSignatureWithCompletionHandler

我有一段时间搞清楚了这一点。 我终于用这个答案的几个提示,几个其他的答案,PHP文档和一些幸运的猜测拿出这个完整的答案。

注:这种方法似乎非常开放的黑客攻击,因为任何人都可以用他们自己的证书签署任何他们想要的,然后将数据,签名和URL传递给他们的证书,并得到一个“这是一个有效的GameCenterlogin”的答案,代码“起作用”,因为它实现了GCalgorithm,algorithm本身似乎有缺陷。 理想情况下,我们还会检查证书是否来自可信来源。 额外的偏执狂,以检查它是苹果的游戏中心证书也会很好。