常用工具类
1.退出弹窗
提示
- 大部分渠道都有退出弹窗,并且要求游戏使用,否则审核无法通过。
- 少部分渠道没有退出弹窗,但要求游戏有处理退出逻辑的用户提示(弹窗或Toast),否则可能影响审核。
- 如果没有继承Omni...Activity,需要拦截
接入代码示例
- Java
OmniSDKQuitOptions opts = OmniSDKQuitOptions.builder()
.isCustomExitUi(gameCustom)
.build();
OmniSDKv3.getInstance().quit(appActivity, opts, result -> {
if (result.isSuccess()) {
OmniSDKQuitResult omniSDKQuitResult = result.get();
Log.i(tag, "quit successfully " + omniSDKQuitResult);
if (omniSDKQuitResult.isCustomExitUi()) {
// 游戏自定义退出游戏的逻辑
} else {
// 使用SDK的弹出游戏弹窗 可以直接杀死进程
killProcess();
}
} else {
OmniSDKError error = result.error();
Log.e(tag, "quit error:" + error);
// 游戏方不弹出自身退出UI界面,立即执行退出游戏业务逻辑处理,比如杀掉游戏应用进程等等
killProcess();
}
});
参数描述
OmniSDKQuitOptions
参数 | 类型 | 说明 |
---|---|---|
isCustomExitUi | Boolean | 是否自定义退出游戏UI |
返回值
OmniSDKQuitResult
参数 | 类型 | 说明 |
---|---|---|
isCustomExitUi | Boolean | 是否自定义退出游戏UI |
2.打开用户中心
提示
- 部分渠道支持,便于玩家进行修改密码,实名认证,用户登出....
接入代码示例
- Java
OmniSDKv3.instance.openAccountCenter(gameActivity)
3.检查是否为模拟器
提示
- 常见模拟器都可以检测出来,除非是某些高度仿真定制。
接入代码示例
- Java
boolean isEmulator = OmniSDKv3.getInstance().checkEmulator(gameActivity);
Log.i(tag,"是否为模拟器: " + isEmulator);
返回值
true
模拟器;false
真机
4.打开系统权限设置界面
提示
- 如果用户多次拒绝权限申请,权限弹窗将不再弹出,引导用户到系统界面打开权限。
- 根据不同手机系统,跳转到系统设置的游戏权限设置页面、或系统设置的游戏详情页面(这种场景权限设置一般在其二级页面)。
接入代码示例
- Java
OmniSDKv3.getInstance().openAppPermissionSettings(gameActivity);
5.通过 Custom Tabs 机制打开网页
方法原型
信息
- 官方文档 Custom Tabs 机制
- 网页容器使用系统默认浏览器的容器,因此可以使用手机浏览器能使用的 web 技术标准。
- 可以添加 HTTP Request Headers、分享按钮等功能;如果网页需要应用数据,需要提前通过 Headers 或链接拼接的形式提供。
- 不支持 web 与 app 的动态交互功能,即通常说的 Androd-JS 交互功能。
接入示例代码
- Java
// 自定义数据组装
OmniSDKOpenBrowserOptions opts = OmniSDKOpenBrowserOptions.builder()
.url(url)
.toolbarLocation(ToolbarLocation.BOTTOM)
.showPrev(true)
.showNext(true)
.build();
OmniSDKv3.getInstance().openBrowserActivity(demoActivity, opts);
参数描述
OmniSDKOpenBrowserOptions
参数 | 类型 | 说明 |
---|---|---|
url | String | web_url 需要打开的网页链接 |
topTitle | String | 顶部标题文本 |
gameExt | String | 游戏自定义透传数据 |
closeIcon | String | res/drawable_id 24*24 PNG 图片,res/drawable 文件夹下的图片 id 名 |
toolbarColor | String | 设置容器的Toolbar 背景颜色 格式:#AARRGGBB 或 #RRGGBB |
shareParam | HashMap<String, Any> | 分享相关参数数据 |
gameHeaders | HashMap<String, Any> | Http请求时需要添加的http-headers |
toolbarLocation | ToolbarLocation(enum class) | BOTTOM :底部显示功能栏 TOP :顶部显示功能栏 NONE :不显示功能栏 |
screenOrientation | OrientationType(enum class) | FULL_SENSOR :用户设备自动感应 LANDSCAPE :强制横屏 PORTRAIT :强制竖屏 SENSOR_LANDSCAPE :横屏自动感应 SENSOR_PORTRAIT :竖屏自动感应 |
showPrev | Boolean | 是否显示后退到上一个页面功能入口 |
showNext | Boolean | 是否显示前进到下一个页面功能入口 |
showShare | Boolean | 是否显示分享功能入口 |
showRefresh | Boolean | 是否显示刷新功能入口 |
showClose | Boolean | 是否显示关闭功能入口 |
showTitle | Boolean | 是否显示网页标题Title |
6.应用商店评分引导
提示
- 应用商店评分引导,当且渠道有相应方法时有效
- 可以通过以下方法判断当前渠道是否支持
接入代码示例
- Java
OmniSDKv3.getInstance().openScoreDialog(demoActivity, result -> {
if (result.isSuccess()) {
Log.i(tag, "评分成功");
} else {
OmniSDKError error = result.error();
Log.e(tag,"评分失败:" + error);
}
});
7.反射调用
反射方法 API
SDK 接口名称 | 接口功能 | 参数/结构体/回调 |
---|---|---|
isMethodSupported(methodName: String): Boolean | 反射的方法是否被支持调用 | String |
invokeMethod(methodName: String, vararg objects: Any) | 通过反射调用渠道独有方法 | String, vararg |
接入示例代码
- Java
// 通过反射 获取商品的本地化信息 方法
// fun querySkuDetailsList(
// @NonNull skusList: List<String>,
// @NonNull skuType: SkuType,
// @NonNull callback: <Error class: unknown class>
// )
// 判断当前渠道是否支持
boolean isSupported = OmniSDKv3.getInstance().isMethodSupported(OmniConstant.invokeQuerySkuDetailsList)
if (isSupported) {
OmniSDKv3.getInstance().invokeMethod(OmniConstant.invokeQuerySkuDetailsList, skusList, SkuType.INAPP, new ResultCallback() {
@Override
public void onSuccess(@NonNull String resultJson) {
// 游戏处理回调结果
}
@Override
public void onFailure(@NonNull Pair<Integer, String> responseCode) {
// 游戏处理回调结果
}
});
}