账号
1.登录
提示
- OmniSDK 提供两种登录接入方式:
接入方式 | 优点 | 缺点 |
---|---|---|
完全由 OmniSDK 控制的默认登录 UI 界面逻辑 | 项目只调用接口与处理回调信息 | 目前只有一套定制 UI |
完全由项目自己控制的自定义登录 UI 逻辑 | UI 风格与游戏统一 | 项目需要自己定制逻辑 |
- 通过查看
OmniSDKAuthMethod
确认账号类型的数值。 OmniSDKAuthMethod.NONE
,表示使用 OmniSDK 提供的默认登录UI界面及相关账号处理逻辑。- 非
OmniSDKAuthMethod.NONE
,表示游戏自定义登录 UI 界面,通过指定账号类型进行登录,并自己处理账号逻辑、UI显示逻辑。 - 使用游客账号类型时,需要实现 账号关联 逻辑,防止用户卸载重装后数据丢失。
接入示例代码
- Java
// 构建登录请求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
参数 | 类型 | 说明 |
---|---|---|
authMethod | OmniSDKAuthMethod(enum class) | 登录方式:NONE 无账号类型,使用 SDK 提供的登录界面及逻辑GUEST 游客登录FACEBOOK Facebook 登录GOOGLE Google 登录LINE Line 登录 |
返回值
OmniSDKLoginResult
参数 | 类型 | 说明 |
---|---|---|
loginInfo | OmniSDKLoginInfo | OmniSDK 相关登录信息 |
OmniSDKLoginInfo
参数 | 类型 | 说明 |
---|---|---|
userId | String | 用户 Id |
token | String | 用户 token |
username | String | 用户账号 |
channelId | String | 渠道 Id |
authTime | String | Unix timestamp (服务端安全性验证使用) |
signature | String | 签名信息 (与 OmniSDK Server 通信使用) |
authMethod | OmniSDKAuthMethod(enum class) | 登录方式:NONE 无账号类型,使用 SDK 提供的登录界面及逻辑GUEST 游客登录FACEBOOK Facebook 登录GOOGLE Google 登录LINE Line 登录 |
state | OmniSDKAccountState(enum class) | 账号状态:NORMAL 正常 DELETING 处于删除账号冷静期 |
identityProvider | OmniSDKIdentityProvider(enum class) | 关联账号类型:NONE SDK 提供的身份验证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 中的某些字段可能会返回空值
接入代码示例
- Java
OmniSDKLoginInfo loginInfo = OmniSDKv3.getInstance().getLoginInfo();
if(null!=loginInfo){
// 获取用户信息进行玩家角色创建或登录
}
返回值
OmniSDKLoginInfo
3.用户登出
提示
- 当收到退出成功回调后, 游戏需要退出到游戏登录界面
- 登出后,getLoginInfo 将会返回 null 需要重新 login
接入代码示例
- Java
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
参数 | 类型 | 说明 |
---|---|---|
userId | String | 用户id |
4.账号被动退出
提示
- CP对接方必须处理该回调,立即退出当前游戏账号
- 在OmniSDKListener回调中处理,该回调由OmniSDK主动发起
接入代码示例
- Java
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
参数 | 类型 | 说明 |
---|---|---|
isForce | Boolean | 是否强制下线 |
5.注销账号
提示
- 注销账号,用户需要在游戏设置进行注销
- 注销完成后,有注销冷静期,该账号依然可以登录游戏
接入代码示例
- Java
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
参数 | 类型 | 说明 |
---|---|---|
enableCustomUI | Boolean | 是否使用自定义UI |
返回值
OmniSDKDeleteAccountResult
参数 | 类型 | 说明 |
---|---|---|
userId | String | 注销用户id |
6.恢复账号
提示
- 玩家必须在冷静期内才能恢复账号
- Java
接入代码示例
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
参数 | 类型 | 说明 |
---|---|---|
enableCustomUI | Boolean | 是否使用自定义UI |
返回值
OmniSDKRestoreAccountResult
参数 | 类型 | 说明 |
---|---|---|
userId | String | 用户id |
7.切换账号(选接)
提示
- 国内游戏不需要,用于海外使用login 自定义 UI情况,如Google账号切换Facebook
- 先调用接口 getSwitchAccountMode 来获取账号关联模式,根据结果决定是否开放账号切换功能入口。
接入示例代码
- Java
OmniSDKSwitchAccountOptions opts = OmniSDKSwitchAccountOptions.builder()
// 需要切换的账号平台
.idp(OmniSDKIdentityProvider.GOOGLE)
.build();
OmniSDKv3.getInstance().switchAccount(gameActivity, opts);
参数描述
OmniSDKSwitchAccountOptions
参数 | 是否必填 | 类型 | 说明 |
---|---|---|---|
identityProvider | Y | OmniSDKIdentityProvider | 关联账号类型 |
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
参数 | 类型 | 说明 |
---|---|---|
userId | String | 用户id |
8.关联账号(选接)
提示
- 国内游戏不需要,海外发行使用游客账号登录时,需要进行更安全或持久的身份验证方式,关联Facebook,Google等
- 游戏必须先调用接口 getLinkAccountMode 来获取账号关联模式,根据结果决定是否开放账号关联功能入口。
接入示例代码
- Java
OmniSDKLinkAccountOptions opts = OmniSDKLinkAccountOptions.builder()
// 需要关联的账号平台
.idp(OmniSDKIdentityProvider.GOOGLE)
.build();
OmniSDKv3.getInstance().linkAccount(gameActivity, opts);
参数描述
OmniSDKLinkAccountOptions
参数 | 是否必填 | 类型 | 说明 |
---|---|---|---|
identityProvider | Y | OmniSDKIdentityProvider | 关联账号类型 |
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);
}
}
}
...
}
返回值
OmniSDKLinkAccountResult
参数 | 类型 | 说明 |
---|---|---|
userId | String | userId |
9.渠道账号模式(选接)
提示
- 仅在自定义登录 UI 界面时使用。
- OmniSDK 为聚合类型 SDK,需要处理不同渠道对账号类型是否显示的不同要求,以保证各渠道平台的审核发布。
接入代码示例
- Java
int accountMode = OmniSDKv3.getInstance().getAccountMode(context);
返回值
字段 | 说明 |
---|---|
1 | 渠道无账号,即允许 OmniSDK 支持的所有账号类型。 |
2 | 渠道有账号且禁止其他账号显示,即只允许渠道账号显示。 |
3 | 渠道有账号但允许其他账号显示,即必须包含渠道账号的显示。 |
10.切换账号模式(选接)
提示
- 游戏在显示账号切换功能入口前先调用本接口进行判断是否可以显示。
- 注:使用 OmniSDK 提供的默认登录 UI 界面时,只需要确认是否为
0
。
接入代码示例
- Java
int switchAccountMode = OmniSDKv3.getInstance().getSwitchAccountMode(context);
返回值
字段 | 说明 |
---|---|
0 | 禁止账号切换功能,游戏关闭账号切换的功能入口。 |
1 | 可以开启账号切换功能入口,但禁止自定义切换账号UI界面,只允许渠道自身提供账号切换界面; 此时切换账号时类型参数使用 AccountType.NONE_SDK_ACCOUNT_UI 处理。 |
2 | 可以开启账号切换功能入口,支持自定义切换账号 UI 界面,但无渠道账号切换类型,允许 OmniSDK 支持的所有账号类型。 |
3 | 可以开启账号切换功能入口,支持自定义切换账号 UI 界面,但必须包含渠道账号的显示,同时可选 OmniSDK 支持的所有账号类型。 |
11.关联账号模式(选接)
提示
- 游戏在显示账号关联功能入口前先调用本接口进行判断是否可以显示。
- 注:使用 OmniSDK 提供的默认登录 UI 界面时,只需要确认是否为
0
。
接入示例代码
- Java
int linkAccountMode = OmniSDKv3.getInstance().getLinkAccountMode(context);
返回值
字段 | 说明 |
---|---|
0 | 禁止账号关联功能,游戏关闭账号关联的功能入口。 |
1 | 可以开启账号关联功能入口,支持自定义关联账号UI界面,但无渠道账号关联类型,允许 OmniSDK 支持的所有账号类型。 |
2 | 可以开启账号关联功能入口,支持自定义关联账号UI界面,但必须包含渠道账号的显示,同时可选 OmniSDK 支持的所有账号类型; |