Android
本文旨在介绍如何设置 Ubisoft 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Ubisoft 渠道登录。
前提条件
1. 设置 Ubisoft 应用
联系 Ubisoft 获取以下应用程序配置参数。
- App ID
- GENOME ID
- 游戏 SKU
- 登录页面 URL
步骤1: 配置SDK
JDK:JDK8+
AndroidSdk:Android 11.0(API30)
OS:Android 5.0, 支持 API 21 或更高版本
Gradle 版本:5.64+
Android Grable 插件版本:3.6.1+
在 INTLConfig.ini 文件中添加应用程序配置参数。
[Ubisoft]
UBI_APP_ID_ANDROID = {INTL_UBI_APP_ID_ANDROID}
UBI_GENOME_ID_ANDROID = {INTL_UBI_GENOME_ID_ANDROID}
UBI_APP_BUILDID_ANDROID = {INTL_UBI_APP_BUILDID_ANDROID}
UBI_GAME_VERSION_ANDROID = {INTL_UBI_GAME_VERSION_ANDROID}
UBI_SKU = {INTL_UBI_SKU}
UBI_WEB_AUTH_URL = {INTL_UBI_WEB_AUTH_URL}
- 将
{INTL_UBI_APP_ID_ANDROID}
替换为 Ubisoft 提供的 App ID。 - 将
{INTL_UBI_GENOME_ID_ANDROID}
替换为 Ubisoft 提供的 GENOME ID。 - 将
{INTL_UBI_APP_BUILDID_ANDROID}
替换为游戏 Android 版本号。 - 将
{INTL_UBI_GAME_VERSION_ANDROID}
替换为游戏的自定义版本类型,例如 Alpha、Beta、Test 和 Full。 - 将
{INTL_UBI_SKU}
替换为 Ubisoft 提供的游戏 SKU。 - 将
{INTL_UBI_WEB_AUTH_URL}
替换为 Ubisoft 提供的登录页面 URL。
步骤2:添加 Ubisoft 登录
SDK 会拉起 WebView 并进入 Ubisoft 登录页面,用户在浏览器上登录 Ubisoft 账号之后,返回游戏继续 Ubisoft SDK 的登录操作。
注册登录相关回调。
- Unity
- Unreal Engine
不适用。
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
接口自动登录。当用户之前登录过,用户可以调用自动登录接口。如果 token 仍然在有效期内则登录成功,若 token 失效则会抛出错误,需要业务调用手动登录接口重新登录。
- Unity
- Unreal Engine
不适用。
UINTLSDKAPI::AutoLogin();
在自动登录失败时调用
Login
接口使玩家手动登录。- Unity
- Unreal Engine
不适用。
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelUbisoft);
// Ubisoft DNA 数据事件报告定义, 可以通过 UbDnaEvent 参数传递到 Ubisoft 渠道插件来完成 Ubisoft SDK 初始化。 JSON 样本:
FString extraJson = "{\"UbDnaEvents\": \"events definition generated from Ubi Event SDK\"}";
// 支持游客登录 Ubisoft 后,调用不同 extraJson 的登录 API 进行不同的登录。
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelUbisoft, "", extraJson);支持的
extraJson
:- 正式账号登录:
extraJson = "{\"ubiLoginType\" : \"ubiLoginTypeFormal\"}"
- 正式账号绑定游客账号-当前:
extraJson = "{\"ubiLoginType\" : \"ubiLoginTypeFormalBindGuest\", \"ubiLoginTypeFormalBindGuest\" : \"ubiLoginTypeFormalBindGuestCur\"}"
- 正式账号绑定游客账号-新建:
extraJson = "{\"ubiLoginType\" : \"ubiLoginTypeFormalBindGuest\", \"ubiLoginTypeFormalBindGuest\" : \"ubiLoginTypeFormalBindGuestNew\"}"
- 游客账号登录:
extraJson = "{\"ubiLoginType\" : \"ubiLoginTypeGuest\"}"
- 游客账号绑定正式账号-绑定:
extraJson = "{\"ubiLoginType\" : \"ubiLoginTypeGuestBindFormal\", \"ubiLoginTypeGuestBindFormal\" : \"ubiLoginTypeGuestBindFormalBind\"}"
玩家使用 Ubisoft Connect 登录时,如果返回
-20000
,表示该设备本地有游客账号,游戏客户端需弹窗让用户选择绑定当前的游客账号或绑定新建游客账号- 如果选择绑定
当前游客账号
,游戏需再次调用 Login ,并传入"Ubisoft 账号绑定现有的游客账号" 对应的extraJson
。 - 如果选择绑定
新建游客账号
,游戏需再次调用 Login ,并传入"Ubisoft 账号绑定新建的游客账号" 对应的extraJson
。
用户使用游客账号登录后,进入设置界面,点击Link按钮时,表示用户想绑定一个正式账号,此时游戏侧应调用 the extended APIs下方扩展接口项,此时 Player Network SDK 会调起 UbisoftWebAuth,用户通过输入正式账号名和密码登录,成功后,通过 UbiservicesSDK 请求 Ubiserver 判断该账号是否可以绑定。
- 如果 ubiserver 返回 -10000,表示 Unisoft 账号可以绑定,用户继续进入绑定流程,游戏侧需调用
登录
,传入extraJson
的参数是 “游客账号绑定正式账号-绑定” 对应的字符串。 - 如果 ubiserver 返回 -10001,表示 Unisoft 账号无法绑定。
与游戏后台同步客户端身份验证状态,等待最终验证结果。
登录接口返回 AuthResult,channel_info
数据格式如下:
"channel_info":"
{
\"expire_ts\":1651047328,
\"is_refresh\":0,
\"profile_id\":\"xxxxxxxx-xxxx-xxxx-xxxx-f34e406412d6\",
\"sesssion_id\":\"xxxxxxxx-xxxx-xxxx-xxxx-d82d645f5df0\",
\"ticket\":\"...\",
\"user_id\":\"xxxxxxxx-xxxx-xxxx-xxxx-F88B443D15D6\"
}",
登出
调用接口 Logout
登出当前渠道并且传递相关参数。
- Unity
- Unreal Engine
不适用。
UINTLSDKAPI::Logout();
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。
扩展接口
扩展接口
游客账号绑定 Ubisoft 账号
- Unity
- Unreal Engine
不适用。
// 根据手动接入流程中的说明,通过 “guestBindFormalAccountLogin” 调用 ExtendInvoke 拉起 webAuth
UINTLSDKAPI::ExtendInvoke(EINTLLoginChannel::kChannelUbisoft, "guestBindFormalAccountLogin", "");
获取 Ubisoft DNA 事件上报 Facade
- Unity
- Unreal Engine
不适用。
// "unsigned int64" 字符串,您应该将其转换为 Facade 指针
FString facadePtr = UINTLSDKAPI::ExtendInvoke(EINTLLoginChannel::kChannelUbisoft, "getUbDnaFacade", "");
设置 Ubisoft DNA 未上报 session events
- Unity
- Unreal Engine
不适用。
FString paramsJson; // {"events": "events json string"}
UINTLSDKAPI::ExtendInvoke(EINTLLoginChannel::kChannelUbisoft, "setUbLastSessionEvents", paramsJson);
获取 Ubisoft 渠道的用户 ID
- Unity
- Unreal Engine
不适用。
FString ubiUserID = UINTLSDKAPI::ExtendInvoke(EINTLLoginChannel::kChannelUbisoft, "getUbUserId", "");