Android
本文旨在介绍如何设置 Google 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Google 渠道登录。
前提条件
1. 在 Google Play 管理中心设置您的游戏
对于 IEGG 项目,请联系 [miaruan (Ruan Mingjun)] 进行 Google 应用的注册和配置。
1. 创建 Google 应用
按照提示在 Google Play Console 上注册账号。
Google 收取25美元的服务费。请提前准备好信用卡。
在 All apps 页面,点击 Create app,创建游戏应用。
输入应用信息。
2. 配置 Play 游戏服务
设置 Play 游戏服务,以管理游戏元数据并自动执行游戏制作和分发任务。
在左侧导航栏中,选择 Grow > Play Games Services > Setup and management > Configuration。
在 Does your game already use Google APIs 下,选择对应的选项来创建 Play 游戏服务项目。
在 Properties 部分,点击 Edit Properties。
输入游戏基本信息,然后点击 Save changes。
3. 添加一个凭证,将 OAuth 2.0 客户端 ID 与游戏连接起来
在左侧导航栏中,点击 OAuth consent screen。
按照说明设置 OAuth OAuth consent screen。
在左侧导航栏上点击 Credentials。
在 Credentials 页面,选择 CREATE CREDENTIALS > OAuth Client ID,创建 OAuth 客户端 ID。
在 Application type 列表中,点击 Android。
输入 Package Name 和 SHA-1 Certificate Fingerprint。
与开发团队确认 Package Name 和 SHA-1 Certificate Fingerprint。Android 的 OAuth 客户端要求用户在 KeyStore 中配置 SHA-1 证书指纹和软件包名称。请确保这两个值正确无误。否则,登录过程将出现异常。点击 SAVE 完成配置。
进入 Android App 的详细信息页面,查看客户 ID 和客户密文。
添加登录测试用户。
4. 配置 API 访问权限
在左侧导航栏中,选择 Settings > Developer account > API access。
在 API 访问页面上,接受服务条款。
点击相应项目右侧的 Link,将 Google Play Console 链接到 API 项目。
5. 添加游戏测试人员
在左侧导航栏中,选择 Grow > Play Games Services > Setup and management > Testers。
在 Testers 选项卡中,点击 Add testers 为您的游戏添加测试人员。
在游戏应用发布之前,只有测试人员可以登录。请确保应用处于测试状态.
6. 配置成就和排行榜
在 Play 游戏服务 菜单下找到 成就 和 排行榜 功能,并根据需要进行配置。
7. 获取 Google API ID
从 Google 云端平台 面板访问信息中心。Google API ID 就是此页面上的 Project No.。
8. 获取 Client ID 和 Client secret
按照 添加凭证以将 OAuth 2.0 客户端 ID 与游戏链接 中的步骤获取应用信息。
步骤1:为 Google 登录配置 SDK
在
AndroidManifest
文件中,确保添加了所需权限。Google 需要访问网络。<uses-permission android:name="android.permission.INTERNET"/>
打开项目的 INTLConfig.ini 文件:
INTLConfig.ini[INTL environment]
# WARNING: You should change this URL to the production environment when you release your game.
INTL_URL = https://test.intlgame.com
GAME_ID = {INTL_GAME_ID}
SDK_KEY = {INTL_SDK_KEY}
[INTL Log]
LOG_LEVEL = 1
LOG_CONSOLE_OUTPUT_ENABLE = 1
LOG_FILE_OUTPUT_ENABLE = 1
LOG_ENCRYPT_ENABLE = 0
LOG_COMPRESS_ENABLE = 0
[Android LifeCycle]
LIFECYCLE = Google
[Google]
GOOGLE_CLIENT_KEY_ANDROID = {INTL_GOOGLE_CLIENT_KEY}- 将 SDK 后端环境设置为
INTL_URL = https://test.intlgame.com
。 - 将
{INTL_GAME_ID}
和{INTL_SDK_KEY}
替换为 Player Network 控制台 分配的GAME_ID
和SDK_KEY
的值。 - 设置
LOG_LEVEL = 1
、LOG_CONSOLE_OUTPUT_ENABLE = 1
、LOG_FILE_OUTPUT_ENABLE = 1
、LOG_ENCRYPT_ENABLE = 0
和LOG_COMPRESS_ENABLE = 0
,以便在不加密或压缩输出的情况下输出控制台日志和日志文件。 - 在
LIFECYCLE
中添加 Google。有关更多信息,请参见 SDK 环境。 - 将
{INTL_GOOGLE_CLIENT_KEY}
替换为 Web 客户端密钥。
这是 API OAuth 配置过程中 Credentials 部分中网络应用的客户端 ID,在 API OAuth 2.5 配置过程中也称为 Server Client ID。
- 将 SDK 后端环境设置为
在 gradle 文件中定义
manifestPlaceholders
,将{INTL_GOOGLE_APP_ID}
替换为 Google App ID。- Unity
- Unreal Engine
mainTemplate.gradleandroid {
defaultConfig {
manifestPlaceholders = ["GOOGLE_APPID":"{INTL_GOOGLE_APP_ID}"]
}
}注意对于 Player Network SDK V1.17 及更高版本,请编辑
INTLConfig_APL.xml
。对于 Player Network SDK V1.16.04 及更早版本,请编辑
INTLCore_UPL.xml
。<buildGradleAdditions>
<insert>
<![CDATA[
android{
defaultConfig {
manifestPlaceholders = ["GOOGLE_APPID":"{INTL_GOOGLE_APP_ID}"]
}
}]]>
</insert>
</buildGradleAdditions>
步骤2:添加 Google 登录
所有 Google 操作都需要连接到 Google 服务。
自动登录 (AuthLogin)
在自动登录期间,设备可能无法连接到 Google 服务。因此推荐在默认情况下,让 Player Network SDK 在自动登录时连接 Google 服务。(游戏团队可在 INTLConfig
配置文件的 Google渠道配置
部分配置配置 GOOGLE_LOGOUT_NEED_CONNECT
字段来禁止此连接。)
登录
在调用 Google 登录之前,Player Network SDK 将检查 Google 移动服务(GMS)是否可用。只有当 GMS 可用时,才能调用登录服务。如果 GMS 不可用,Player Network SDK 将通过 INTLAuthResult
的 ThirdCode
字段向游戏返回 Google 发送的错误代码。
返回代码 | 返回值 | 错误描述 |
---|---|---|
SERVICE_MISSING | 1 | 设备上的 GMS 不可用。 |
SERVICE_VERSION_UPDATE_REQUIRED | 2 | 已安装的 GMS 版本已过期。 |
SERVICE_DISABLED | 3 | GMS 已禁用。 |
SERVICE_INVALID | 9 | 安装的 GMS 版本不正确。 |
SERVICE_UPDATING | 18 | 设备上的 GMS 正在更新。 |
更多信息,请参见 Google Docs 和 Google 常见问题
注册登录相关回调。
- Unity
- Unreal Engine
// Add callbacks
public void AddAuthObserver()
{
INTLAPI.AddAuthResultObserver(OnAuthResultEvent);
}
// Remove callbacks
public void RemoveAuthObserver()
{
INTLAPI.RemoveAuthResultObserver(OnAuthResultEvent);
}
// Process the INTLAuthResult callback
public void OnAuthResultEvent(INTLAuthResult ret)
{
Debug.Log($"MethodID: {ret.MethodId}");
string methodTag = "";
if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_LOGIN)
{
methodTag = "Login";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_BIND)
{
methodTag = "Bind";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_AUTOLOGIN)
{
methodTag = "AutoLogin";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_QUERY_USER_INFO)
{
methodTag = "QueryUserInfo";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_GET_AUTH_RESULT)
{
methodTag = "GetAuthResult";
}
}C++ Event Handling (above v1.15)
//configure callback
FINTLAuthEvent authEvent;
authEvent.AddUObject(this, &OnAuthResult_Implementation);
UINTLSDKAPI::SetAuthResultObserver(authEvent);
// Remove callbacks
UINTLSDKAPI::GetAuthResultObserver().Clear();void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
}Unreal Event Handling
void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
}调用
AutoLogin
接口自动登录。- Unity
- Unreal Engine
INTLAPI.AutoLogin();
UINTLSDKAPI::AutoLogin();
在自动登录失败时调用
Login
接口使玩家手动登录。- Unity
- Unreal Engine
INTLAPI.Login(INTLChannel.Google);
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelGoogle);
与游戏后台同步客户端身份验证状态,等待最终验证结果。
[可选] 设置 email 权限
要在 Google 登录时获取玩家邮箱需先设置对应权限,开启后将在 AuthResult
的 ChannelInfo
中返回 email
。
- 基于合规考虑,可针对特定来源对返回的
email
做 mask 处理,如有需求请联系 Player Network 助手 打开。 - 可在后台流水日志中上报 hash 后的
base64(sha256(email))
,如有需求请联系 Player Network 助手 打开。 - 可用于验证玩家信息或绑定列表是否包含
email
信息,如有需求请联系 Player Network 助手 打开。
在 Player Network 控制台 开启 email 返回功能,将 return_email 设置为 YES,详细步骤请参见 第三方渠道配置。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。
步骤4:发布游戏
在准备发布正式版本之前,请使用 Android App Bundle 创建一个测试版本。
发布 Beta 版的好处是用户可以从 Google play 下载,但没有添加评论的权限。为用户提交反馈设置了特定的渠道。
创建正式发布版本
在左侧导航栏中,选择 Release > Production。
按照说明创建生产版本。
更改发布状态
如果用户不释放应用,验证可能会失败。
进入 Google 云端平台 的 OAuth 同意界面页面。
将 Publishing status 更改为 PUBLISH APP。
使用 APK 测试谷歌登录
更多信息,请参见 使用 APK 测试谷歌登录。
使用 Google Play Games Services 同步登录态
如果游戏需要接入 Google Play 游戏电脑版(Google PC 模拟器),则推荐使用 Google Play Games Services(GooglePGS)来将 Android 设备上的游戏登录态同步到 Google PC 模拟器中。
使用 GooglePGS 同步登录态,需要在接入 INTLGoogle
的前提下接入 INTLGooglePGS
。
步骤1:为 GooglePGS 配置 SDK
在项目的 INTLConfig.ini 文件中,添加以下配置:
INTLConfig.ini[Android LifeCycle]
LIFECYCLE = GooglePGS
[GooglePGS]
GOOGLEPGS_SERVER_PROJECT_ID = {INTL_GOOGLEPGS_SERVER_PROJECT_ID}
GOOGLEPGS_ENABLE_PGS = 1- 将
{INTL_GOOGLEPGS_SERVER_PROJECT_ID}
替换为 Web 客户端密钥。
这是 API OAuth 配置过程中 Credentials 部分中网络应用的客户端 ID,在 API OAuth 2.5 配置过程中也称为 server client ID。 GOOGLEPGS_ENABLE_PGS
表示 SDK 是否启用 GooglePGS 来同步登录态到 Google PC 模拟器,GOOGLEPGS_ENABLE_PGS = 1
则为启用。
- 将
gradle 文件中定义
manifestPlaceholders
,将{INTL_GOOGLEPGS_APP_ID}
替换为 Google App ID。- Unity
- Unreal Engine
mainTemplate.gradleandroid {
defaultConfig {
manifestPlaceholders = ["GOOGLEPGS_APPID":"{INTL_GOOGLEPGS_APP_ID}"]
}
}注意对于 Player Network SDK V1.17 及更高版本,请编辑
INTLConfig_APL.xml
。对于 Player Network SDK V1.16.04 及更早版本,请编辑
INTLCore_UPL.xml
。<buildGradleAdditions>
<insert>
<![CDATA[
android{
defaultConfig {
manifestPlaceholders = ["GOOGLEPGS_APPID":"{INTL_GOOGLEPGS_APP_ID}"]
}
}]]>
</insert>
</buildGradleAdditions>
步骤2:在 Google PC 模拟器上,使用 AutoLogin
获取登录态
完成上述步骤之后,即可通过 GooglePGS 将 Android 设备上的登录态同步到 Google PC 模拟器上。Android 设备与 Google PC 模拟器需要登录同一个 Google 账号。
- Unity
- Unreal Engine
INTLAPI.AutoLogin();
UINTLSDKAPI::AutoLogin();