一、UrlSchemes 是什么

UrlScheme 是系统提供的一种跳转协议,它可以由应用程序注册,然后其他程序通过UrlSchemes 来调用该应用程序,就如同打开一个网站地址。
通过 UrlSchemes 我们可以在应用内或使用浏览器打开指定应用并传参。
UrlScheme 目前已经被iOSAndroid、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 代表host
  • direction 代表path
  • origin=... 代表参数

二、UrlSchemes 能做什么

实际用例:

  1. app中对一个店铺进行了位置采集,点击这个店铺的导航按键时,我们就可以使用高德或百度地图的UrlScheme打开地图应用并导航。

    //打开百度地图导航
    UrlScheme ='baidumap://map/direction?origin=&destination='
    

    百度api文档 - 点击跳转

  2. 公司开发的两个应用,从一个应用中启动另一个应用的某个功能,并且实现用户免登录。
    使用UrlScheme 方式打开应用并传递操作参数和用户token。
    获取操作参数和用户token,根据操作参数打开对应功能页面。

  3. 使用离线消息推送的时候,点击消息只能打开应用,没有办法自定义后续逻辑,如:打开应用后跳转到对应资讯的详情页面。
    这个时候就需要使用配置点击消息跳转到指定的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 实现调用应用并传参相关推荐

  1. xsl调用java方法传参_Java中的XSL转换:一种简单的方法

    xsl调用java方法传参 XSL转换 (XSLT)是将一个XML文档转换为另一个XML文档的强大机制. 但是,在Java中,XML操作相当冗长和复杂. 即使是简单的XSL转换,也必须编写几十行代码- ...

  2. java调用python,传参json字符串,含中文传参

    java调用python,传参json字符串 python脚本内容(test.py) # -*- coding: utf-8 -*-def main(input):return input java调 ...

  3. java调用jar并传参,Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

    Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...

  4. C++ ShellExecuteEx 调用exe 文件传参

    环境:Win10, x64, VS2015 记录日期:2020/10/15 实现内容: 1.ShellExecuteEx 调用exe 2.以文件为参数传参 代码: #include <iostr ...

  5. vue调用函数怎么传参_Vue(非)父子组件的传值以及方法调用

    1.vue父组件给子组件传值的方法 子组件中通过props接收传值 props:{ username:{ type:String, default:"" } } 2.vue父组件调 ...

  6. java 调用kettle job 传参_java调用kettle向job(任务)和transformation(转换)传递参数实例...

    虽然网上文章有说java可以传递参数给kettle,不过只找到了传递参数给转换的文章,没有讲参数传递给job,kettle中如何使用java传递的参数.今天就以上问题,一并共享. /** * 本测试类 ...

  7. HttpClient 调用WebAPI时—传参的三种方式(ASP.NET MVCCORE均适用)

    代码里有注释: 方法一,传json参数 方法二,传表单参数 方法三,传字节流 public void Post(){//方法一,传json参数var d = new {username = " ...

  8. java调用视图如何传参_Spring MVC中 视图 向 控制器 传参(接收方式)

    1.方法一(通过HttpServletRequest方式接收) 1.1.添加servlet的jar包 javax.servlet javax.servlet-api 3.1.0 provided 1. ...

  9. PHP调用WebService接口 , 传参xml

    1. 先测试接口是否可以访问 $url = "http://ip:port/file.wsdl"; $client = new SoapClient($url); echo &qu ...

最新文章

  1. linux 管理命令 之 管理时间
  2. padding 不占宽高_不占地方的复式楼室内电梯,极致微型,节电省力颜值高
  3. YOLOv4论文笔记
  4. python在无人驾驶上的应用_无人驾驶(ADAS)方向的python软件工程师应具备哪些python模块的知识?...
  5. vue 插件 滑块验证_Vue插件之滑动验证码
  6. java mysql 输入数据库_如何用JAVA录入数据到SQL数据库
  7. 虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,
  8. LVS负载均衡DR模式+keepalived
  9. /dev/null空字符设备文件
  10. STM32F1--FreeRTOS系统移植运行报错:L6218E:Undefined symbol xTaskGetSchedulerState (referred from delay.o)
  11. 森松尼N-J60双模机械键盘按键操作说明
  12. GPK游戏包安装方法
  13. [译] APT分析报告:06.猖獗的小猫——针对伊朗的APT攻击活动详解
  14. 详解手游平台搭建需要哪些条件?需要注意什么?
  15. 卫星过顶计算matlab,基于SGP4模型的卫星轨道计算.docx
  16. 【学习资料】中国开放大学-电大-《教育学》形考作业答案(2018).docx
  17. 比较两组数据的差异用什么图更直观_你真的懂如何展示数据吗?
  18. 关于如何理解Glibc堆管理器(Ⅹ——完结、补充、注释——Arena、heap_info、malloc_*)
  19. (二十二)资产组合的有效边界、CML与最优配置
  20. mysql tcl 安装教程_TCL电视安装第三方应用软件的方法_简便教程

热门文章

  1. 感性电路电流计算_三相交流电怎么计算电功率?
  2. 使用音频分析工具audacity分析wave文件
  3. 检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式
  4. 【实战】OpenCV+Python项目实战--信用卡数字识别
  5. vue导出js中的函数_js中的函数
  6. 再谈 iOS App Crash 防护
  7. 苹果手机开热点电脑/安卓手机无法链接?
  8. ARM与高校联合研制基于机器学习的柔性传感器
  9. Android图片之svg
  10. linux字符串加引号,请问 命令行中写路径,加引号和不加有什么区别?