跳到主要内容

账号

1.登录

提示
  • OmniSDK 提供两种登录接入方式:
接入方式优点缺点
完全由 OmniSDK 控制的默认登录 UI 界面逻辑项目只调用接口与处理回调信息目前只有一套定制 UI
完全由项目自己控制的自定义登录 UI 逻辑UI 风格与游戏统一项目需要自己定制逻辑
  • 通过查看 OmniSDKAuthMethod 确认账号类型的数值。
  • OmniSDKAuthMethod.NONE,表示使用 OmniSDK 提供的默认登录UI界面及相关账号处理逻辑。
  • OmniSDKAuthMethod.NONE,表示游戏自定义登录 UI 界面,通过指定账号类型进行登录,并自己处理账号逻辑、UI显示逻辑。
  • 使用游客账号类型时,需要实现 账号关联 逻辑,防止用户卸载重装后数据丢失。

接入示例代码

// 构建登录请求opts
OmniSDKLoginOptions opts = OmniSDKLoginOptions.builder()
.authMethod(OmniSDKAuthMethod.NONE)
.build();
OmniSDKv3.getInstance().login(appActivity, opts);
API 回调结果监听
new OmniSDKListener() {
....
@Override
public void onLogin(@NonNull OmniSDKResult<OmniSDKLoginResult> result) {
if (result.isSuccess()) {
// loging success
OmniSDKLoginInfo info = result.get().getLoginInfo();
// CP 效验用户信息的代码
} else {
OmniSDKError error = result.error();
if (error.getCode() == OmniSDKErrorCode.USER_CANCELLED.getValue()) {
// login cancel
} else {
// login fail
Log.i(TAG, "onLogin: "+error.toString())
}
}
}
...
}

参数描述

OmniSDKLoginOptions
参数类型说明
authMethodOmniSDKAuthMethod(enum class)登录方式:
NONE无账号类型,使用 SDK 提供的登录界面及逻辑
GUEST游客登录
FACEBOOKFacebook 登录
GOOGLEGoogle 登录
LINE Line 登录

返回值

OmniSDKLoginResult

参数类型说明
loginInfoOmniSDKLoginInfoOmniSDK 相关登录信息

OmniSDKLoginInfo

参数类型说明
userIdString用户 Id
tokenString用户 token
usernameString用户账号
channelIdString渠道 Id
authTimeStringUnix timestamp (服务端安全性验证使用)
signatureString签名信息 (与 OmniSDK Server 通信使用)
authMethodOmniSDKAuthMethod(enum class)登录方式:
NONE无账号类型,使用 SDK 提供的登录界面及逻辑
GUEST游客登录
FACEBOOKFacebook 登录
GOOGLEGoogle 登录
LINE Line 登录
stateOmniSDKAccountState(enum class)账号状态:
NORMAL 正常
DELETING 处于删除账号冷静期
identityProviderOmniSDKIdentityProvider(enum class)关联账号类型:
NONESDK 提供的身份验证
FACEBOOK关联Facebook 登录
GOOGLE关联Google 登录
LINE关联Line 登录

自定义登录 UI 界面

提示
  • 国内渠道通常要求只使用渠道自身账号
  • 海外发行时,如果选用账号包含游客类型,需实现 账号关联 逻辑,同时增加关联引导逻辑,防止用户数据丢失。
  • 为了一次编写适配不同渠道的账号显示要求,需要通过 getAccountMode 获取渠道的账号体系模式后,按渠道要求处理非渠道账号的显示。

渠道账号体系的模式:分为无账号、有账号(禁止其他账号、允许其他账号)。

如游戏项目需要分发:

官方渠道、渠道a(无账号);

渠道b(有账号-禁止其他);

渠道c(有账号-允许其他),默认要有 Facebook、Google 账号类型。

最终 UI 效果:

【官方渠道】显示 Facebook、Google;

【渠道a】显示 Facebook、Google;

【渠道b】只显示渠道账号;

【渠道c】显示渠道账号、Facebook、Google。

2.获取用户信息

提示
  • 调用此方法必须在用户登录成功后
  • 登录失败时,此方法将返回 null
  • 由于不同的分发渠道或平台,OmniSDKLoginInfo 中的某些字段可能会返回空值

接入代码示例

OmniSDKLoginInfo loginInfo =  OmniSDKv3.getInstance().getLoginInfo();
if(null!=loginInfo){
// 获取用户信息进行玩家角色创建或登录
}

返回值

OmniSDKLoginInfo

3.用户登出

提示
  • 当收到退出成功回调后, 游戏需要退出到游戏登录界面
  • 登出后,getLoginInfo 将会返回 null 需要重新 login

接入代码示例

