本页介绍了如何排查在使用 Google Play 游戏服务开发 Android 游戏时可能会遇到的问题。
日志记录
要排查游戏问题,您可以使用 adb shell
命令在设备上启用详细日志记录。然后,您可以使用 logcat 查看 Google Play 游戏服务日志消息。
启用日志记录
在测试设备上启用日志记录
将设备连接到已安装 Android SDK 的计算机。
打开终端并运行此命令
adb shell setprop log.tag.Games VERBOSE
在设备上运行您的游戏并重现您尝试调试的问题。
查看日志
adb logcat
停用日志记录
要在设备上停用 Play 游戏服务的详细日志记录并恢复到原始日志记录行为,请运行以下命令
adb shell setprop log.tag.Games INFO
无法登录
如果您无法让玩家登录您的游戏,请首先确保您已按照说明创建了客户端 ID 并配置了游戏服务。如果您仍然遇到登录错误,请检查以下各项以确保您的游戏设置正确。
检查您的元数据标签
您的 AndroidManifest.xml
必须包含一个游戏元数据标签。要验证您的元数据标签是否设置正确
打开您的
AndroidManifest.xml
并验证它是否包含一个meta-data
标签,如下所示<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
找到您的
@string/app_id
资源定义。它通常在位于res/xml
目录中的 XML 文件中定义,例如res/xml/strings.xml
或res/xml/ids.xml
。验证
@string/app_id
资源的值是否与您的应用的数字 ID 匹配。此资源的值应只包含数字。例如<string name="app_id">123456789012</string>
检查您的软件包名称
您游戏的软件包名称必须与您客户端 ID 上的软件包名称匹配。要验证软件包名称
打开您的
AndroidManifest.xml
并验证您游戏的软件包名称是否正确。软件包名称是manifest
标签中package
属性的值。验证您在创建客户端 ID 时提供的软件包名称。要验证 Google Play 管理中心内的软件包名称,请前往 Play 管理中心并点击与您的游戏对应的条目。
前往关联应用标签页,检查客户端 ID 列表。此列表中应有一个 Android 关联应用,其软件包名称与您的
AndroidManifest.xml
中的软件包名称匹配。如果存在不匹配,请使用正确的软件包名称创建新的客户端 ID,然后重试登录。
检查证书指纹
您用于签署游戏的证书应与关联到您客户端 ID 的证书指纹匹配。要验证这一点,请首先按如下方式检查您证书的 SHA1 指纹
找到您的证书文件并获取其 SHA1 指纹。要获取 SHA1 指纹,请运行此命令
keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
请注意输出中标记为
SHA1:
的十六进制数字序列。这就是您的证书指纹。
接下来,检查您的构建工具是否正在使用此证书
- 从您的构建工具生成游戏的 APK,并使用所需的证书对其进行签名。将生成的 APK 复制到临时目录。
在临时目录中,运行以下命令解压您的 APK。
unzip YourGame.apk
使用 RSA 证书文件生成私钥
keytool -printcert -file META-INF/CERT.RSA
或者,您可以使用 DSA 证书文件生成私钥
keytool -printcert -file META-INF/CERT.DSA
记下标记为
SHA1:
的行上的十六进制数字序列。此数字序列应与您上一步获取的证书指纹匹配。如果存在不匹配,则您的构建工具或系统未配置为使用您的证书签署应用。在这种情况下,请查阅您的构建环境文档,以确定如何正确配置它,然后重试登录。
接下来,检查证书指纹是否与您的客户端 ID 中配置的指纹匹配。为此
- 打开 Play 管理中心并导航到您的游戏。
- 在游戏详情页面上,滚动到底部并点击指向关联的 Google Cloud Platform 项目的链接。
- 选择您的项目。
- 在左侧边栏中,选择API 和身份验证。确保在显示的 API 列表中,Google Play 游戏服务 API 状态为开启。
- 在左侧边栏中,选择已注册应用。
- 展开 OAuth 2.0 客户端 ID 部分,并记下证书指纹 (SHA1)。
如果此指纹与您前面步骤中获取的证书指纹不匹配,则必须使用正确的证书指纹创建新的客户端 ID。您必须在 Play 管理中心而不是 Google Cloud Platform 项目中创建新的客户端 ID。
检查测试账号是否已启用
在游戏发布之前,在 Play 管理中心创建游戏的账号也必须启用为测试员。要检查此项是否配置正确
- 打开 Play 管理中心并导航到您的游戏。
- 打开测试标签页。
- 检查您尝试登录的账号是否在测试员列表中。
如果您尝试登录的账号未列出,请将其添加到列表中,等待几分钟后重试登录。
Proguard 问题
如果您正在使用 Proguard 并在混淆的 APK 上看到错误,请检查您的 AndroidManifest.xml
中的目标 API 级别。请务必将其设置为 17 或更高。
其他设置问题原因
检查其他常见的错误原因
- 如果您的游戏已发布,请检查游戏设置是否也已发布(可能在未发布游戏设置的情况下发布应用)。为此,请前往 Google Play 管理中心并导航到您的应用,然后检查游戏名称旁边的框是否显示“已发布”。如果显示其他状态,例如“准备发布”或“准备测试”,请点击该框并选择发布游戏。
- 如果您无法发布游戏,请检查是否只有一个客户端 ID 启用了此应用是新安装的首选应用选项。
匿名监听器
匿名监听器是内联定义的监听器接口实现,如下所示。
ImageManager im = ...;
// Anonymous listener -- dangerous:
im.loadImage(new ImageManager.OnImageLoadedListener() {
@Override
public void onImageLoaded(Uri uri, Drawable drawable) {
// ...code...
}
}
匿名监听器不可靠,因为 Play 游戏 SDK 将它们作为弱引用维护,这意味着它们可能会在被调用之前被垃圾回收器回收。相反,您应该使用持久性对象(例如 Activity
)来实现监听器。
public class MyActivity extends Activity
implements ImageManager.OnImageLoadedListener {
private void loadOurImages() {
ImageManager im = ...;
im.loadImage(this);
}
@Override
public void onImageLoaded(Uri uri, Drawable drawable) {
// ...code...
}
}