配置 Garena 登录
Player Network 为 Garena 登录分配的渠道 ID 是 10,渠道定义在 Unity 引擎为 INTLChannel.Garena
而在 Unreal Engine 为 EINTLLoginChannel::kChannelGarena
。Player Network 在以下平台上支持 Garena 登录:
Garena SDK 集成了许多第三方 SDK,包括许多登录 SDK。这些登录渠道在 Player Network SDK 中作为 Garena 的子渠道提供。
在 Player Network SDK 1.16 版之后,Player Network SDK 将根据 INTLConfig.ini INTL_URL
属性切换 Garena 环境。当 Player Network SDK 处于 test/dev/debug 环境时,Garena 将处于测试环境;当 Player Network SDK 处于其他环境时,Garena 将处于正式环境。
目前,Player Network SDK 支持登录的 Garena 子渠道包括:
- Android:
Guest
、Garena
、Facebook
、Google
- iOS:
Guest
、Garena
、Facebook
、Apple
、Google
- Windows:
Garena
、Facebook
、Google
、Apple
绑定
根据当前登录的 Garena 账号的子渠道,可分为两种绑定方式:游客绑定和平台账号绑定。
游客绑定
通过 Garena 的游客子渠道登录后,游客账号可以绑定到其他 Garena 子渠道。平台账号绑定
通过 Garena 的非游客子渠道登录后,可将登录账号作为主账号绑定其他子渠道账号。绑定前,请调用 Request Platform Binding Info 查看可供绑定的平台。
与主账号绑定的账号是辅助账号。绑定后,如果用户使用辅助账号登录,Garena 将返回其绑定的主账号的uid
和token
。
重置 Garena 游客
绑定 Garena 游客账号成功后,游戏需要调用接口重置 Garena 游客账号的数据。
如果绑定成功后未重置游客账号,游客账号登录将返回 2203
/1204
(iOS)或 2019
(Android)错误代码,导致游客账号登录失败。
代码示例
- Unity
- Unreal Engine
// Add callback
public void AddAuthObserver()
{
INTLAPI.AddAuthResultObserver(OnAuthResultEvent);
INTLAPI.AddExtendResultObserver(OnExtendEvent);
}
// Remove Callback
public void RemoveAuthObserver()
{
INTLAPI.RemoveAuthResultObserver(OnAuthResultEvent);
INTLAPI.RemoveExtendResultObserver(OnExtendEvent);
}
public void OnAuthResultEvent(INTLAuthResult ret)
{
if (ret.MethodId == (int)INTLMethodID.INTL_AUTH_BIND)
{
if(ret.Channel.Equals(INTLChannel.Garena) && ret.RetCode == INTLErrorCode.SUCCESS)
{
// In the AuthResult callback, invoke resetGuest straightaway if the method is bind, the channel is Garena and the return code is success
INTLAPI.ExtendInvoke(INTLChannel.Garena, "resetGuest", "");
}
}
}
public void OnExtendEvent(INTLExtendResult ret)
{
// Extend callback
}
void INTLSDKAPIObserverImpl::OnAuthResult_Implementation(FINTLAuthResult ret)
{
if(ret.MethodId == kMethodIDAuthBind)
{
if(ret.ChannelName == kChannelGarena && ret.RetCode == ErrorCode::SUCCESS)
{
// In the AuthResult callback, invoke resetGuest straight away if the method is bind, the channel is Garena and the return code is success
UINTLSDKAPI::ExtendInvoke(EINTLLoginChannel::kChannelGarena, "resetGuest", "");
}
}
}
void INTLSDKAPIObserverImpl::OnExtendResult_Implementation(FINTLExtendResult ret)
{
// Extend callback
}
申请平台绑定信息
调用 RequestPlatformBindingInfo
后,bounded_accounts
和 available_platforms
将在 ExtendResult 的 ret_msg
字段中以 JSON 字符串形式返回。JSON 字符串的结构如下:
{
"bounded_accounts": [
{
"platform": "Apple",
"create_time": 1627893394,
"uid": 133604802,
"user_info": {
"nickname": "intl",
"gender": 0,
"icon": "http://image.png"
}
}
],
"available_platforms": [
"Garena"
],
"primary_platform": "Apple"
}
性别的可能值:0 = 未知,1 = 男性,2 = 女性。
平台账号绑定前,请使用此方法检查 available_platforms
,并将平台名称作为绑定的子渠道。
代码示例
- Unity
- Unreal Engine
// invoke function
INTLAPI.ExtendInvoke(INTLChannel.Garena, "requestPlatformBindingInfo", "");
public void OnExtendEvent(INTLExtendResult ret)
{
// callback
}
// invoke function
UINTLSDKAPI::ExtendInvoke(EINTLLoginChannel::kChannelGarena, "requestPlatformBindingInfo", "");
void INTLSDKAPIObserverImpl::OnExtendResult_Implementation(FINTLExtendResult ret)
{
// callback
}