账号
账号相关 API 列表
SDK 接口名称 | 接口功能 | 参数/结构体/回调 |
---|---|---|
getUserInfo(): String? | 获取用户信息 | UserInfo-JSON |
login | 用户登录 | Map<String, String> loginParams = new HashMap<>(); loginParams.put(OmniConstant.accountType, AccountType.*)); |
bindAccount | 绑定账号 | |
logout | 用户登出 | |
setAccountNotifier | 账号结果回调 | onLoginSuccess() onBindSuccess() onLogoutSuccess() onFailure() onKickedOut() |
getAccountMode(): Int | 获取当前渠道账号体系的模式 | |
getSwitchAccountMode(): Int | 获取账号切换功能模式 | |
getBindAccountMode(): Int | 获取账号绑定功能模式 |
1.获取用户信息
方法原型
@Nullable
fun getUserInfo(): String?
参数描述
字段 | 说明 | 类型 |
---|---|---|
uid | 平台 uid (废弃中,请使用 cpUid ) | |
cpUid | OmniSDK 返回给游戏的账号 ID | |
token | OmniSDK 返回给游戏的token,用于静默登录 | |
showName | 用户名,空字符串此渠道无用户名 | |
certification | 实名制及是否成年状态: -1 渠道实现防沉迷; 0 未实名制; 1 未成年; 2 已成年; 其他值:该应用及渠道无实名信息。 | |
type | 登录的账号类型:AccountType ;游客绑定社交帐号后显示为该社交帐号的类型。 | |
isRelated | 是否为游客账号 | |
verifySign | 海外无,不需要; 国内登录账号的验证 Sign 值;安全上禁止本地存储。 | |
verifyTimestamp | 海外无,不需要; 国内 Sign 值的 Unix 时间戳,单位为秒;安全上禁止本地存储。 | |
ext | 扩展参数 |
使用场景
- 请在 login 登录成功后调用,未登录成功前返回空值。
接入示例代码
String json = OmniSDK.getInstance().getUserInfo();
if (json != null) {
UserInfo userInfo = OmniUtils.parseUserInfo(json);
} else {
// empty
}
返回值
null
|| InfoUserJsonString
版本历史
- 1.0.1 增加
- 1.0.3 去掉 channelId,提供相应单独接口 OmniSDK.getChannelId
- 1.0.9 提供解析工具类 OmniUtils.parseUserInfo
2.登录
备注
- OmniSDK 提供两种登录接入方式:
接入方式 | 优点 | 缺点 |
---|---|---|
完全由 OmniSDK 控制的默认登录 UI 界面逻辑 | 项目只调用接口与处理回调信息 | 目前只有一套定制 UI |
完全由项目自己控制的自定义登录 UI 逻辑 | UI 风格与游戏统一 | 项目需要自己定制逻辑 |
- 通过查看
AccountType
确认账号类型的数值。 0
,表示使用 OmniSDK 提供的默认登录UI界面及相关账号处理逻辑。- 非
0
,表示游戏自定义登录 UI 界面,通过指定账号类型进行登录,并自己处理账号逻辑、UI显示逻辑。
方法原型
fun login(activity: Activity, @NonNull loginParam: Map<String, String>)
参数描述
字段 | 说明 | 类型 |
---|---|---|
activity | 上下文 | |
loginParam:(OmniConstant.accountType, AccountType.*.getId()) | 0:NONE_SDK_ACCOUNT_UI 无账号类型,使用 SDK 提供的登录界面及逻辑-1: CHANNEL 渠道账号;已废弃,改用 OmniSDK.getInstance().getChannelId() 获取。1: GUEST 游客登录3: FACEBOOK Facebook 登录4: GOOGLE Google 登录23: LINE Line 登录51: VK VK 登录54: NAVER Naver 登录 | String |
提示
游客账号处理:
- 接入游客账号类型时,需要实现 账号绑定 逻辑,防止用户卸载重装后数据丢失。
- 接入游客账号类型时,需要引导用户主动绑定账号,防止数据丢失,比如在充值、高级模式等场景引导。
使用场景
- SDK 初始化成功,游戏内点击登录后调用
注意事项
无论项目采用何种方式接入登录,重新初始化时必须调用一次 OmniSDK 的登录接口。
游戏调用 OmniSDK 登录 API 后,要增加重复点击
锁屏
机制:定时解除
锁屏
或在时限内收到结果回调立即解除锁屏
,防止在统计登录转化率数据时,重复点击事件被统计造成数据过低。
接入示例代码
// 构建登录请求数据Map
Map<String, String> loginParams = new HashMap<>();
loginParams.put(OmniConstant.accountType, AccountType.NONE.getId());
OmniSDK.getInstance().login(appActivity, loginParams);
静默登录说明
- 项目可以保存用户信息,但是不能以此为凭证来判断是否已登录。
- 重新初始化时必须调用一次 OmniSDK 的登录接口,必须与服务器通信验证后才算登录。
- 用户已登录并且未登出,下次登录时,如果是同一账号类型,将进行静默登录(token 有效期内)。
- 与上次登录的账号类型不同时,将是一次新登录。
- 自定义账号 UI 界面时,建议根据上次用户信息返回的账号类型(可保存),在下次进行登录时显示“上次登录账号”或直接静默登录,提供更好的用户体验。
- 自定义账号 UI 界面时,需要处理静默登录失败的逻辑,显示是登录失败,即重新弹出登录界面。
自定义登录 UI 界面
为了一次编写适配不同渠道的账号显示要求,需要通过 OmniSDK.getInstance().getAccountMode() 获取渠道的账号体系模式后,按渠道要求处理非渠道账号的显示。
账号类型获取:
- 渠道账号类型统一使用
OmniSDK.getInstance().getChannelId()
获取,每个渠道包有且仅有自己的渠道账号。 - 其他账号类型通过
AccountType
获取。
渠道账号体系的模式:分为无账号、有账号(禁止其他账号、允许其他账号)。
如游戏项目需要分发:
官方渠道、渠道a(无账号);
渠道b(有账号-禁止其他);
渠道c(有账号-允许其他),默认要有 Facebook、Google 账号类型。
最终 UI 效果:
【官方渠道】显示 Facebook、Google;
【渠道a】显示 Facebook、Google;
【渠道b】只显示渠道账号;
【渠道c】显示渠道账号、Facebook、Google。
提示
- 国内渠道通常要求只使用渠道自身账号。
- 海外发行时,如果选用账号包含游客类型,需实现账号绑定逻辑,同时增加绑定引导逻辑,防止用户数据丢失。
版本历史
- 1.5.5 新增
3.绑定账号
方法原型
fun bindAccount(activity: Activity, @NonNull bindParam: Map<String, String>)
参数描述
字段 | 说明 | 类型 |
---|---|---|
activity | 上下文 | |
bindParam:(OmniConstant.accountType, AccountType.*.getId()) | 0:无账号类型,使用 SDK 提供的登录界面及逻辑 -1:渠道账号;已废弃,改用 OmniSDK.getInstance().getChannelId() 获取。 1:游客登录 3:Facebook 登录 4:Google 登录 23:Line 登录 51:VK 登录 54:Naver 登录 | String |
使用场景
- 国内游戏不需要。
- 规则同 login 自定义 UI 章节。
- 游戏必须先调用接口 getBindAccountMode 来获取账号绑定模式,根据结果决定是否开放账号绑定功能入口。
接入示例代码
// 构建绑定账号请求数据Map
Map<String, String> bindParams = new HashMap<>();
// 按照自身对接需求设置绑定账号类型
bindParams.put(OmniConstant.accountType, String.valueOf(mBindType));
OmniSDK.getInstance().bindAccount(appActivity, bindParams);
版本历史
- 1.5.5 新增
4.用户登出
方法原型
fun logout(activity: Activity)
参数描述
字段 | 说明 | 类型 |
---|---|---|
activity | 上下文 |
接入示例代码
OmniSDK.getInstance().logout(appActivity);
版本历史
- 1.5.5 新增
5.账号结果回调
方法原型
fun setAccountNotifier(notifier: AccountNotifier)
参数描述
字段 | 说明 | 类型 |
---|---|---|
notifier | 账号相关结果回调 |
接入示例代码
OmniSDK.getInstance().setAccountNotifier(new AccountNotifier() {
@Override
public void onLoginSuccess() {
// 账号登录成功,获取账号Json数据
String userJson = OmniSDK.getInstance().getUserInfo();
DemoLogger.i(tag, "onLoginSuccess : " + userJson);
// 账号Json数据解析方式1:将其转成com.kingsoft.shiyou.omnisdk.api.entity.UserInfo 数据实体
UserInfo userInfo = OmniUtils.parseUserInfo(userJson);
}
@Override
public void onBindSuccess() {
// 账号绑定成功,CP对接方可以按照自身需求参照登录成功回调(onLoginSuccess)进行绑定后的账号数据解析
String userJson = OmniSDK.getInstance().getUserInfo();
}
@Override
public void onLogoutSuccess() {
// 账号登出成功,游戏可以开始自己的登出业务逻辑比如退出当前游戏角色账号等等
}
@Override
public void onFailure(
@NotNull Type type,
@NotNull Pair<Integer, String> sdkFailureResult,
@NonNull Pair<Integer, String> channelFailureResult
) {
// 账号相关操作失败,如有需要可以通过回调字段`type`来区分具体是哪种账号业务操作失败
// 是否是用户主动取消操作导致的失败
boolean isCancelled = (sdkFailureResult.getFirst() == OmniConstant.ResultCode.accountCancelled);
// 根据特定的账号业务类型处理失败结果
if (type == Type.LOGIN) {
// 账号登录失败,CP对接方需回调自身的登录UI界面等待用户再次触发登录操作
if (isCancelled) {
// 登录操作被主动取消
} else {
}
} else if (type == Type.BIND) {
// 账号绑定失败,CP对接方可按自身需求处理
if (isCancelled) {
// 登录操作被主动取消
} else {
}
} else if (type == Type.LOGOUT) {
// 账号登出失败,CP对接方需终止账号注销登出业务
}
}
@Override
public void onKickedOut(boolean forceLogout) {
// 账号被动退出,该回调由OmniSDK主动发起调用。CP对接方必须处理该回调,立即退出当前游戏账号。
// 注意:该回调不是CP对接方主动调用账号登出接口后的回调,主动调用账号登出接口后的回调请参照`onLogoutSuccess`和`onFailure`
if (forceLogout) {
// 强制退出账号:一般指用户无意识地被迫强制退出账号,比如防沉迷机制导致用户被迫强制退出账号。
new Thread(() -> {
appActivity.runOnUiThread(() -> {
Toast.makeText(appActivity, "被迫强制退出,应用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内部`退出账号功能入口`发起的账号退出。
}
}
});
版本历史
- 1.5.5 新增
6.获取当前渠道账号体系的模式
方法原型
fun getAccountMode(context: Context): Int
使用场景
- 仅在自定义登录 UI 界面时使用。
- OmniSDK 为聚合类型 SDK,需要处理不同渠道对账号类型是否显示的不同要求,以保证各渠道平台的审核发布。
自定义登录 UI 界面
- CP 在自定义 UI 界面及逻辑时,先调用本接口查询渠道账号体系的模式;
- 根据返回的结果来处理:账号的显示、或业务逻辑处理。
接入示例代码
int accountMode = OmniSDK.getInstance().getAccountMode(context);
返回值
字段 | 说明 |
---|---|
1 | 渠道无账号,即允许 OmniSDK 支持的所有账号类型。 |
2 | 渠道有账号且禁止其他账号显示,即只允许渠道账号显示。 |
3 | 渠道有账号但允许其他账号显示,即必须包含渠道账号的显示。 |
版本历史
- 1.0.7 新增
7.获取账号切换的模式
方法原型
fun getSwitchAccountMode(context: Context): Int
返回值
字段 | 说明 |
---|---|
0 | 禁止账号切换功能,游戏关闭账号切换的功能入口。 |
1 | 可以开启账号切换功能入口,但禁止自定义切换账号UI界面,只允许渠道自身提供账号切换界面; 此时切换账号时类型参数使用 AccountType.NONE_SDK_ACCOUNT_UI 处理。 |
2 | 可以开启账号切换功能入口,支持自定义切换账号 UI 界面,但无渠道账号切换类型,允许 OmniSDK 支持的所有账号类型。 |
3 | 可以开启账号切换功能入口,支持自定义切换账号 UI 界面,但必须包含渠道账号的显示,同时可选 OmniSDK 支持的所有账号类型。 |
使用场景
- 游戏在显示账号切换功能入口前先调用本接口进行判断是否可以显示。
- 注:使用 OmniSDK 提供的默认登录 UI 界面时,只需要确认是否为
0
。
接入示例代码
int switchAccountMode = OmniSDK.getInstance().getSwitchAccountMode(context);
版本历史
- 1.0.7 新增
8.获取账号绑定的模式
方法原型
fun getBindAccountMode(context: Context): Int
返回值
字段 | 说明 |
---|---|
0 | 禁止账号绑定功能,游戏关闭账号绑定的功能入口。 |
1 | 可以开启账号绑定功能入口,支持自定义绑定账号UI界面,但无渠道账号绑定类型,允许 OmniSDK 支持的所有账号类型。 |
2 | 可以开启账号绑定功能入口,支持自定义绑定账号UI界面,但必须包含渠道账号的显示,同时可选 OmniSDK 支持的所有账号类型; 此时渠道的类型参数使用 AccountType.CHANNEL 处理。 |
使用场景
- 游戏在显示账号绑定功能入口前先调用本接口进行判断是否可以显示。
- 注:使用 OmniSDK 提供的默认登录 UI 界面时,只需要确认是否为
0
。
接入示例代码
int bindAccountMode = OmniSDK.getInstance().getBindAccountMode(context);
版本历史
- 1.0.7 新增