谷歌游戏服务登录问题

10

我目前正在将Google Play游戏服务集成到我的游戏中,以提供多人实时游戏功能(使用libgdx和BaseGameUtils)。

在我的Nexus 4上使用我的主要Google帐户“A”时,一切正常(登录,创建房间等)。

为了测试自动匹配和消息发送/接收,我创建了第二个Google帐户“B”,并将此帐户添加到了我(出厂重置的)三星Galaxy Tab中。

起初,一切都运行良好 - 我可以创建一个自动匹配的房间,发送和接收文本消息等。但是经过15分钟的测试后,我无法再使用Galaxy Tab上的帐户“B”登录。 Nexus 4上的帐户“A”仍然可以正常工作。

为了排除设备问题,我将帐户“A”添加到我的Galaxy Tab中,并成功登录。我还将帐户“B”添加到我的Nexus 4中,但登录失败。

等待一段时间(30分钟)后,立即可以再次在两个设备上使用帐户“B”登录。

这就是我的当前状态:我可以使用帐户“B”进行一些测试,但是短时间后它会被“阻止”,直到我可以再次使用它。帐户“A”始终有效。

在此“阻止”期间,我尝试了所有方法:删除应用程序数据/缓存,删除Play服务数据/缓存,将应用程序取消链接与我的“B”帐户。没有任何作用。

如果在帐户“B”被“阻止”时想要登录,则会产生以下日志输出:

07-27 13:20:35.508: I/dul(13742): I/O exception (org.apache.http.NoHttpResponseException)   caught when processing request: The target server failed to respond
07-27 13:20:35.508: I/dul(13742): Retrying request
07-27 13:20:35.808: E/Volley(13742): [1224] ip.a: Unexpected response code 403 for   https://www.googleapis.com/games/v1/players/102515671693140579145
07-27 13:20:35.818: E/SignInIntentService(13742): Access Not Configured
07-27 13:20:35.818: E/SignInIntentService(13742): ark
07-27 13:20:35.818: E/SignInIntentService(13742):   at ams.b(SourceFile:189)
07-27 13:20:35.818: E/SignInIntentService(13742):   at ams.a(SourceFile:111)
07-27 13:20:35.818: E/SignInIntentService(13742):   at adz.a(SourceFile:220)
07-27 13:20:35.818: E/SignInIntentService(13742):   at adz.a(SourceFile:201)
07-27 13:20:35.818: E/SignInIntentService(13742):   at adi.a(SourceFile:489)
07-27 13:20:35.818: E/SignInIntentService(13742):   at att.a(SourceFile:221)
07-27 13:20:35.818: E/SignInIntentService(13742):   at   com.google.android.gms.games.service.GamesSignInIntentService.onHandleIntent(SourceFile:343 )
07-27 13:20:35.818: E/SignInIntentService(13742):   at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
07-27 13:20:35.818: E/SignInIntentService(13742):   at android.os.Handler.dispatchMessage(Handler.java:99)
07-27 13:20:35.818: E/SignInIntentService(13742):   at android.os.Looper.loop(Looper.java:137)
07-27 13:20:35.818: E/SignInIntentService(13742):   at android.os.HandlerThread.run(HandlerThread.java:60)
07-27 13:20:35.818: E/LoadSelfFragment(16159): Unable to sign in - application does not have a registered client ID

当然,我已经有一个注册的客户端ID,否则我就无法使用"A"账户和有时使用"B"账户登录。当然,我在开发者控制台中将这两个帐户都添加到测试白名单中。当然,我通过资源链接将正确的应用程序ID添加到我的清单中。

我不认为这与我的代码有关,因为A账户从未出现问题,而B账户有时可以工作。测试白名单有任何已知问题吗?或者您有任何建议如何解决这个问题吗?顺便说一下,我也不认为我的配额受限制,因为那将影响这两个帐户,不是吗?

非常感谢您的帮助。


