公众号/h5 跳转到小程序填坑指南

 

本文介绍的是使用微信开放标签 wx-open-launch-weapp 实现微信浏览器内网页跳转到任意合法合规的小程序里,官方要求微信版本为:7.0.12 及以上,系统版本要求为:iOS 10.3 及以上、Android 5.0 及以上。 话不多说, 先贴官方文档: 开放标签说明文档[1]

一. 准备工作

写代码前, 一定要先把配置处理好,避免后续操作的不愉快。

步骤一:绑定域名

登录微信管理后台, 在开发-开发管理-开发设置-服务域名, 把你 js 请求的接口域名添加进去。

步骤二: 引入 js 文件

在你的项目里面引入 js 文件,可以有两种方式。
方式 1:在 html 里面使用 script 标签引入

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js "></script>

方式 2: npm 安装

npm install weixin-js-sdk-ts

使用: import wx from ''weixin-js-sdk-ts'; Vue.prototype.wx = wx

步骤三: 通过 config 接口注入权限验证配置并申请所需开放标签

这一步是非常关键的,调用微信 js 接口前要先拿到 config 信息, 同一个 url 只需要调用一次。

wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [], // 必填,需要使用的JS接口列表,如['onMenuShareTimeline','onMenuShareAppMessage']
  openTagList: [] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
})

其中 signature 签名是需要从开发者服务器上去获取。

获取 signature 签名的四个步骤
步骤一: 使用appIdappSecret获取 access_token (通常是由开发者服务器全局缓存,有效期为 7200 秒,获取 accessToken[2])
步骤二:使用 access_token 获取jsapi_ticket临时票据
步骤三:用时间戳、随机数、jsapi_ticket 和要访问的 url 按照签名算法拼接字符串;
步骤四:对第三步的字符串进行 SHA1 加密,得到签名。
注意事项:
1.签名用的 noncestr 和 timestamp 必须与 wx.config 中的 nonceStr 和 timestamp 相同。
2.签名用的 url 必须是调用 JS 接口页面的完整 URL,但不包含#后面的。
详情请移步这里(微信 js-sdk 获取签名[3])

步骤四: 使用 ready/error 验证成功与否

上面处理好之后,可以通过 wx.ready 方法处理成功后的结果,wx.error 处理失败后的结果。通常,如果打开了 debug,此时应该会出现 alert 弹窗,如果出现 config:ok 则说明配置成功。

小提示:如果还没有账号,在微信公众后台可申请微信测试账号,可以调用大部分的 js 接口。

使用 wx-open-launch-weapp 分享到小程序

在需要跳转的地方使用 wx-open-launch-weapp 标签,首先该标签需要在 wx.config 的 openTagList 中进行注册。
其中 username 是需要跳转到的小程序原始 Id, 是以gh开头的,非 wx 开头的,(APP 分享到小程序也是使用 gh 开头的 appId)。
path 是需要跳转到小程序的指定页面, 非必填,默认跳转到小程序的首页。
需要注意的是,path必须带有html, 如小程序路径:/pages/list, 这里应该写成/pages/list.html, 后面可以用?拼接参数,参数可以在 app.js,指定页面的 onLoad, onShow 里面拿到。

官方给的 demo 是下面这样的,其中跳转按钮是用 template 标签包裹,以插槽的形式存在。

<wx-open-launch-weapp
  id="launch-btn"
  username="gh_XXXX"
  :path="path"
  >
  <template>
    <img src="/images/live/mini-icon@2x.png" alt="">
    <span>微信小程序</span>
  </template>
</wx-open-launch-weapp>
<!-- path: `/packages/live/watch.html?liveId=XXX`-->

为了在浏览器上调试时能看到 wx-open-launch-weapp, vue 项目中可以在 main 中加入下面这行代码:

Vue.config.ignoredElements = ['wx-open-launch-weapp']

然而上面这段代码在真机上并没有效果,可能是与 Vue 中的 template 标签冲突的原因,于是将 template 改用 script 标签的形式。