OmniSDKv3.getInstance().logout(gameActivity);
API 回调结果监听
new OmniSDKListener() {
....
@Override
public void onLogout(@NonNull OmniSDKResult<OmniSDKLogoutResult> result) {
if (result.isSuccess()) {
OmniSDKLogoutResult logoutResult = result.get();
Log.i(tag, "onLogoutSuccess : " + logoutResult);
callback.onLogoutSucceeded();
} else {
OmniSDKError error = result.error();
if (error.getCode() == OmniSDKErrorCode.USER_CANCELLED.getValue()) {
callback.onCancelled();
} else {
callback.onFailed(error);
}
}
}
...
}

返回值

OmniSDKLogoutResult

参数类型说明
userIdString用户id

4.账号被动退出

提示
  • CP对接方必须处理该回调,立即退出当前游戏账号
  • 在OmniSDKListener回调中处理,该回调由OmniSDK主动发起

接入代码示例

new OmniSDKListener() {
...
@Override
public void onKickedOut(@NonNull OmniSDKResult<OmniSDKKickedOutResult> result) {
OmniSDKKickedOutResult kickedOutResult = result . get ();
Log.e(tag, "onKickedOut(...) called, forceLogout = " + kickedOutResult.isForce());
if (kickedOutResult.isForce()) {
// 强制退出账号:一般指用户无意识地被迫强制退出账号,比如防沉迷机制导致用户被迫强制退出账号。
new Thread (() -> {
activity.runOnUiThread(() -> {
Toast.makeText(activity, "被迫强制退出,应用3秒后关闭", Toast.LENGTH_SHORT).show();
});
try {
// 模拟账号被强制退出前的业务处理(游戏对接方应该有自身的实现逻辑处理)
Thread.sleep(3000);
android.os.Process.killProcess(android.os.Process.myPid());
} catch (Throwable e) {
e.printStackTrace();
}
}).start();
} else {
// 非强制退出账号:一般指用户有意识地主动触发SDK内部`退出账号功能入口`发起的账号退出。
callback.onLogoutSucceeded();
}
} else {
OmniSDKError error = result . error ();
Log.e(tag, "OnKickedOut Failed: " + error);
callback.onFailed(error);
}
...
}

返回值

OmniSDKKickedOutResult

参数类型说明
isForceBoolean是否强制下线

5.注销账号

提示
  • 注销账号,用户需要在游戏设置进行注销
  • 注销完成后,有注销冷静期,该账号依然可以登录游戏

接入代码示例

OmniSDKDeleteAccountOptions opts = OmniSDKDeleteAccountOptions.builder().enableCustomUI(true).build()
OmniSDKv3.instance.deleteAccount(appActivity, opts)

回调监听

new OmniSDKListener() {
...
@Override
public void onDeleteAccount(@NonNull OmniSDKResult<OmniSDKDeleteAccountResult> result) {
if (result.isSuccess()) {
OmniSDKDeleteAccountResult deleteAccountResult = result.get();
Log.i(tag, "onDeleteAccount Success : " + deleteAccountResult);
callback.onDeleteSucceeded();
} else {
OmniSDKError error = result.error();
Log.e(tag, "onDeleteAccount Failed: " + error);
callback.onFailed(error);
}
}
...
}

参数描述

OmniSDKDeleteAccountOptions

参数类型说明
enableCustomUIBoolean是否使用自定义UI

返回值

OmniSDKDeleteAccountResult

参数类型说明
userIdString注销用户id

6.恢复账号

提示
  • 玩家必须在冷静期内才能恢复账号

接入代码示例

OmniSDKRestoreAccountOptions opts = OmniSDKRestoreAccountOptions.builder().enableCustomUI(true).build();
OmniSDKv3.instance.restoreAccount(appActivity, opts);
API 回调结果监听
new OmniSDKListener() {
...
@Override
public void onRestoreAccount(@NonNull OmniSDKResult<OmniSDKRestoreAccountResult> result) {
if (result.isSuccess()) {
OmniSDKRestoreAccountResult restoreAccountResult = result.get();
Log.i(tag, "OnRestoreAccount Success : " + restoreAccountResult);
callback.onRestoreSucceeded(Objects.requireNonNull(OmniSDKv3.getInstance().getLoginInfo()));
} else {
OmniSDKError error = result.error();
Log.e(tag, "OnRestoreAccount Failed: " + error.getMessage());
callback.onFailed(error);
}
}
...
}

参数描述

OmniSDKRestoreAccountOptions

参数类型说明
enableCustomUIBoolean是否使用自定义UI

返回值

OmniSDKRestoreAccountResult

参数类型说明
userIdString用户id

7.切换账号(选接)

提示
  • 国内游戏不需要,用于海外使用login 自定义 UI情况,如Google账号切换Facebook
  • 先调用接口 getSwitchAccountMode 来获取账号关联模式,根据结果决定是否开放账号切换功能入口。

接入示例代码

