本页介绍了如何排查在开发 Android 应用时可能遇到的问题 Play Games SDK 的一款游戏
无法登录
如果您无法让玩家登录游戏,请先确保您已遵守 创建客户端 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 管理中心内验证软件包名称,请进入 Google 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 中配置的指纹一致。具体操作步骤如下:
- 打开 Google Play 管理中心,然后找到您的游戏。
- 在游戏详情页面上,滚动到底部,然后点击指向关联的 Google Cloud Platform 项目的链接。
- 在 Google Cloud Platform 中,选择您的项目。
- 在左侧边栏中,选择 API 和身份验证。在显示的 API 列表中,确保 Google Play 游戏服务 API 的状态为启用。
- 在左侧边栏中,选择已注册的应用。
- 展开 OAuth 2.0 客户端 ID 部分,记下证书指纹 (SHA1)。
如果此指纹与上一步中的证书指纹不一致,您必须使用正确的证书指纹创建新的客户端 ID。您必须在 Google Play 管理中心(而不是 Google Cloud Platform
检查测试账号是否已启用
在发布游戏之前,您还必须启用用于在 Google Play 管理中心内创建游戏的账号作为测试账号。如需检查此项配置是否正确无误,请执行以下操作:
- 打开 Google 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...
}
}