<script type='text/wxtag-template'>
  .icon{
    width: 55px;
    display: block;
    margin: 10px 0 10px 10px;
  }
  .title {
    font-size: 14px;
    margin-left: 14px;
  }
  <image class='icon' src='data:image/png;base64,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'></image>
  <view class='title'>小程序</view>
</script>

注意: 在 script 标签里面,与页面是隔离的,并且要按照小程序的写法来写,如上面使用的 view 标签,同时图片文件需要用 base64 的形式。另外样式也要写在 script 标签里面,以 style 的形式写。如果是在弹窗里面写的,还需要注意层级问题。

如果出现下面的弹窗,说明成功啦。但也要确保是否为所指定页面。

总结

使用wx-open-launch-weapp标签跳转到小程序, 与使用微信JS-SDK是类似的,需要配置config信息,并引入wx-open-launch-weapp标签。
只有已认证的服务号且绑定域名或者已认证的小程序云开发静态托管的域名下的网页才可以跳转,订阅号目前不支持。

问题排查:没效果/报错?

1.打开wx.config的debug, 根据报错信息一步步处理,直到出现config:ok;

2.出现组件未注册的报错,在app.js里面配置Vue.config.ignoredElements = ['wx-open-launch-weapp'];
3.真机上按钮不显示?wx.config中是否有注入?template标签冲突?层级样式问题?

4.样式问题?如果是vue项目,style也要写在script标签内,如果是其他,用template包裹的,样式写在html标签上

5.跳转失败?使用wx-open-launch-weapp标签中的lanch或error方法判断跳转成功与否

6.兼容问题?vue项目使用history路由,在ios上不生效?
原因:ios下微信会缓存第一次进入的页面地址,如果从微信一级页面跳转到二级页面, 由于vue是单页应用,不会刷新页面,vue路由地址变了,和微信缓存的地址不一致, 所以在进行wxConfig时传入的url和微信缓存的url不一致会导致jsdk调起失败,进而导致 wx-open-launch-weapp 无法生效。
解决:

// 刷新一下当前页面
reloadPage() {
  if(!this.isIos) return;
  const currUrl = location.href;
  const isReload = currUrl.indexOf("?reload=1") > -1 ? true : false;
  if (!isReload) {
    location.replace(currUrl + "?reload=1");
  }
},

扩展

1.公众号跳转小程序的其他方式

  • 公众号自定义菜单栏设置小程序链接

  • 通过客服消息、订阅消息、模版消息跳转到小程序

  • 在公众号文章中通过小程序码或小程序卡片跳转到小程序

  • 通过卡劵跳转到小程序

2.小程序跳转到公众号文章/内嵌h5

  • 使用web-view[4]打开公众号文章或跳转网页,

  • 使用official-account公众号关注组件
    h5返回小程序:
    web-view网页中使用js-sdk提供的接口wx.miniProgram.navigateTo等
    直接点击手机返回键,让它自动根据层级返回;

3.小程序跳转到小程序

  • 使用wx.navigateToMiniProgram接口自动跳转至其他小程序

4.App打开小程序

  • 移动应用(APP)拉起小程序功能[5]

5.小程序跳转到APP

  • 将 button 组件 open-type 的值设置为 launchApp.(打开App[6])

6.公众号/微信网页h5跳转到APP

  • 使用 wx-open-launch-app 标签


参考资料

[1]

开放标签说明文档: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html

[2]

获取accessToken: https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

[3]

微信 js-sdk 获取签名: https://www.cnblogs.com/tubashu/p/12059465.html

[4]

web-view: https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

[5]

移动应用(APP)拉起小程序功能: https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Launching_a_Mini_Program/Launching_a_Mini_Program.html

[6]

