我们公司在钉钉基础上开发移动门户,目前个别产品已经有原生的APP,想通过钉钉微应用打开对应系统的APP,目前遇到如下问题:
1、在微应用界面直接使用a标签打开APP的Url_Scheme,经测试:第三方的APP在IOS及Android系统均不能打开,如果Url_Scheme是钉钉的地址,就可以打开
2、后来查看,钉钉的js库中有专门打开APP的方法dd.device.launcher.launchApp,但该方法在IOS系统和Android系统中调用方式不一样,IOS系统中是使用Url_Scheme的方式打开,可以传递参数过去,在Android系统中是以包名方式打开,不可以传递参数过去。
问:在Android系统中如何才能打开第三方APP及传递参数过去?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Android系统中通过钉钉微应用打开第三方APP并传递参数,可以采取以下步骤:
配置URL Scheme: 确保第三方APP已经正确设置了URL Scheme。URL Scheme是一种协议,允许从一个APP唤起另一个APP。在第三方APP的AndroidManifest.xml文件中,需要为APP定义一个或多个Intent Filter来捕获特定的URL Scheme请求。
使用钉钉JSAPI: 利用钉钉提供的JSAPI dd.device.launcher.launchApp
来启动第三方APP。虽然直接通过该方法在Android上不支持参数传递,但可以通过间接方式实现参数传递。
间接参数传递策略:
策略一:通过中间页面:创建一个中间页面,该页面负责接收来自微应用的参数,并构造一个包含参数的URL Scheme链接。当用户点击时,这个链接将被用来尝试唤起第三方APP。如果APP成功被唤起,它应能解析URL中的参数。
策略二:利用本地存储:在微应用内,先通过JavaScript将参数保存至本地(如SharedPreferences或IndexedDB),然后调用launchApp
方法。同时,在第三方APP端,设计逻辑使其在启动后检查是否有来自微应用的参数存储,并据此执行相应操作。
实现示例:
// 假设已获取到参数data
localStorage.setItem('appParams', JSON.stringify(data)); // 保存参数到本地存储
dd.device.launcher.launchApp({
pkgName: 'com.example.thirdpartyapp', // 第三方APP的包名
});
String params = getFromLocalStorage("appParams"); // 实现此方法以从本地存储读取参数
if (params != null) {
// 解析并处理参数
JSONObject jsonData = new JSONObject(params);
// 根据参数执行业务逻辑
}
注意事项:
通过上述方案,您可以在Android系统中通过钉钉微应用不仅成功打开第三方APP,还能有效地传递参数。