用 UrlSchemes 实现调用应用并传参
一、UrlSchemes 是什么
UrlScheme 是系统提供的一种跳转协议,它可以由应用程序注册,然后其他程序通过UrlSchemes 来调用该应用程序,就如同打开一个网站地址。
通过 UrlSchemes 我们可以在应用内或使用浏览器打开指定应用并传参。
UrlScheme 目前已经被iOS、Android、windows、OS X等系统支持。
1. UrlSchemes 单词解释
- URL:如
https://www.baidu.com
就是个 URL,我们也叫它链接或网址; - Schemes:表示的是一个 URL 中的初始的位置,及协议,如
https://www.baidu.com
这个网址的 Schemes 是https
。
2. UrlSchemes 应用现状
- 不是每个应用都支持UrlSchemes ,不是所有功能页都可以通过UrlSchemes 打开;你开发时没做这块的配置肯定就没有相关功能的。
- UrlSchemes没有唯一限制,可能存在重复的情况;所以不用使用UrlSchemes传递敏感信息。
- UrlSchemes没有统一标准,非常难猜;通常能有在相关应用的开发网站上才能找到,或通过口口相传。
- UrlSchemes是复数,因为单个应用支持多个UrlSchemes规则。
协议格式:
以打开百度地图导航为例
baidumap://map/direction?origin=&destination=
baidumap
代表scheme的协议名称map
代表hostdirection
代表pathorigin=...
代表参数
二、UrlSchemes 能做什么
实际用例:
app中对一个店铺进行了位置采集,点击这个店铺的导航按键时,我们就可以使用高德或百度地图的UrlScheme打开地图应用并导航。
//打开百度地图导航 UrlScheme ='baidumap://map/direction?origin=&destination='
百度api文档 - 点击跳转
公司开发的两个应用,从一个应用中启动另一个应用的某个功能,并且实现用户免登录。
使用UrlScheme 方式打开应用并传递操作参数和用户token。
获取操作参数和用户token,根据操作参数打开对应功能页面。使用离线消息推送的时候,点击消息只能打开应用,没有办法自定义后续逻辑,如:打开应用后跳转到对应资讯的详情页面。
这个时候就需要使用配置点击消息跳转到指定的url,我们将url页面上配置一个跳转UrlScheme的动作。
如:baidumap://map/direction?origin=&destination=...
;
就可以实现点击消息打开百度地图并按照传递的参数进如导航页面。
三、UrlSchemes 开发
以下,将已使用DCloud公司的uni-app应用+HBuilder X为例,对UrlScheme 的使用进行详细讲解。
其他原生开发方式整体思路雷同。
1、注册UrlSchemes
配置UrlSchemes 协议
在HBuilder X 中打开项目的manifest.json文件,在“App常用其他设置”中分别配置Android和iOS系统的UrlScheme。
- 建议两个平台的UrlScheme值统一。
- 配置完成后需要打包才能生效,其他应用就可以通过UrlScheme值唤醒我们的应用了。
获取UrlSchemes 参数
通常,只唤醒应用是不够的,还唤醒后还应当有对应的操作。
这个时候就需要我们在App.vue的onShow事件中添加获取厂商和相应处理逻辑代码。
//获取第三方程序调用时传递给程序的参数
let args = plus.runtime.arguments;
if (args) {// 处理args参数的逻辑代码,如直达到某新页面等
}
官方文档:iOS平台设置UrlSchemes - 点击跳转
官方文档:Android平台设置UrlSchemes - 点击跳转
2、访问UrlSchemes
在H5+环境下调用其他应用程序:
//打开第应用信息
let appInf = {pname: 'com.xxx.xx', //仅Android,第三方程序包名extra: {'do':'showinfo','id':'500120'}, //仅Android,参数json格式action: 'xxx://do/showinfo?id=500120' //UrlScheme 地址
};//监测待打开应用是否安装
if (plus.runtime.isApplicationExist(appInf)) {//调用第三方程序plus.runtime.launchApplication(appInf, function(e) {plus.nativeUI.alert('打开某某应用失败!提示信息:'+e.message, function(){}, 'nativeUI', 'OK');});
} else {plus.nativeUI.confirm('检测到您未安装某某应用,是否去下载安装?', function(e){//使用第三方应用打开下载页面网址if (e.index == 0)plus.runtime.openURL('在此填入某某应用的发行页面地址', function(e) {plus.nativeUI.toast(e.message); //打开某某应用下载页面失败});},{"buttons":["下载","取消"]});
}
官方文档:调用第三方程序 - 点击跳转
3、 调试UrlSchemes
随便搜索一个在线二维码生成工具,将访问UrlSchemes的值转换为二维码。
- iOS设备使用自带相机即可扫码。
- Android设备使用自带浏览器中的扫码。
现在扫码下方二维码试试效果:(二维码内容:weixin://
)
四、常见UrlSchemes 整理
序号 | 应用名称 | iOS UrlScheme | Android UrlScheme | 功能 |
---|---|---|---|---|
1 | 微信 | weixin:// | weixin:// | |
2 | 百度地图 | baidumap:// | baidumap:// | 搜索、导航等 |
持续累加中…
用 UrlSchemes 实现调用应用并传参相关推荐
- xsl调用java方法传参_Java中的XSL转换:一种简单的方法
xsl调用java方法传参 XSL转换 (XSLT)是将一个XML文档转换为另一个XML文档的强大机制. 但是,在Java中,XML操作相当冗长和复杂. 即使是简单的XSL转换,也必须编写几十行代码- ...
- java调用python,传参json字符串,含中文传参
java调用python,传参json字符串 python脚本内容(test.py) # -*- coding: utf-8 -*-def main(input):return input java调 ...
- java调用jar并传参,Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参
Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...
- C++ ShellExecuteEx 调用exe 文件传参
环境:Win10, x64, VS2015 记录日期:2020/10/15 实现内容: 1.ShellExecuteEx 调用exe 2.以文件为参数传参 代码: #include <iostr ...
- vue调用函数怎么传参_Vue(非)父子组件的传值以及方法调用
1.vue父组件给子组件传值的方法 子组件中通过props接收传值 props:{ username:{ type:String, default:"" } } 2.vue父组件调 ...
- java 调用kettle job 传参_java调用kettle向job(任务)和transformation(转换)传递参数实例...
虽然网上文章有说java可以传递参数给kettle,不过只找到了传递参数给转换的文章,没有讲参数传递给job,kettle中如何使用java传递的参数.今天就以上问题,一并共享. /** * 本测试类 ...
- HttpClient 调用WebAPI时—传参的三种方式(ASP.NET MVCCORE均适用)
代码里有注释: 方法一,传json参数 方法二,传表单参数 方法三,传字节流 public void Post(){//方法一,传json参数var d = new {username = " ...
- java调用视图如何传参_Spring MVC中 视图 向 控制器 传参(接收方式)
1.方法一(通过HttpServletRequest方式接收) 1.1.添加servlet的jar包 javax.servlet javax.servlet-api 3.1.0 provided 1. ...
- PHP调用WebService接口 , 传参xml
1. 先测试接口是否可以访问 $url = "http://ip:port/file.wsdl"; $client = new SoapClient($url); echo &qu ...
最新文章
- linux 管理命令 之 管理时间
- padding 不占宽高_不占地方的复式楼室内电梯,极致微型,节电省力颜值高
- YOLOv4论文笔记
- python在无人驾驶上的应用_无人驾驶(ADAS)方向的python软件工程师应具备哪些python模块的知识?...
- vue 插件 滑块验证_Vue插件之滑动验证码
- java mysql 输入数据库_如何用JAVA录入数据到SQL数据库
- 虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,
- LVS负载均衡DR模式+keepalived
- /dev/null空字符设备文件
- STM32F1--FreeRTOS系统移植运行报错:L6218E:Undefined symbol xTaskGetSchedulerState (referred from delay.o)
- 森松尼N-J60双模机械键盘按键操作说明
- GPK游戏包安装方法
- [译] APT分析报告:06.猖獗的小猫——针对伊朗的APT攻击活动详解
- 详解手游平台搭建需要哪些条件?需要注意什么?
- 卫星过顶计算matlab,基于SGP4模型的卫星轨道计算.docx
- 【学习资料】中国开放大学-电大-《教育学》形考作业答案(2018).docx
- 比较两组数据的差异用什么图更直观_你真的懂如何展示数据吗?
- 关于如何理解Glibc堆管理器(Ⅹ——完结、补充、注释——Arena、heap_info、malloc_*)
- (二十二)资产组合的有效边界、CML与最优配置
- mysql tcl 安装教程_TCL电视安装第三方应用软件的方法_简便教程