你发布了你的游戏吗?我在模拟器上测试时看到过这种情况,但在真正的设备上玩已发布的游戏时没有遇到过。 - IanB
嗨,实际上游戏还没有发布(所以我必须将测试帐户放在白名单上)。我不会在模拟器上进行测试,只在真实设备上测试。 - mavoka
我的观点是,当游戏发布时,你很少会遇到这个问题。只需将其发布并尝试一下可能会更快-我不认为这会成为你的应用程序中的问题。 - IanB
1
有关这个问题有任何更新或真正的答案吗?我现在经常遇到这个问题。它似乎锁定了设备,而不是账户。无论我尝试使用哪个账户登录,设备本身都无法登录,而我的另一个设备可以。这种情况也发生在两台设备上,只是不同时发生。我觉得可能与清理不当有关。似乎是那个被单独留在房间里的设备出现了问题,而另一个设备离开时没有。也许我只需要告诉它断开连接?看起来它应该像其他设备一样在退出时正常断开连接... - CodeMonkey
我的答案是谷歌游戏服务很糟糕...他们要花好几年才能让它有用并完全运作...真的!!!试试其他替代方案吧。(抱歉,但这真的让我失望了) - John Ashmore
4个回答

3
如果出现以下情况,将会发生此行为:
当前用户连接到任何房间,并且:
在尝试登录Google服务时重新启动应用程序,而没有按照Google Play服务所要求的断开连接部分进行操作。
我经常遇到这种情况(对我来说很不幸),因为我正在解决如何在我的Android代码和LibGDX代码之间传递消息的问题(由于同步问题,我的应用程序会被锁定)。 我还设置了一些测试帐户,可以“轮换”使用,以避免完全无法登录。 但是,我发现如果我在重新启动应用程序之前使用任务管理器来杀死进程,90%以上的时间,我可以继续使用同一个帐户。
如果您正在更新代码并在房间中加载到设备,则该帐户也将在大约30分钟内受到服务器惩罚。
简而言之,为保持您的帐户有效:
1)确保在更新代码之前离开房间(我发现不需要注销PS)
2)如果您的应用程序被锁定...通过任务管理器(我使用三星)杀死进程,很可能会让您的帐户继续(当您再次启动应用程序时,您可以在logcat中看到它调用断开连接)。

