以前微信浏览器内想要直接唤醒 app 要么接微信的应用宝要么你是腾讯的干儿子。
而在微信在2020年5月分推出了“微信开放标签”功能
wx-open-launch-app 用于微信浏览器内直接唤醒 app ,也可通过携带参数直接进入app相应的内页。
现在不是干儿子,只要按照规定接入微信SDK就直接可以使用此功能。
 
一、适用环境
微信版本要求为:7.0.12及以上。 系统版本要求为:iOS 10.3及以上、Android 5.0及以上
 
二、接入微信JS-SDK
按微信JS-SDK要求绑定安全域,并通过config接口注入权限验证配置
 
  1. wx.config({
  2. appId: '',
  3. debug: true,
  4. timestamp: '',
  5. nonceStr: '',
  6. signature: '',
  7. jsApiList: [
  8. 'onMenuShareTimeline', // 分享给好友
  9. 'onMenuShareAppMessage', // 分享到朋友圈
  10. ],
  11. openTagList: ['wx-open-launch-app’] // 获取开放标签权限
  12. });

需要注意的点:
3、wx.config 内列出使用到的 openTagList
 
在微信开发者工具内打开你的网页测试如果显示
  1. {errMsg: "config:ok”}

说明你已经接入JS-SDK成功了

遗憾的是截至2020年7月13号为止,微信开发者工具还是无法支持微信开放标签的调试功能,只能在手机上调试并且是在加了微信安全域名的服务器环境下调试,着实麻烦

三、在 VUE 项目内使用 wx-open-launch-app
由于 wx-open-launch-app 这个标签在VUE项目编译时识别不了会报错,得在main.js文件内加上忽略报错的代码
  1. // 忽略自定义元素标签抛出的报错
  2. Vue.config.ignoredElements = [
  3. 'wx-open-launch-app',
  4. ];
  5.  
  6. new Vue({
  7.  
  8. el: '#app',
  9.  
  10. template: '<app/>',
  11.  
  12. components: { app }
  13. })

wx-open-launch-app 标签组件

  1. <wx-open-launch-app
  2. :id="id"
  3. class="launch-btn"
  4. :appid="appId"
  5. :extinfo="extinfoStr"
  6. >
  7. <script type="text/wxtag-template">
  8. <style>.btn {height: 96px;}</style>
  9. <div class="btn">打开app</div>
  10. </script>
  11. </wx-open-launch-app>

注意
1、标签内的原本的 <template> slot 需要替换成 <script type="text/wxtag-template”>
2、经过测试发现标签内定义的样式真的很尴尬,且不受控制,所以我们直接将标签用 CSS 绝对定位并设透明度为 opacity: 0, 盖在了我们原本的设计图上
3、透明度为 opacity: 0 的标签 <script type="text/wxtag-template"> 不能为空,否则宽高会被解析为0,也就是按钮根本点击不到
4、标签内 appid 填写的是 微信公众号内填写的你们 app 的 appid
5、extinfo 内填的是传递给唤起 app 的数据,而我们发现微信7.0.15版本在ios上,有概率会接收数据失败,不知道是微信的问题还是我们IOS的写法问题
6、在 VUE 的 mounted 生命周期回调函数内侦听开放标签的回调事件
  1. mounted(){
  2. var btn = document.getElementById(this.id)
  3. btn.addEventListener('launch', e => {
  4. // 在此处可设置粘贴板内数据,数据是传递给 app 的参数进,
  5. console.log('success');
  6. });
  7. btn.addEventListener('error', e => {
  8. // 在此处可设置粘贴板内数据,数据是传递给 app 的参数进,
  9. console.log('fail', e.detail);
  10. // 唤醒失败的情况下,可用于降级处理比如在此处跳转到应用宝
  11. });
  12. }

7、如果微信版本低于7.0.12 开放标签是无法使用的,所以最好在开放标签外套一层 DIV 用于点击事件,在事件中断段微信版本号如果低于,则降级到应用宝之类的方案

  1. <div @click="launch">
  2. <wx-open-launch-app
  3. :id="id"
  4. class="launch-btn"
  5. :appid="appId"
  6. :extinfo="extinfoStr"
  7. >
  8. <script type="text/wxtag-template">
  9. <style>.btn {height: 96px;}</style>
  10. <div class="btn">打开app</div>
  11. </script>
  12. </wx-open-launch-app>
  13. </div>
  1. launch(){
  2. // 在此处可设置粘贴板内数据,数据是传递给 app 的参数进
  3. if(!this.enable){
  4. // 不支持标签降级处理
  5. }
  6. }

四、最后当然是封装成项目中的一个组件

  1. <template>
  2. <div @click="launch">
  3. <wx-open-launch-app
  4. :id="id"
  5. class="launch-btn"
  6. :appid="appId"
  7. :extinfo="extinfoStr"
  8. >
  9. <script type="text/wxtag-template">
  10. <style>.btn {height: 96px;}</style>
  11. <div class="btn">打开app</div>
  12. </script>
  13. </wx-open-launch-app>
  14. </div>
  15. </template>
  16. <script>
  17. import globalConfig from '@assets/js/config'
  18. import { copyToClipboard } from '@assets/js/utils'
  19. import { getWeixinVersion, onBridgeReady } from '@assets/js/weixin/weixin'
  20.  
  21. let idIndex = 0
  22. export default {
  23. name: 'LaunchButton',
  24. props: {
  25. extinfo: {
  26. type: Object,
  27. default: ''
  28. },
  29. },
  30. watch: {
  31. extinfo: {
  32. handler(n){
  33. this.extinfoStr = JSON.stringify(n)
  34. },
  35. immediate: true
  36. }
  37. },
  38. data() {
  39. idIndex++
  40. return {
  41. id: 'wxopenLanchAppId' + idIndex,
  42. appId: globalConfig.WEIXIN_APP_ID,
  43. enable: false,
  44. extinfoStr: '',
  45. }
  46. },
  47. methods: {
  48. redirectToApp(){
  49. setTimeout(()=>{
  50. window.location.href = globalConfig.YING_YONG_BAO
  51. }, 400)
  52. },
  53. setClipboard(){
  54. console.log('start copy')
  55. let copyObject = {
  56. app: 'yogo'
  57. }
  58. for(var k in this.extinfo){
  59. copyObject[k] = this.extinfo[k]
  60. }
  61. copyObject = JSON.stringify(copyObject)
  62.  
  63. copyToClipboard(copyObject)
  64. console.log('end copy')
  65. },
  66. launch(){
  67. this.setClipboard()
  68. if(!this.enable){
  69. this.redirectToApp()
  70. }
  71. }
  72. },
  73. created(){
  74. // 微信版本号大于 7.0.12 开放标签才可进行 唤醒 app 跳转
  75. const wxVersion = getWeixinVersion()
  76. if(wxVersion){
  77. let v = wxVersion.split('.')
  78. if(v[0]>=7){
  79. if(v[1]>=0){
  80. if(v[2]>=12){
  81. this.enable = true
  82. }
  83. }
  84. }
  85. }
  86. },
  87. mounted(){
  88. var btn = document.getElementById(this.id)
  89. btn.addEventListener('launch', e => {
  90. this.setClipboard()
  91. console.log('success');
  92. });
  93. btn.addEventListener('error', e => {
  94. console.log('fail', e.detail);
  95. this.setClipboard()
  96. this.redirectToApp()
  97. });
  98. }
  99. }
  100. </script>
  101. <style lang="scss" scoped>
  102. .launch-btn{
  103. position: absolute;
  104. left: 0;
  105. top: 0;
  106. width: 100%;
  107. height: 100%;
  108. z-index: 1;
  109. opacity: 0;
  110. // background: red;
  111. }
  112. </style>

五、参考微信官方链接
接入指南
微信内网页跳转 app 功能
JS-SDK使用步骤
开放标签说明文档

注:转载请注明出处博客园:sheldon(willian12345@126.com)

https://github.com/willian12345

 

微信浏览器内 h5 直接唤醒 app 之 微信开放标签 wx-open-launch-app的更多相关文章

  1. 实现微信浏览器内打开App Store链接(已被和谐,失效了)

    微信浏览器是不支持打开App Store 页面的,不知道微信为什么这么做.比如你页面写 <a href=”http://itunes.apple.com/us/app/id399608199″& ...

  2. 实现微信浏览器内打开App Store链接

    http://www.ildsea.com/1781.html 微信浏览器是不支持打开App Store 页面的,不知道微信为什么这么做.比如你页面写 <a href=”http://itune ...

  3. [转]实现微信浏览器内打开App Store链接

    微信浏览器是不支持打开App Store 页面的,不知道微信为什么这么做.比如你页面写 <a href=”http://itunes.apple.com/us/app/id399608199″& ...

  4. 解决微信浏览器内video全屏问题

    前端离职,让我写个视频播放页面,木办法只有我来搞了. 默认用h5的 video标签 测试时候发现微信浏览器内访问video自动全屏播放. 搜了下 webkit-playsinline="tr ...

  5. 微信浏览器内置JavaScript 对象:WeixinJSBridge

    微信公众平台开发 微信公众平台开发模式 企业微信公众平台 微信浏览器 分享到朋友圈 发送给好友 分享到腾讯微博 作者:方倍工作室 原文: http://www.cnblogs.com/txw1958/ ...

  6. Android 浏览器内 H5 电脑 Chrome 调试

    Android 浏览器内 H5 调试 chrome://inspect 移动前端调试方案(Android + Chrome 实现远程调试) adb 相关资源 adb shell(ADB Kits)下载 ...

  7. 微信浏览器内建的WeixinJSBridge 实现“返回”操作

    微信浏览器内建的WeixinJSBridge 实现“返回”操作 WeixinJSBridge.call('closeWindow');

  8. WeixinJSBridge:微信浏览器内置JavaScript 对象

    微信公众平台开始支持前端网页,大家可能看到很多网页上都有分享到朋友圈,关注微信等按钮,点击它们都会弹出一个窗口让你分享和关注,这个是怎么实现的呢?今天就给大家讲解下如何在微信公众平台前端网页上添加分享 ...

  9. 微信h5跳转小程序wx-open-launch-weapp开放标签不显示(已解决)

    前言: 前几天成功对接了跳转第三方小程序的功能,今天有个页面有需要对接.但是奇怪的是用的和上次一模一样的配置,但就是死活不显示wx-open-launch-weapp这个开放标签的按钮,看不到任何效果 ...

随机推荐

  1. unittest实现用例运行失败截图

    把这个方法放到父类basecase(unittest.TestCase)就行了 #coding: utf-8 import unittest, random, os, traceback from s ...

  2. LR字符串处理函数-lr_save_var

    int lr_save_var ("截取的字符串"+start,len,options,param_name) start:表示从第几位截取  len:表示截取长度  option ...

  3. 深入理解JVM(③)低延迟的Shenandoah收集器

    前言 Shenandoah作为第一款不由Oracle(包括一起的Sun)公司的虚拟机团队所领导开发的HotSpot垃圾收集器.是只存在于OpenJDK当中的,最初由RedHat公司创建的,在2014年 ...

  4. 学员操作——制作5s关闭广告

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>广 ...

  5. Python 程序报错崩溃后,如何倒回到崩溃的位置?

    假设我们有一段程序,从 Redis 中读取数据,解析以后提取出里面的 name 字段: import json import redis client = redis.Redis() def read ...

  6. Redis持久性——RDB和AOF

    Redis持久性 Redis提供了不同的持久性选项: RDB持久性以指定的时间间隔执行数据集的时间点快照. AOF持久性记录服务器接收的每个写入操作,将在服务器启动时再次播放,重建原始数据集.使用与R ...

  7. centos 6.5 dhcp桥接方式上网络设置

    首先虚拟机和主机之间采用桥接模式 然后在虚拟机中进行设置,首先进入到目录 /etc/sysconfig/network-scripts/ [root@localhost ~]# cd /etc/sys ...

  8. trollcave解题

    这是第一次完整地进行模拟渗透,前前后后一共花了一天时间,花了点时间写了个writeup. 博主是个菜鸡,如果有大神看到,请轻喷...... writeup下载:https://hrbeueducn-m ...

  9. python黑帽子之tcp客户端

    在渗透测试过程中,我们经常会需要创建一个tcp客户端来连接服务,发送垃圾数据,进行模糊测试等任务,所以我们来用python创建一个简单的tcp客户端. import sockettarget_host ...

  10. MongoDB入门二

    MongoDB配置 本地启动 c:\MongoDB\bin>mongod.exe --dbpath "C:\\MongoDB\data\db" --logpath " ...