OmniSDKSwitchAccountOptions opts = OmniSDKSwitchAccountOptions.builder()
// 需要切换的账号平台
.idp(OmniSDKIdentityProvider.GOOGLE)
.build();
OmniSDKv3.getInstance().switchAccount(gameActivity, opts);

参数描述

OmniSDKSwitchAccountOptions

参数是否必填类型说明
identityProviderYOmniSDKIdentityProvider关联账号类型
API 回调结果监听
new OmniSDKListener() {
....
@Override
public void onSwitchAccount(@NonNull OmniSDKResult<OmniSDKSwitchAccountResult> result) {
if (result.isSuccess()) {
OmniSDKSwitchAccountResult switchAccountResult = result.get();
Log.i(tag, "onSwitchSuccess : " + switchAccountResult);
callback.onSwitchSucceeded(Objects.requireNonNull(OmniSDKv3.getInstance().getLoginInfo()));
} else {
OmniSDKError error = result.error();
if (error.getCode() == OmniSDKErrorCode.USER_CANCELLED.getValue()) {
callback.onCancelled();
} else {
callback.onFailed(error);
}
}
}
...
}

返回值

OmniSDKSwitchAccountResult

参数类型说明
userIdString用户id
提示
  • 国内游戏不需要,海外发行使用游客账号登录时,需要进行更安全或持久的身份验证方式,关联Facebook,Google等
  • 游戏必须先调用接口 getLinkAccountMode 来获取账号关联模式,根据结果决定是否开放账号关联功能入口。

接入示例代码

OmniSDKLinkAccountOptions opts = OmniSDKLinkAccountOptions.builder()
// 需要关联的账号平台
.idp(OmniSDKIdentityProvider.GOOGLE)
.build();
OmniSDKv3.getInstance().linkAccount(gameActivity, opts);

参数描述

参数是否必填类型说明
identityProviderYOmniSDKIdentityProvider关联账号类型
API 回调结果监听
new OmniSDKListener() {
....
@Override
public void onLinkAccount(@NonNull OmniSDKResult<OmniSDKLinkAccountResult> result) {
if (result.isSuccess()) {
OmniSDKLinkAccountResult linkAccountResult = result.get();
Log.i(tag, "onBindSuccess : " + linkAccountResult);
callback.onBindSucceeded(Objects.requireNonNull(OmniSDKv3.getInstance().getLoginInfo()));
} else {
OmniSDKError error = result.error();
if (error.getCode() == OmniSDKErrorCode.USER_CANCELLED.getValue()) {
callback.onCancelled();
} else {
callback.onFailed(error);
}
}
}
...
}

返回值

参数类型说明
userIdStringuserId

9.渠道账号模式(选接)

提示
  • 仅在自定义登录 UI 界面时使用。
  • OmniSDK 为聚合类型 SDK,需要处理不同渠道对账号类型是否显示的不同要求,以保证各渠道平台的审核发布。

接入代码示例

int accountMode = OmniSDKv3.getInstance().getAccountMode(context);

返回值

字段说明
1渠道无账号,即允许 OmniSDK 支持的所有账号类型。
2渠道有账号且禁止其他账号显示,即只允许渠道账号显示。
3渠道有账号但允许其他账号显示,即必须包含渠道账号的显示。

10.切换账号模式(选接)

提示
  • 游戏在显示账号切换功能入口前先调用本接口进行判断是否可以显示。
  • 注:使用 OmniSDK 提供的默认登录 UI 界面时,只需要确认是否为 0

接入代码示例

int switchAccountMode = OmniSDKv3.getInstance().getSwitchAccountMode(context); 

返回值

字段说明
0禁止账号切换功能,游戏关闭账号切换的功能入口。
1可以开启账号切换功能入口,但禁止自定义切换账号UI界面,只允许渠道自身提供账号切换界面;
此时切换账号时类型参数使用 AccountType.NONE_SDK_ACCOUNT_UI 处理。
2可以开启账号切换功能入口,支持自定义切换账号 UI 界面,但无渠道账号切换类型,允许 OmniSDK 支持的所有账号类型。
3可以开启账号切换功能入口,支持自定义切换账号 UI 界面,但必须包含渠道账号的显示,同时可选 OmniSDK 支持的所有账号类型。
提示
  • 游戏在显示账号关联功能入口前先调用本接口进行判断是否可以显示。
  • 注:使用 OmniSDK 提供的默认登录 UI 界面时,只需要确认是否为 0

接入示例代码

int linkAccountMode = OmniSDKv3.getInstance().getLinkAccountMode(context); 

返回值

字段说明
0禁止账号关联功能,游戏关闭账号关联的功能入口。
1可以开启账号关联功能入口,支持自定义关联账号UI界面,但无渠道账号关联类型,允许 OmniSDK 支持的所有账号类型。
2可以开启账号关联功能入口,支持自定义关联账号UI界面,但必须包含渠道账号的显示,同时可选 OmniSDK 支持的所有账号类型;