1.0.4 • Published 4 years ago
js-ds-sdk v1.0.4
一 web端使用方法
1、引入sdk
<script src="https://res.ds.cn/open/app/js/jds-sdk.js"></script>或者
npm i js-ds-sdkimport jDsSdk from 'js-ds-sdk';2、使用
对sdk进行配置
| 参数 | 类型 | 是否必填 | 默认值 | 备注 |
|---|---|---|---|---|
| debug | boolean | 否 | false | 是否开启调试日志 |
| setting | object | 否 | 网页设置,在原生加载完后就会读取并回调到onPageSetting(String setting) |
例子
jDsSdk.config({
debug: true
});jDsSdk.config({
debug: true,
setting: {
showNavBar: true,
title: "大圣科技",
fitsStatusBar: false,
autoReolad: true,
shareWeb: {
url: 'https://www.baidu.com',
title: "baidu",
thumb: "https://www.baidu.com/img/pc_cc75653cd975aea6d4ba1f59b3697455.png",
desc: "分享测试",
channels: ['WEIXIN'],
extra: {
id: 1,
xx: "123456"
},
},
}
});网页setting参数,可以根据自己需求定义(以下为参考)
| setting参数字段 | 类型 | 是否必填 | 默认值 | 备注 |
|---|---|---|---|---|
| showNavBar | boolean | 否 | 是否显示导航 | |
| title | string | 否 | 网页标题 | |
| fitsStatusBar | boolean | 否 | 补充刘海屏 | |
| autoReload | boolean | 否 | 其他页面回来后自动刷新 | |
| backPopWebView | boolean | 否 | 返回的时候直接销毁webview,不需要处理url路由栈的路由 | |
| shareWeb | object | 否 | 分享信息,参考分享组件 | |
| shareWebWithChannel | object | 否 | 根据渠道分享配置分享信息,参考分享组件 |
方法调用
| 参数 | 说明 | 是否必填 | 默认值 |
|---|---|---|---|
| pluginMethod | 插件方法(xplugin.xmethd) | 是 | 无 |
| params | 调用参数 | 否 | 无 |
| callback | 回调方法 | 否 | 无 |
回调函数返回说明
| 参数 | 说明 | 类型 | 描述 |
|---|---|---|---|
| code | 状态 | string | 0:成功,1: IO异常,2: 无插件 3:无方法 4:json异常 5: 其他异常 |
| data | 业务数据 | 数据类型根据具体业务定义 | |
| msg | 异常信息 | string | 成功返回ok |
例子
jDsSdk.invoke('plugin.method', {
age: 10086,
name: 'gukeming'
}, function(result) {
console.log("页面调用结果", JSON.stringify(result));
});获取app版本号
jDsSdk.getAppVersion();说明:通过在原生userAgent中的增加DSApp/1.0.0来传递app版本号,如果版本号不存在就不是在app内嵌的webview中
获取app刘海高度
jDsSdk.getStatusBarHeight();说明:通过在原生userAgent中的增加StatusBarHeight/xx来传递
获取app胡子高度
jDsSdk.getBottomBarHeight();说明:通过在原生userAgent中的增加BottomBarHeight/xx来传递
获取App注入参数
app注入参数包括
| 参数 | 说明 |
|---|---|
| token | app登录token |
| userId | 用户ID |
jDsSdk.getAppParam('token');说明:必须在页面加载完成后才能获取
获取单个url参数
jDsSdk.getQueryParam('name');获取全部url全部参数
jDsSdk.getQueryParams()请求拦截
jDsSdk.setReqInterceptor(function(req) {
console.log('请求拦截', JSON.stringify(req));
return req;
});返回拦截
jDsSdk.setResInterceptor(function(res, req) {
console.log('返回拦截拦截', JSON.stringify(res), JSON.stringify(req));
alert('拦截结果' + JSON.stringify(res));
return res;
});说明: 如果返回拦截无返回值,那么将不会再继续回调到业务层
webview页面加载完成
jDsSdk.onReady(function(){
alert('jDsServiceReady');
})webview页面返回后切换到前台
jDsSdk.onResume(function(){
alert('onResume');
})原生返回键
jDsSdk.addOnBack(function(){
alert('onBack');
})android webview扩展
1、原生支持打电话
<a href="tel:18819272037">打电话</a>2、邮件支持
<a href="mailto:gukeming@ds.cn">发送邮件</a>3、文件和图片选择
<p>
<img class="img" width="100" height="100" id="previewimg">
</p>
<input class="select" type="file" accept="image/*" id="picfile" name="选择图片">
//图片选择
<script>
document.querySelector('.select').addEventListener('change', function(e){
var URL = window.URL || window.webkitURL;
document.getElementById('previewimg').src = URL.createObjectURL(this.files[0]);
});
</script>
说明:图片选择支持从拍照和相机选择,必须设置为image/*,如果不设置。将默认选择文件原生调用js方法并返回
在web中定义method方法
jDsSdk.addNativeCallback("plugin.method", function(params) {
alert("原生调用js 参数" + params);
return "js返回数据" + params;
});JSCallbackContext.callJSMethod(String method, String params, final JsValueCallback jsValueCallback)
| 数 | 说明 | 是否必填 | 默认值 |
|---|---|---|---|
| method | js名称 | 是 | 无 |
| params | 调用js参数 | 否 | 无 |
| jsValueCallback | js调用返回 | 否 | 无 |
使用例子:
callbackContext.callJSMethod("plugin.method");
callbackContext.callJSMethod("plugin.method", new JSCallbackContext.JsValueCallback() {
@Override
public void onValue(String value) {
}
});
callbackContext.callJSMethod("plugin.method", "123", new JSCallbackContext.JsValueCallback() {
@Override
public void onValue(String value) {
}
});3、android业务插件开发
日志打印
JSService.setLogLevel(JSLog.DEBUG);业务插件开发
public class DeviceInfoPlugin extends JSPlugin {
private static final String TAG = "DeviceInfoPlugin";
public static final String TEST_METHOD = "testMethod";
@Override
protected void onInitialize() {
super.onInitialize();
}
@Override
public boolean execute(String method, JSParams args, JSCallbackContext callbackContext) throws JSONException {
Log.d("JSPlugin", "method==" + method);
Log.d("JSPlugin", "args==" + args.jsonParamForkey("name"));
if(TEST_METHOD.equals(method)) {
JSONObject json = new JSONObject();
json.put("method",method);
json.put("name",args.jsonParamForkey("name"));
//返回js调用处
callbackContext.success(json);
return true;
}
return false;
}
@Override
public void onDestroy() {
super.onDestroy();
}
}JSCallbackContext 使用说明
| 方法 | 说明 | 是否必填 | 默认值 |
|---|---|---|---|
| success | 成功回调 | ||
| error | 错误或失败回调 | ||
| callJSMethod | 原生调用js并返回结果 |
插件注册
JSService.registerPlugin(String pluginName, Class<? extends JSPlugin> clazz);| 参数 | 说明 | 是否必填 | 默认值 |
|---|---|---|---|
| pluginName | 插件名称 | 是 | 无 |
| Class | 插件类 | 是 | 无 |
例子
JSService.registerPlugin("device", DeviceInfoPlugin.class);