ingameSDK
ingameSDK是数据开发组研发的一款内置浏览器,具体的使用方法接口如下:
前沿
SDK包括Android与iOS版,2个版本都覆写了浏览器的alert、confirm、prompt弹框,并提供了统一的JS接口,使用时需加载JS文件:
<script type="text/javascript" src="https://ossweb-img.qq.com/htdocs/weiguanwang/browser_adapt.js"></script>
在browser_adapt.js里暴露了全局变量customBrowserInterface的一组接口
为了避免出现白屏,加载第一个页面时会出现菊花状的进度条,微社区一般都是单页面应用
微社区自研浏览器SDK的兼容性:
Android下兼容X5浏览器、系统自带的WebView,优先使用X5浏览器,加载X5浏览器失败时就使用系统自带的WebView
使用X5浏览器时需指定activity的
android:process=":ingame_inner_webview"
,采用新进程来启动X5浏览器,不然会获取JNIEnv失败iOS下兼容UIWebView、WKWebView,iOS8.2及后续版本使用WKWebView(从iOS8开始才有WKWebView,iOS8.2之前会偶现白屏问题),其他版本使用UIWebView
覆写了浏览器的prompt弹框(传特定JSON格式的参数时不会出现prompt弹框),JS与SDK之间的交互通过prompt来实现,因此browser_adapt.js中的接口的返回值都是字符串
调用browser_adapt.js中的接口时,如果SDK中没有对应的接口,就会返回空串"",以此可以处理JS与SDK之间的兼容性
JS与SDK之间的交互通过prompt来实现的原因如下:
Android下可用WebView的
addJavascriptInterface
来暴露接口给JS,但Android4.2之前通过反射机制JS可访问任意java类的函数,存在安全漏洞iOS7之前在UIWebView的
shouldStartLoadWithRequest
里处理交互,但JS调用无法获取返回值;iOS7及后续版本的UIWebViingameew可用JavaScriptCore,JS调用能获取返回值iOS8及后续版本可以使用WKWebView,但JS调用无法获取返回值
微社区的JS调用浏览器接口时需获取返回值,考虑到安全性、兼容性以及代码的可维护性,JS与SDK之间的交互通过prompt来实现
接口对象名称customBrowserInterface
,调用示例:customBrowserInterface.closeWebview()
具体接口列表如下:
接口名 | 方法 | 描述 |
---|---|---|
浏览器版本 | getCustomUserAgent() | 腾讯视频播放器会根据navigator.userAgent来判断如何播放视频,为了不干扰视频播放,修改navigator.userAgent时只是在末尾添加了空格 + 自定义串("Android TIEM Ingame Browser/0.5"、"iOS TIEM Ingame Browser/0.5",其中0.5为版本号,会动态变化) |
浏览器版本 | getVersion() | 判断customBrowserInterface.getCustomUserAgent()的返回值中的版本号,微社区自研浏览器SDK根据这个版本号来实现各版本之间的兼容 |
是否是微社区自研浏览器 | isCustomBrowser() | 返回值:true: 是 false: 不是 |
分享到QQ空间 | sendToQQ(1, title, desc, url, imgUrl) | 第一个参数固定为1,其他参数依次为标题、描述、点击后的跳转链接、图片的url,从第二个参数开始如果不需要某个参数可置为空串"",而不是null。如果没有出现分享界面,请检查imgUrl是否以https:// 开头,iOS下的app默认不允许直接加载http资源 |
分享到QQ好友 | sendToQQ(2, title, desc, url, imgUrl) | 第一个参数固定为2,其他参数请参考"分享到QQ空间" |
分享到微信朋友圈 | sendToWeixinWithUrl(1, title, desc, url, imgUrl); | 第一个参数固定为1,其他参数请参考"分享到QQ空间" |
分享给微信好友 | sendToWeixinWithUrl(2, title, desc, url, imgUrl); | 第一个参数固定为2,其他参数请参考"分享到QQ空间" |
是否装了微信 | isPlatformInstalled(1) | 返回值:"1": 安装了"0": 没有安装 |
是否装了QQ | isPlatformInstalled(2) | 返回值:"1": 安装了 "0": 没有安装 |
登录的帐号类型 | getAccountType() | 返回值:"1": 安装了 "0": 没有安装 |
实时获取当前的网络状态 | getNetworkType() | 返回值: "没有网络"、"WIFI"、"4G"、"3G"、"2G"、"未知网络" |
当前的操作系统 | isAndroid() | 返回值:"1": Android "0": iOS |
返回游戏 | closeWebview() | - |
隐藏浏览器UI | hideUi() | 浏览器新开页面时默认会5秒(王者荣耀微社区改版前首页加载时延为4秒多,改版后为2秒多)后显示UI,在这5秒期间页面可调用此接口取消UI的展示,如果超过5秒后调用就是直接隐藏UI。这样就可以确保页面出现异常而无法调用customBrowserInterface.hideUi()时,用户可以看到浏览器的UI,就可以返回上一个页面,如果无法返回上一个页面那就直接返回游戏。为了不遮挡页面,影响操作,UI可以拖动 |
查看加密的设备信息 | getDeviceInfo(1) | 加密后的设备信息,可在后台解密 |
查看原始的设备信息 | getDeviceInfo(0) | 返回值: Android下的返回值: '{"osSystem":"", "osVersion":"", "deviceModel":"", "deviceName":"", "deviceTradeMark":"", "deviceManufacturer":"", "deviceImei":""}' iOS下的返回值: '{"osSystem":"", "osVersion":"", "deviceModel":"", "deviceIdfa":"", "deviceName":""}' 注:返回值是JSON格式的字符串 |
生成快捷方式 | addShortcut() | Android下的调用方式: customBrowserInterface.addShortcut(name, imgUrl, url);iOS下的调用方式: customBrowserInterface.addShortcut(url);注:name是快捷方式的名称,imgUrl是快捷方式的图标的url,Android下的url是快捷方式跳转的链接地址,iOS下的url是获取mobileconfig文件的链接地址。iOS下生成快捷方式是用Safari加载mobileconfig文件,根据mobileconfig文件进行安装,安装完毕就生成了快捷方式。Android下生成快捷方式不同于iOS,无需安装,但不一定会成功,部分手机禁止生成快捷方式,部分手机会被手机管家阻止,需要通过手机管家里的权限管理进行配置 |