跳到主要内容

其他常用功能

API 列表

SDK 接口名称接口功能备注
checkIsEmulator检查是否为模拟器
getAppId获取 OmniSDK AppId
getChannelId获取 APK 包的渠道 ID
getChannelName获取 APK 包的渠道名称
getCpsName获取 APK 包的 cps 名称
getPermissionGrantedStatus是否拥有某个权限
getSDKVersion获取 OmniSDK Version
onExit退出弹窗逻辑
openApplicationDetailsSettings打开系统权限设置界面
openBrowserActivity通过 Custom Tabs 机制 打开网页
openUserCenter打开渠道的账号个人中心页面【已废弃】
registerPermissionsCallback权限申请结果回调
requestPermissions申请权限
showScoreDialog
checkCanRequestPermission【已废弃】
hasPermission【已废弃】
registerRequestPermissions【已废弃】

1.检查是否为模拟器

方法原型

fun checkIsEmulator(
activity: Activity,
callback: EmulatorCallback?,
suspectNum: Int
): Boolean

接口说明

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

请求参数

字段说明类型
suspectNum检查的疑似点个数:最小值 3,区间 3~7 (7+一维 n),推荐3
callback设备信息回调,可以为 null

接入示例代码

boolean isEmulator = OmniSDK.getInstance().checkIsEmulator(context, null, 3); 

返回值

true 模拟器;false 真机

版本历史

  • 1.0.8 上线
  • 1.1.0 修复已知问题

2.获取 OmniSDK AppId

方法原型

fun getAppId(): String

接入示例代码

String appId = OmniSDK.getInstance().getAppId(); 

版本历史

  • 1.0.3

3.获取 APK 包的渠道 ID

方法原型

fun getChannelId(): String

接入示例代码

String channelId = OmniSDK.getInstance().getChannelId(); 

版本历史

  • 1.0.3

4.获取 APK 包的渠道名称

方法原型

fun getChannelName(): String

接入示例代码

String channelName = OmniSDK.getInstance().getChannelName(); 

版本历史

  • 1.0.3

5.获取 APK 包的 cps 名称

方法原型

fun getCpsName(context: Context): String

接口说明

  • 使用本方法,APK 包必须使用 OmniSDK GUI 工具提供的 CPS 工具,写入 CPS 信息,否则无效。

接入示例代码

String cpsName = OmniSDK.getInstance().getCpsName(context);

返回值

返回 APK 包的 cps 标签名;如果此 APK 包不是 cps 包则返回渠道名

版本历史

  • 1.0.8

6.获取 OmniSDK Version

方法原型

fun fun getSDKVersion(): String

版本历史

  • 1.5.5

7.退出弹窗

方法原型

@UiThread
fun onExit(
activity: Activity,
callback: ExitCallback,
hasGameCustomExitDialog: Boolean = false
)

接口说明

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

使用场景

  • 游戏界面的退出游戏按钮
  • 系统的 Back 键:(v3 如果继承 OmniSDK...Activity 则已注册好)

弹窗逻辑描述

  1. 游戏调用 onExit 时,需要传入参数 hasGameCustomExitDialog,确认是否接管少部分无退出弹窗渠道的退出弹窗逻辑。
  2. OmniSDK 会综合渠道逻辑及游戏传入参数 hasGameCustomExitDialog,通过 ExitCallback 的返回值 showGameExitDialog,告诉游戏是否需要弹出游戏的退出弹窗或直接执行退出逻辑。

弹窗逻辑处理

  1. hasGameCustomExitDialogtrue,表示游戏接管少部分无退出弹窗的渠道的后续退出逻辑。
  2. hasGameCustomExitDialogfalse,表示这部分无退出弹窗的渠道,使用OmniSDK 的退出弹窗 UI。
  3. ExitCallback 的返回值 canShowGameExitDialogtrue,表示游戏弹出自己的退出弹窗 UI,并处理退出逻辑。
  4. ExitCallback 的返回值 canShowGameExitDialogfalse,表示游戏必须直接处理退出逻辑,即保存数据、结束进度。

请求参数

字段说明类型
activity上下文
hasGameCustomExitDialog游戏是否有自定义退出逻辑
callback退出回调

接入示例代码

OmniSDK.getInstance().onExit(activity, new ExitCallback() {
@Override
public void onExit() {
// 游戏处理回调结果
}
}, false);

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