嗨,感谢您的回复。所以您的意思是,在adb杀死我的运行中应用程序之前,我必须正确地从Google Play服务中断开(即离开房间)? 但是为什么通过任务管理器杀死它也可以工作呢?我认为,当杀死一个应用程序时,任务管理器在内部像adb一样工作.. 嗯..无论如何,非常感谢您的答案,我很快就会尝试(目前还非常忙:(),如果有效,我会将您的答案标记为我的接受答案! - mavoka
我认为adb安装和任务管理器一样都不起作用。当使用任务管理器时,我可以在logcat中跟踪它关闭服务并断开与房间的连接的位置(此时我的其他设备会收到onPeerLeft通知)。如果我没有杀死进程就进行安装,则不会收到任何onPeerLeft通知。 - user2346305

2

我遇到了和user2446468一样的问题,我的一些测试账号在工作了几个小时后无法登录(在这个初始故障之后,它们只能在半个小时左右后才能正常工作...)

以下是此事件的日志...

08-06 17:03:08.945: D/Volley(21844): [664] ip.a: HTTP response for request=<[ ] https://www.googleapis.com/games/v1whitelisted/applications?language=en_US&platformType=ANDROID NORMAL 20> [lifetime=5926], [size=531], [rc=200], [retryCount=0]
08-06 17:03:08.975: D/Volley(21844): [1] ia.b: 5956 ms: [ ] https://www.googleapis.com/games/v1whitelisted/applications?language=en_US&platformType=ANDROID NORMAL 20
08-06 17:03:09.075: I/dul(21844): I/O exception (org.apache.http.NoHttpResponseException) caught when processing request: The target server failed to respond
08-06 17:03:09.075: I/dul(21844): Retrying request
08-06 17:03:09.295: W/AlarmManager(2301): FACTORY_ON= 0
08-06 17:03:09.915: E/Volley(21844): [655] ip.a: Unexpected response code 403 for https://www.googleapis.com/games/v1/players/11*******************
08-06 17:03:09.950: E/SignInIntentService(21844): Access Not Configured
08-06 17:03:09.950: E/SignInIntentService(21844): ark
08-06 17:03:09.950: E/SignInIntentService(21844):   at ams.b(SourceFile:189)
08-06 17:03:09.950: E/SignInIntentService(21844):   at ams.a(SourceFile:111)
08-06 17:03:09.950: E/SignInIntentService(21844):   at adz.a(SourceFile:220)
08-06 17:03:09.950: E/SignInIntentService(21844):   at adz.a(SourceFile:201)
08-06 17:03:09.950: E/SignInIntentService(21844):   at adi.a(SourceFile:489)
08-06 17:03:09.950: E/SignInIntentService(21844):   at att.a(SourceFile:221)
08-06 17:03:09.950: E/SignInIntentService(21844):   at com.google.android.gms.games.service.GamesSignInIntentService.onHandleIntent(SourceFile:343)
08-06 17:03:09.950: E/SignInIntentService(21844):   at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
08-06 17:03:09.950: E/SignInIntentService(21844):   at android.os.Handler.dispatchMessage(Handler.java:99)
08-06 17:03:09.950: E/SignInIntentService(21844):   at android.os.Looper.loop(Looper.java:137)
08-06 17:03:09.950: E/SignInIntentService(21844):   at android.os.HandlerThread.run(HandlerThread.java:60)
08-06 17:03:09.965: E/LoadSelfFragment(7796): Unable to sign in - application does not have a registered client ID

更新:我有充分的理由相信,在一段时间内确实存在某种“阻塞”登录的情况(我进行了一些测试,编译了一个压力测试版本,会不断尝试登录(以合理的10秒冷却时间为准,以避免达到任何请求配额),如果登录失败...结果是大约30-45分钟的离线期,之后完全恢复(没有任何用户干预)...我有以下理论:
  • 可能存在未发布应用程序的不同强制配额 :(
  • 这可能是服务器端的错误,当Google尝试验证用户是否确实在未发布应用程序的测试者列表中时(有没有谷歌员工来为我们检查一下?)
  • 与上述情况类似,但针对的是未发布的应用程序本身(但我怀疑这一点,因为在特定时间可以使用用户A而不能使用用户B进行登录)
  • 本地游戏服务活动中可能构建了一些缓存(缓存了错误的客户端ID(可能是指某个空指针)以及因此正确接收到该403错误),如果是这样,那么这是Play Game Services API本身的错误,而不是服务器端...

如果我发现任何事情,我会及时向大家通报...


嗨,我目前也仍然遇到了这个问题(已经测试过)。你有尝试发布你的应用程序看看是否有效吗?我现在非常忙,所以没有时间来处理我的私人安卓项目。我认为这可能是一个服务器端的错误。很可能他们不喜欢同一IP登录两个不同的帐户。 - mavoka
很抱歉,我没有发布此应用程序的授权,也没有(法律上)被授权重复使用任何代码来创建一个在不同开发者账户下的测试应用程序...我会升级此问题,以便引起一些关注... - Diego Spinola
小更新:我注意到,如果在交易期间“google-play-game-services”活动崩溃,也可能会发生此问题(暂时锁定帐户)... - Diego Spinola

0

我最近也开始遇到这些问题。我认为他们可能在进行一些维护工作。我刚刚开始使用另一个测试账号,然后一切都开始正常运作了。当然,现在我又遇到其他问题了。我正在研究我的问题,并在找到答案后会更新给你。暂时来说,我建议你简单地使用一个不同的(或新的)测试账号(并确保在开发者控制台下进行授权以进行测试!)


0

你在两个设备上都添加了测试账户吗(通过设置)?

我知道这可能是一个愚蠢的问题,但我只在一个设备上有我的测试账户,结果得到了相同的(非常无用的)错误信息。你不能仅仅通过常规的登录流程来假定你可以将测试账户添加到第二个设备上 - 除非该设备上已经有一个具有测试访问权限的 Google 账户,否则它将会失败。


你好,不知道我是否正确理解了您的帖子。在第一台设备上,我使用了我的标准Google账户,并将其添加为开发者控制台中的测试人员。 在第二个设备上,我将测试人员账户作为第二个账户添加(除了我的标准Google账户)。当我想要登录Google Play游戏服务时,它会询问我要使用哪个账户(然后我使用测试账户)。但是我也删除了这个设备上的主要账户,所以测试账户是“主”账户。尽管如此,仍然出现了相同的错误消息。 - mavoka
我有一个设备,在设备上没有启用测试帐户。我收到了相同的错误消息。但是,如果每个设备上至少有一个测试帐户,则您的问题可能是其他原因引起的。 - optimality

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接