跳到主要内容

常用工具类

1.退出弹窗

提示
  • 大部分渠道都有退出弹窗,并且要求游戏使用,否则审核无法通过。
  • 少部分渠道没有退出弹窗,但要求游戏有处理退出逻辑的用户提示(弹窗或Toast),否则可能影响审核。
  • 如果没有继承Omni...Activity,需要拦截

接入代码示例

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

参数类型说明
isCustomExitUiBoolean是否自定义退出游戏UI

返回值

OmniSDKQuitResult

参数类型说明
isCustomExitUiBoolean是否自定义退出游戏UI

2.打开用户中心

提示
  • 部分渠道支持,便于玩家进行修改密码,实名认证,用户登出....

接入代码示例

OmniSDKv3.instance.openAccountCenter(gameActivity)

3.检查是否为模拟器

提示
  • 常见模拟器都可以检测出来,除非是某些高度仿真定制。

接入代码示例

boolean isEmulator = OmniSDKv3.getInstance().checkEmulator(gameActivity);
Log.i(tag,"是否为模拟器: " + isEmulator);

返回值

true 模拟器;false 真机

4.打开系统权限设置界面

提示
  • 如果用户多次拒绝权限申请,权限弹窗将不再弹出,引导用户到系统界面打开权限。
  • 根据不同手机系统,跳转到系统设置的游戏权限设置页面、或系统设置的游戏详情页面(这种场景权限设置一般在其二级页面)。

接入代码示例

OmniSDKv3.getInstance().openAppPermissionSettings(gameActivity);

5.通过 Custom Tabs 机制打开网页

方法原型

信息
  • 官方文档 Custom Tabs 机制
  • 网页容器使用系统默认浏览器的容器,因此可以使用手机浏览器能使用的 web 技术标准。
  • 可以添加 HTTP Request Headers、分享按钮等功能;如果网页需要应用数据,需要提前通过 Headers 或链接拼接的形式提供。
  • 不支持 web 与 app 的动态交互功能,即通常说的 Androd-JS 交互功能。

接入示例代码

// 自定义数据组装
OmniSDKOpenBrowserOptions opts = OmniSDKOpenBrowserOptions.builder()
.url(url)
.toolbarLocation(ToolbarLocation.BOTTOM)
.showPrev(true)
.showNext(true)
.build();
OmniSDKv3.getInstance().openBrowserActivity(demoActivity, opts);

参数描述

OmniSDKOpenBrowserOptions

参数类型说明
urlStringweb_url 需要打开的网页链接
topTitleString顶部标题文本
gameExtString游戏自定义透传数据
closeIconStringres/drawable_id 24*24 PNG 图片,res/drawable 文件夹下的图片 id 名
toolbarColorString设置容器的Toolbar 背景颜色 格式:#AARRGGBB 或 #RRGGBB
shareParamHashMap<String, Any>分享相关参数数据
gameHeadersHashMap<String, Any>Http请求时需要添加的http-headers
toolbarLocationToolbarLocation(enum class)BOTTOM:底部显示功能栏 TOP:顶部显示功能栏 NONE:不显示功能栏
screenOrientationOrientationType(enum class)FULL_SENSOR:用户设备自动感应 LANDSCAPE:强制横屏 PORTRAIT:强制竖屏 SENSOR_LANDSCAPE:横屏自动感应 SENSOR_PORTRAIT:竖屏自动感应
showPrevBoolean是否显示后退到上一个页面功能入口
showNextBoolean是否显示前进到下一个页面功能入口
showShareBoolean是否显示分享功能入口
showRefreshBoolean是否显示刷新功能入口
showCloseBoolean是否显示关闭功能入口
showTitleBoolean是否显示网页标题Title

6.应用商店评分引导

提示
  • 应用商店评分引导,当且渠道有相应方法时有效
  • 可以通过以下方法判断当前渠道是否支持

接入代码示例

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

接入示例代码

// 通过反射 获取商品的本地化信息 方法 
// 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) {
// 游戏处理回调结果
}
});
}