方法原型

fun openApplicationDetailsSettings(context: Context)

接口说明

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

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

方法原型

fun openBrowserActivity(
activity: Activity,
@NonNull url: String,
@NonNull jsonParams: String
)
信息

Chrome Custom Tabs 机制简述

  1. 网页容器使用系统默认浏览器的容器,因此可以使用手机浏览器能使用的 web 技术标准。
  2. 通过此打开网页,游戏进程不会被系统杀掉
  3. 可以添加 HTTP Request Headers、分享按钮等功能;如果网页需要应用数据,需要提前通过 Headers 或链接拼接的形式提供。
  4. 不支持 web 与 app 的动态交互功能,即通常说的 Androd-JS 交互功能。

FAQ

问:通过本接口打开网页,游戏进程会不会被系统杀掉?

答:通过此打开网页,游戏进程不会被系统杀掉

  1. Custom Tabs 机制并不是跳出游戏栈去打开系统默认浏览器,而"拿"系统默认浏览器的 Web-Activity 当成游戏的网页容器,将其加载到游戏栈上。
  2. 其与在游戏内打开一个独立 Activity 页面后的效果一致,即引擎生命周期 onPause;关闭网页 onResume 恢复引擎。
  3. 此时游戏还在桌面前台,并不会因为系统回收内存而被杀掉游戏进程

请求参数

字段说明类型
activity上下文 no support application-context
urlweb-url
jsonParams自定义功能

browser 数据结构

字段类型功能描述
web_url``String网页链接需要打开的网页链接
show_shareBoolean分享按钮是否通过SDK提供的分享接口进行分享;Custom Tabs 有默认的系统分享按钮
share_paramShare-Json分享数据Social.share 的 shareJson 数据结构及机制
game_headersJSON,key-value 事件体add HTTP Request Headers添加一些 Headers
custom_tabs_configJSONcustom tabs 容器可自定义功能查看 #custom_tabs_config 数据结构

custom_tabs_config 数据结构

  1. custom tabs 容器可自定义的功能;
  2. 系统默认浏览器的版本支持时支持,在某些低版本手机里可能无效果。
字段类型功能描述
show_titleBoolean网页标题是否显示网页标题:h5-title
close_iconres/drawable_id自定义关闭按钮 icon24*24 PNG 图片,res/drawable 文件夹下的图片 id 名
toolbar_color颜色值设置容器的Toolbar 背景颜色格式:#AARRGGBB 或 #RRGGBB

jsonParams 示例

{
"show_share": true,
"share_param": {
"platform": "facebook,system",
"share_type": 0,
"image_type": 0,
"image_uri": 0,
"title": "OmniShare",
"content": "content",
"url": "https://developers.facebook.com/"
},
"game_headers": {
"h5": true,
"appid": 198707,
"platform": "android",
"heg": 175.55
},
"custom_tabs_config": {
"show_title": true,
"close_icon": "icon drawable_id",
"toolbar_color": "#AARRGGBB 或 #RRGGBB"
}
}

接入示例代码

// 组装自定义参数
BrowserParams browserParams = new BrowserParams(true, 0, false, false, false, false, false, 0, null, "title", null, "");

// 调用接口
OmniSDK.getInstance().openBrowserActivity(context, url, OmniUtils.toJson(browserParams));

版本历史

  • 1.1.0 jsonParams 支持自定义功能
  • 1.5.5 走 Chrome Custom Tabs(即系统浏览器)的应用内置方式启动

10.应用商店评分引导

方法原型

@UiThread
fun showScoreDialog(activity: Activity, callback: ResponseCallback)

接口说明

  • 应用商店评分引导,当且渠道有相应方法时有效
  • 需要在UI线程调用
  • 可以通过以下方法判断当前渠道是否支持
  boolean isSupported = OmniSDK.getInstance().isMethodSupported("showScoreDialog")

请求参数

字段说明类型
activity上下文
callback退出回调

接入示例代码

// 判断渠道是否支持渠道商店的游戏应用评分
if (OmniSDK.getInstance().isMethodSupported("openScoreDialog")) {
OmniSDK.getInstance().showScoreDialog(demoActivity, new ResponseCallback() {
@Override
public void onSuccess() {

}

@Override
public void onFailure(Pair<Integer, String> responseCode) {

}
});
} else {
// 当前渠道没有评分引导弹窗
}