打开App: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/launchApp.html

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: H5跳转到微信小程序是一种通过在H5页面中添加跳转链接实现从H5页面跳转到微信小程序的功能。下面是一个H5跳转到微信小程序的demo: 1. 首先,在H5页面中添加一个跳转到微信小程序的按钮或链接。可以使用HTML的<a>标签和href属性来实现。例如: ```html <a href="weixin://dl/business/?appid=wxappid">点击跳转到微信小程序</a> ``` 在上面的代码中,weixin://dl/business/ 是微信用于跳转小程序的协议。 2. 将wxappid替换为你要跳转的微信小程序的AppID。可以在微信公众平台上的小程序管理后台找到小程序的AppID。 3. 当用户点击该按钮或链接时,系统会自动检测用户的设备是否安装了微信小程序。如果安装了,会自动打开小程序;如果未安装,会跳转到微信的下载页面。 需要注意的是,以上方法只适用于在微信内部打开的H5页面。在其他浏览器或App中打开的H5页面无法使用该方法跳转到微信小程序。 另外,如果你是小程序开发者,还可以使用微信小程序提供的API实现跳转到其他小程序的功能。具体的实现方法可以参考微信小程序的开发文档。 ### 回答2: 在实现H5跳转到微信小程序的demo中,我们可以通过以下步骤来完成: 1. 首先,我们需要在H5页面中引入微信提供的JS-SDK库文件,可以通过以下代码实现: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ``` 2. 然后,我们需要在微信开放平台上注册并获取微信小程序的AppID。将获取到的AppID填写在H5页面的`wx.config`配置中,具体代码如下: ```javascript wx.config({ appId: 'YourAppID', timestamp: '', nonceStr: '', signature: '', jsApiList: [] }); ``` 在`jsApiList`中填写小程序提供的JS接口,比如跳转小程序的`launchMiniProgram`接口。 3. 接下来,我们需要在H5页面中添加一个跳转按钮,并绑定点击事件。在点击事件中调用`wx.miniProgram`的`navigateBack`方法来实现跳转小程序,具体代码如下: ```javascript document.getElementById('jumpBtn').addEventListener('click', function() { wx.miniProgram.navigateTo({ url: '/pages/index/index' }); }); ``` 其中,`url`参数填写要跳转到的小程序页面路径。 4. 最后,在微信小程序的对应页面中添加一个返回按钮,点击事件中调用`wx.miniProgram`的`navigateBack`方法来返回到H5页面,具体代码如下: ```javascript wx.miniProgram.navigateBack(); ``` 通过以上步骤,我们就可以实现H5页面跳转到微信小程序的demo了。当用户点击H5页面中的跳转按钮时,就会跳转到指定的小程序页面;而在小程序页面中点击返回按钮,则会返回到H5页面。 ### 回答3: H5跳转到微信小程序的实现方式有多种。以下是一种具体的实现示例: 首先,在H5页面中,可以通过添加一个按钮或链接来实现跳转到微信小程序的功能。例如,在HTML代码中添加一个按钮元素,然后使用JavaScript代码来监听按钮的点击事件。 HTML代码示例: ```html <button id="jumpButton">跳转小程序</button> ``` 接着,在JavaScript代码中,通过调用微信小程序接口`wx.miniProgram.navigateTo`来实现跳转到指定的小程序页面。需要在button的点击事件处理函数中编写相关代码。 JavaScript代码示例: ```javascript document.getElementById('jumpButton').addEventListener('click', function() { // 跳转小程序的页面路径,在小程序开发工具中可以找到 var path = '/pages/index/index'; // 跳转时携带的参数,在小程序中可以通过options参数获取 var params = { id: 123 }; // 调用微信小程序接口跳转到指定页面 wx.miniProgram.navigateTo({ url: path + '?id=' + params.id }); }); ``` 在以上示例中,点击按钮后,会调用`wx.miniProgram.navigateTo`接口,携带指定的页面路径和参数跳转小程序的页面。可以根据实际需求修改`path`和`params`变量的值来实现跳转到不同的小程序页面和传递不同的参数。 需要注意的是,以上示例中的代码是基于微信小程序的开发接口实现的,所以要确保在微信浏览器中打开H5页面才能正常跳转到微信小程序。此外,需要提前在微信小程序的配置文件中进行相应的设置,以确保能正确跳转到指定小程序页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值