Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用Game Center登录在远程服务器上引导登录_Iphone_Objective C_Ios_Game Center - Fatal编程技术网

Iphone 使用Game Center登录在远程服务器上引导登录

Iphone 使用Game Center登录在远程服务器上引导登录,iphone,objective-c,ios,game-center,Iphone,Objective C,Ios,Game Center,我想允许用户使用他们的游戏中心帐户在我的服务器上自动创建一个帐户。当我的iOS应用程序打开时,它需要与XMPP服务器进行连接和身份验证,以便与游戏服务器通信。我试图在GKLocalPlayer中找到一些对登录设备私有的东西,我可以使用它们来创建/验证远程用户登录,但对播放器来说唯一独特的是它们的playerID,它是相当公开的 我真的不想把GameCenter用在所有事情上,因为这样它就把我的用户群只划分到了iOS设备上 从 。。。如果您的应用程序连接到您自己的网络服务,您也可以使用服务上的播放

我想允许用户使用他们的游戏中心帐户在我的服务器上自动创建一个帐户。当我的iOS应用程序打开时,它需要与XMPP服务器进行连接和身份验证,以便与游戏服务器通信。我试图在GKLocalPlayer中找到一些对登录设备私有的东西,我可以使用它们来创建/验证远程用户登录,但对播放器来说唯一独特的是它们的playerID,它是相当公开的

我真的不想把GameCenter用在所有事情上,因为这样它就把我的用户群只划分到了iOS设备上

。。。如果您的应用程序连接到您自己的网络服务,您也可以使用服务上的播放器标识符在那里保存数据


由于播放器标识符不是私有的,我们如何确定这不是伪造的?

我不确定播放器ID是否可以伪造,但您可以基于此以及iOS用户拥有的其他唯一ID生成密钥:他们的UDID。当玩家成功登录游戏中心时,根据UDID生成密钥。如果它与存储值匹配,则为金色。如果没有,则可能是另一台设备上的用户,因为他们已成功登录到游戏中心。在这种情况下,提出添加它。为了防止会话劫持,让用户通过电子邮件确认bew设备。不过,这只适用于iOS设备,因为它与游戏中心和UDID绑定


另一种可以处理其他平台的方法是,让游戏在第一次运行时与服务器联系,并从服务器中提取生成的唯一ID。每当你的应用程序报告分数(或其他任何东西)时,你都会发送自己的ID。有很多方法可以加密这些数据,但我甚至不是这方面的业余爱好者。我不知道那里有什么用。(如果你愿意的话,可以考虑将“API密钥”与你的请求一起发送,或者发送“salted hash”es。但我不知道这对你有什么好处。我以前听说过这些,并怀疑这可能会有所帮助。)

GKLocalPlayer中的所有内容都可能是伪造的。对于
ui设备
,也可以这样说


更好的策略是将私有会话数据分配给每个连接设备,并提供通过验证电子邮件将设备会话链接到帐户的方法。可能包括
playerID
,以允许与GameKit数据交互,但不作为识别手段。

看起来这是可能的,因为iOS 7使用:

[localPlayer generateIdentityVerificationSignatureWithCompletionHandler]


“如果不是,很可能是另一台设备上的用户,因为他们已成功登录游戏中心。在这种情况下,请主动添加。”或者可能是“黑客”试图通过出示玩家ID来访问他们的帐户。在这种情况下,添加UDID不会真正添加任何内容,除非我愿意将他们的登录锁定到一个设备(我真的不想这么做)。在执行任何操作之前,您应该检查
localPlayer.isAuthenticated
是否为真。游戏中心处理这个问题。第二部分呢?在服务器端生成您自己的ID。始终存在会话劫持的风险。这是一封确认电子邮件帮助。为了与我的服务器对话,我将对PHP进行HTTP访问,在那里我将通过GameCenter传递所需信息以进行身份验证或注册。我不能依靠客户机说出它自己的isAuthenticated变量的真相。@KendallHopkins-好的,这是有道理的。为什么玩家ID不是私有的?@Moshe有几个原因。它不是我的游戏独有的,所以任何其他游戏都可以访问它。您还可以使用
loadFriendsWithCompletionHandler:
查询您的好友playerID,我相信他们也可以通过leader board获得。我确信GameCenter使用内部机密来确保它在发出请求时登录,但由于我没有访问权限,我似乎无法验证GameCenter从第三方服务器的登录。很糟糕,这个问题的答案基本上是“否”。不管怎样,谢谢你的建议。我希望两年前当我问我的问题时,这个问题能够存在:(它肯定不像twitter oauth那么简单,但我最终从它那里得到了我所需要的。