如何调用扫码、拍照等移动客户端的API?
用户场景
在苍穹移动端单据的开发过程中,经常会遇到需要调用APP接口的场景,例如扫码、拍照等等。那么,苍穹对这些接口的支持程度如何?同一个接口在不同客户端的兼容性如何?对于客户需要集成到一些其他第三方的APP的情况,又该如何扩展才能调用这些接口呢?
通过本文,你可以了解到目前苍穹移动端对一些主流的移动客户端API的支持情况和调用方法。以及对于那些苍穹未集成的客户端API,如何自行扩展的方法。
支持情况
目前,苍穹集成了云之家和金蝶云App的大部分接口供移动端页面插件调用,企业微信、钉钉以及welink提供了部分接口(陆续支持),如下表:
除此之外,想要了解云之家支持的其他接口,可以查看云之家开放平台提供的API文档,苍穹大部分都已集成进来。
调用方法
这里以调用“扫一扫”和“选择图片/拍照”接口为例,提供Java插件调用的示例代码。其他接口的调用方法均可以参照这两个例子,通过 callAPPApi 指令调用,接口参数需要参阅云之家开放平台文档。
1.调用“扫一扫”
HashMap map = new HashMap(); map.put("method", "scanQRCode"); //scanQRCode 为云之家方法名 HashMap args = new HashMap(); args.put("needResult", 1); //是否需要处理,默认为0,扫描结果由云之家处理,1则直接返回扫描结果 map.put("args", args); //args 调用该云之家方法需要传递的参数 this.getView().executeClientCommand("callAPPApi", map);
2.调用“选择图片/拍照”
HashMap map = new HashMap(); map.put("method", "selectPic"); //selectPic 为云之家方法名 HashMap args = new HashMap(); args.put("type", "camera"); //类型,“camera”代表“相机”,“photo”代表“相册”,不传表示从相机、相册中选择 map.put("args", args); //args 调用该云之家方法需要传递的参数 this.getView().executeClientCommand("callAPPApi", map);
3.监听客户端回调
//如调用该App方法会有回调,则进该事件 @Override public void customEvent(CustomEventArgs e) { String eventName = e.getEventName(); String value = e.getEventArgs(); String key = e.getKey(); if(key.equals("callAppMethod")){ if(eventName.equals("scanQRCode")) { //扫码处理逻辑 } else if (eventName.equals("selectPic")) { //选择图片/拍照处理逻辑 } } }
扩展方法
除了云之家、金蝶云App、企业微信、钉钉和welink之外,如果集成到其他客户端的轻应用中,想要调用客户端API的功能,则需要通过自定义JS的方式扩展。
1.下载自定义JS模板
使用管理员登录苍穹,然后点击 系统管理 -> 登录页配置 -> 高级设置 -> 下载模板,解压后有两个文件 index.js 和 index_m.js
index.js 用于扩展web端的页面
index_m.js 用于扩展移动端页面
2.自定JS开发
打开index_m.js文件,参考以下示例代码,编写自定义app插件。
(function () { /** * 自定义app插件入口 * @param {*} loadjs 加载app需要的js资源,可选 * @param {*} releaseResource 释放根页面资源,可选 * @param callback 插件安装回调,插件生效,最后必须调用:callback({success:true}) */ window.initKDPlugin = function ({ loadjs, releaseResource }, callback) { // loadjs的第一个参数是一个地址,需要根据实际情况进行修改(重要!),用于引用第三方JS桥文件 // JS桥文件是线上地址时,可以直接作为第一个参数传递,比如“http://xxx.com/jssdk.js” // 如果是本地文件,可以上传到跟index_m.js同级的目录,再通过./jsbridge.js相对路径引用 // 如果需要引用多个JS文件,可以传递一个数组,比如['./jssdk1.js', './jssdk2.js'] loadjs('jsbridge.js', () => { window.KDPlugin = { setWebViewTitle: function (title) { // todo:调用app的接口设置导航栏标题 }, scanQRCode: function (data = {}, callback) { // todo:调用app的接口打开扫一扫 /** * 调用callback,会发送customEvent请求给后台 * 注意callback的参数格式(如下) * success是固定参数,data的值可以自定义 */ // callback({ // success: true, // data: data // }) } } callback({ success: true })//插件安装成功回调{success:false, error:'error info'} }) //如果要支持额外多个平台不支持的app,需要根据window.navigator.userAgent类型来设置最终window.KDPlugin的值 } })();
3.上传自定义JS文件
将编写好的自定义JS文件压缩后上传至刚刚打开的登录页配置页面,并点击保存即可。
如何调用扫码、拍照等移动客户端的API?
本文2024-09-23 00:41:14发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-141074.html