在Android上初始化游戏客户端

69

我正在尝试新的Google Play Game Services。

起初,我按照这份指南进行了操作:https://developers.google.com/games/services/android/quickstart, 然后完成了这个步骤:https://developers.google.com/games/services/android/init

最终状态如下:

05-16 20:01:39.034: E/AndroidRuntime(18257): FATAL EXCEPTION: main
05-16 20:01:39.034: E/AndroidRuntime(18257): java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
05-16 20:01:39.034: E/AndroidRuntime(18257):    at com.google.android.gms.internal.p$f.a(Unknown Source)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at com.google.android.gms.internal.p$f.a(Unknown Source)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at com.google.android.gms.internal.p$b.p(Unknown Source)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at com.google.android.gms.internal.p$a.handleMessage(Unknown Source)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at android.os.Looper.loop(Looper.java:137)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at android.app.ActivityThread.main(ActivityThread.java:5041)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at java.lang.reflect.Method.invokeNative(Native Method)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at java.lang.reflect.Method.invoke(Method.java:511)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-16 20:01:39.034: E/AndroidRuntime(18257):    at dalvik.system.NativeStart.main(Native Method)

我已经尝试按照教程一步一步地操作,但我不明白出了什么问题。

ava.lang.IllegalStateException:发生致命的开发者错误。请检查日志以获取更多信息。

我认为logcat = logs,没有其他内容。那么我在哪里可以找到这些“logs”?

我的实现只有一个区别。我有一个ClassA继承BaseGameActivity,然后ClassB继承ClassA并实现View.OnClickListener,因此我将https://developers.google.com/games/services/android/init中的所有方法放在ClassB类中。

感谢任何帮助

5个回答

127

最初我也遇到了同样的问题。我需要查看完整的未经过滤的LogCat日志。在那里,我看到了这个消息:

GamesIntentService(17929):要使用Google Play游戏服务,需要在您应用程序标记中的“应用程序”标记下添加一个名为“com.google.android.gms.games.APP_ID”的元数据标记

因此,假设您在strings.xml中创建了一个名为app_id的条目,请尝试将以下内容添加到<application>标记下的AndroidManifest.xml中:

<meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />

你可以在游戏服务选项卡中找到你的APP_ID。

**游戏服务**选项卡


8
面掌 - 我在 AndroidManifest.xml 文件中有它,但没有在我的 <application> 标签中。谢谢。 - Semanticer
6
请勿将“.APP_ID”替换为您在开发者控制台中的APP ID,这只是一个小小的补充说明。我因此浪费了大约15分钟的时间 :| - RelativeGames
35
不要直接将您的应用程序ID放入meta-data标签中。当系统期望它是一个字符串时,它会将其解析为整数 :|。 - Finnboy11
5
另外补充一点,"未经过滤的日志"指的是检查完整的设备日志而不是您特定于应用程序的日志。Google Play服务不属于您的应用程序,因此其错误消息不会记录在那里。 - you786
抱歉,如果这是一个愚蠢的问题,但在那里输入什么作为APP_ID?我对Android开发非常新手。 - d0n.key
还有一件事,这里是如何找到您的APP_ID:https://dev59.com/_mEh5IYBdhLWcg3wdzaR - Maarti

18

补充Hetabiquo的回应,如果您还在游戏中使用云存储服务,则必须通过在<application>标记范围内添加以下元数据标签来更新应用程序的AndroidManifest.xml。

<meta-data android:name="com.google.android.gms.appstate.APP_ID" android:value="@string/app_id" />

谢谢兄弟!这就是它。 - cesarferreira
你好 @Diego Palomar,在我的应用程序中,我已经定义了 app_id,但它只允许使用数字,而在我的情况下,app id 是使用 console.google.developer 创建的,例如 123-30abcd.apps.googleusercontent.com,那么我该如何使用我的 app id?由于此原因,我遇到了 IllegalStateException,请给我提供解决方案。 - Nirav Mehta
@NiravMehta:在Google开发者控制台中,使用长字符串(客户端ID)中破折号前面的数字。 - Ε Г И І И О
我也尝试了,但出现了错误“尚未连接”。 - Nirav Mehta
尝试清除您设备上的Google Play服务应用程序的缓存。 - Ε Г И І И О
显示剩余2条评论

2

我遇到了同样的问题,但是我的meta标签是正确的 - 我查看了未过滤的日志,并发现它正在搜索不同的meta标签。

meta标签的名称取决于您在GameHelper构造函数中提交的客户端编号类型(如果使用)。

new GameHelper(this, GameHelper.CLIENT_GAMES);

我不小心使用了CLIENT_ALL,导致元标记名称的期望值出错。我将其更改为CLIENT_GAMES,一切都顺利进行。


1
除了Hetabiquo,您还可以在游戏服务选项卡中找到您的APP_ID:

**Games Services** tab


0

我遭受了这个bug相当长的一段时间。我决定逐个扫描basegameutils包中的每个文件。在gameHelperUtils类中,我发现了这个方法getAppIdFromResource()。在它内部,它从资源中请求应用程序ID。我记得我已经在清单文件中硬编码了应用程序ID。然后我在strings文件中添加了一个名为app_id的字符串资源。令我惊讶的是,错误消失了,排行榜也出现了!


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