跳到主要内容

平台账户绑定

概述

想象一下,有些手机游戏允许玩家同时在PC和手机上游戏。一个潜在的问题是:

我们如何允许Google和Apple用户在PC上玩这款游戏?

对于PC游戏,到目前为止只有Garena账户被允许在PC上玩Garena游戏。嗯……如果我们可以将Google/Apple和Garena账户结合起来,同时玩这款游戏的PC和手机版本会怎么样?

这就是它!!!这就是平台账户绑定的目的。它用于将2个不同平台的账户绑定在一起,以利用每个平台账户的优势。

原理

将账户B绑定到应用C上的账户ABind(A, B, C))意味着创建一个绑定,其中A主账户B是应用C上的次要账户。绑定发生后:

  • 如果用户使用账户B登录,我们将返回从账户A生成的access token
  • 如果用户使用账户A登录,我们将返回从账户A生成的access token

例如,Google/Apple账户是主账户,Garena账户是次要账户。如果用户使用Google/Apple登录,GOP将返回从Google/Apple账户生成的access token。如果用户使用Garena账户登录,GOP将返回从作为其主账户的Google/Apple账户生成的access token,这样我们就可以使用该access token以与手机端相同的凭据玩游戏。

当然,一个主账户可以有多个次要账户。


要成功将账户B绑定到应用C上的账户ABind(A, B, C)):

  • A必须是应用C主账户
  • B必须是应用C新账户
  • platform_id(B) != platform_id(A)
  • 不存在账户D,使得platform_id(D) == platform_id(B)且账户D是应用CA次要账户
  • 应用C已启用APP_PLATFORM_BIND
  • platform_id(B)在应用Csecondary_app_platform_bind_list列表中。
  • platform_id(A)在应用Cprimary_app_platform_bind_list列表中。

应用的主账户

  • 在该应用上具有授权/角色的账户。

应用的次要账户是:

  • 不是主账户,
  • 连接到主账户,在应用账户绑定表上有记录。

应用的新账户是:

  • 不是主账户
  • 没有连接到此应用上的任何主账户

流程

协作与流程

  1. 假设用户已登录,未使用游客账户
  2. 游戏通过MSDK调用获取平台账户绑定信息
  3. GOP返回绑定的账户和主账户可以绑定的可用平台。
  4. 游戏使用上述数据向用户显示信息,并允许用户根据返回的平台使用次要账户登录。
  5. MSDK帮助启动应用/网页进行授权。
  6. 游戏客户端将接收次要账户的token。
  7. 游戏客户端将主账户的token和次要账户的token发送到游戏服务器
  8. 游戏服务器调用GOP服务器的绑定API,并将绑定结果返回给游戏客户端。

时序图

平台账户绑定时序图

获取绑定信息

平台绑定状态

登录到非游客账户后,您可以请求用户当前的平台账户绑定状态,以获取绑定的账户和可绑定的平台(可用于显示平台选项)。

accountManager.getPlatformBindingInfo(new OnBindPlatformInfoListener() {

@Override
public void onSuccess(@NonNull List<BoundedAccount> boundedAccounts, @NonNull List<Integer> availablePlatforms) {

}

@Override
public void onFailure(@NonNull MSDKError error) {

}
});

平台绑定令牌

通过验证非游客的次要平台账户来获取平台绑定令牌。

accountManager.getPlatformBindingToken(platformType, callback);

处理平台账户绑定结果

仅在Android上,通过游戏服务器成功绑定平台账户后,您需要通知MSDK更新其本地状态。

accountManager.onBindPlatformCompleted();