iOS
本文旨在介绍如何设置 Google 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Google 渠道登录。
前提条件
1. 在 Google Play 管理中心设置您的游戏
对于 IEGG 项目,请联系 [miaruan (Ruan Mingjun)] 进行 Google 应用的注册和配置。
1. 创建 Google 应用
按照提示在 Google Play Console 上注册账号。
Google 收取25美元的服务费。请提前准备好信用卡。
- 进入 Google Play Console。
- 在 All apps 页面,点击 Create app,创建游戏应用程序。
  
- 输入应用程序信息。
  
2. 配置 Play 游戏服务
设置 Play 游戏服务,以管理游戏元数据并自动执行游戏制作和分发任务。
- 进入 Google Play Console。
- 在左侧导航栏中,选择 Grow users > Play Games Services > Setup and management > Configuration。
- 在 Which Play Games Services project do you want to use 下,选择对应的选项来创建 Play 游戏服务项目。
  
- 在 Properties 部分,点击 Edit Properties。
- 输入游戏基本信息,然后点击 Save changes。
  
3. 添加一个凭证,将 OAuth 2.0 客户端 ID 与游戏连接起来
- 
在左侧导航栏中,点击 OAuth consent screen。 
- 
按照说明设置 OAuth OAuth consent screen。 
  
- 
在左侧导航栏上点击 Clients。 
- 
在 Clients 页面,选择 CREATE CLIENT > Create OAuth Client ID,创建 OAuth 客户端 ID。 
  
- 
同时添加 Android 和 Web OAuth 客户端。 - Android 客户端用于客户端登录。
- Web 客户端用于 Player Network SDK 获取离线授权,client ID 是服务器客户端 ID。
  
 Android- 在 Authentication type 列表中,点击 Android。
- 输入 Package Name 和 SHA-1 Certificate Fingerprint。
 与开发团队确认 Package Name 和 SHA-1 Certificate Fingerprint。Android 的 OAuth 客户 端要求用户在 KeyStore 中配置 SHA-1 证书指纹和软件包名称。请确保这两个值正确无误。否则,登录过程将出现异常。
  
- 点击 SAVE 完成配置。
- 进入 Android 应用的详细信息页面。
  
- 找到 Client ID 和 Client Secret,并将其输入 Player Network 控制台的游戏配置中。
  
 Web- 在 Authentication type 列表中,点击 Web。
- 输入所需信息。
 在网络应用程序详细信息页面的授权重定向 URL 部分,添加https://test-common-web.intlgame.com/jssdk/googlelogincallback.html和https://common-web.intlgame.com/jssdk/googlelogincallback.html。
  
- 点击 SAVE 完成配置。
- 进入 Web 应用的详细信息页面。
  
- 找到 Client ID 和 Client Secret,并将其输入 Player Network 控制台的游戏配置中。
  
 
- 
点击 Audience > ADD USERS 添加登录测试用户。 
  
4. 添加游戏测试人员
- 进入 Google Play Console。
- 在左侧导航栏中,选择 Grow users > Play Games Services > Setup and management > Testers。
- 在 Testers 选项卡中,点击 Add testers 为您的游戏添加测试人员。
  
在游戏应用程序发布之前,只有测试人员可以登录。请确保应用程序处于测试状态.
5. 配置成就和排行榜
在 Gaming Services 画面中找到“成就”和“排行榜”功能,并根据需要进行配置。

6. 获取 Google API ID
从 Google 云端平台 面板访问信息中心。Google API ID 就是此页面上的 Project No.。

7. 获取 Client ID 和 Client secret
按照 添加凭证以将 OAuth 2.0 客户端 ID 与游戏链接 中的步骤获取应用程序信息。

- 获取 Player Network 控制台登录账号。
- 为游戏创建新项目,或加入已有项目。
- 下载 SDK。
- 接入 SDK。
- 在 Player Network 控制台添加 Google 为业务的登录鉴权方式。
步骤1:为 Google 登录配置 SDK
- 打开 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
[Google Channel Configuration]
GOOGLE_CLIENT_KEY_IOS = {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,以便在不加密或压缩输出的情况下输出控制台日志和日志文件。
- 将 {INTL_GOOGLE_CLIENT_KEY}替换为 Google 分配的 Client ID。
- 
获取 Google Reverse Client ID - 打开 Google Cloud Console。
- 导航到 APIs & Services > Credentials。
- 创建新的证书,选择 OAuth client ID。
- 选择 iOS 作为应用类型,并填写你 iOS 应用的 Bundle ID。
- 创建完成后,你将被提示下载 GoogleService-Info.plist 文件。
- 打开 GoogleService-Info.plist 文件,复制键 REVERSED_CLIENT_ID对应的值。
  
- 
添加 Google 配置 - Unity
- Unreal Engine
 打开 INTLGoogleKit.projmods文件,从 Unity 导出 Xcode 项目之前将{INTL_GOOGLE_REVERSED_CLIENT_ID}替换为对应的 Google Reverse Client ID。{
 "group": "INTL",
 "libs": ["libz.tbd", "libsqlite3.0.tbd"],
 "frameworks": ["SafariServices.framework", "LocalAuthentication.framework", "AuthenticationServices.framework"],
 "Info.plist":{
 "CFBundleURLTypes" :
 [
 {
 "CFBundleTypeRole":"Editor",
 "CFBundleURLName":"Google",
 "CFBundleURLSchemes":["{INTL_GOOGLE_REVERSED_CLIENT_ID}"]
 }
 ]
 }
 }- SDK 1.24 及之后版本
- SDK 1.24 之前版本
 打开 INTLSDK/Source/INTLGoogle/Libs/iOS/INTLGoogle_UPL.xml文件,并将{INTL_GOOGLE_REVERSED_CLIENT_ID}替换为对应的 Google Reverse Client ID。<dict>
 <key>CFBundleURLName</key>
 <string>Google</string>
 <key>CFBundleTypeRole</key>
 <string>Editor</string>
 <key>CFBundleURLSchemes</key>
 <array>
 <string>{INTL_GOOGLE_REVERSED_CLIENT_ID}</string>
 </array>
 </dict>打开 INTLSDK/Source/INTLConfig/Configs/iOS/Plist/INTLGoogle.plist文件,并将{INTL_GOOGLE_REVERSED_CLIENT_ID}替换为对应的 Google Reverse Client ID。<dict>
 <key>CFBundleURLName</key>
 <string>Google</string>
 <key>CFBundleTypeRole</key>
 <string>Editor</string>
 <key>CFBundleURLSchemes</key>
 <array>
 <string>{INTL_GOOGLE_REVERSED_CLIENT_ID}</string>
 </array>
 </dict>
步骤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 助手打开。
- 可用于 iOS Firebase 的 Private Set Membership(PSM)功能,详见 Firebase iOS 工程配置。
在 Player Network 控制台 开启 email 返回功能,将 return_email 设置为 YES,详细步骤请参见 第三方渠道配置。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。
步骤4:发布游戏
在准备发布生产版本之前,请使用 Android App Bundle 创建一个测试版本。
发布 Beta 版的好处是用户可以从 Google play 下载,但没有添加评论的权限。为用户提交反馈设置了特定的渠道。
创建生产版本
- 
在左侧导航栏中,选择 Release > Production。  
- 
按照说明创建生产版本。 

