公众号/h5 跳转到小程序填坑指南
发布于 2021-01-17 12:32
一. 准备工作
写代码前, 一定要先把配置处理好,避免后续操作的不愉快。
步骤一:绑定域名
登录微信管理后台, 在开发-开发管理-开发设置-服务域名, 把你 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 签名是需要从开发者服务器上去获取。
步骤四:使用 ready/error 验证成功与否
上面处理好之后,可以通过 wx.ready 方法处理成功后的结果,wx.error 处理失败后的结果。通常,如果打开了 debug,此时应该会出现 alert 弹窗,如果出现 config:ok 则说明配置成功。
小提示:如果还没有账号,在微信公众后台可申请微信测试账号,可以调用大部分的 js 接口。
官方给的 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'></script>
如果出现下面的弹窗,说明成功啦。但也要确保是否为所指定页面。
总结
问题排查:没效果/报错?
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不一致会导致jssdk调用失败,进而导致 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打开
[5]
5.跳转到APP
将 button 组件 open-type 的值设置为 launchApp.(打开App[6])
6./微信网页h5跳转到APP
使用 wx-open-launch-app 标签
参考资料
开放标签说明文档: 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][6]打开App: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/launchApp.html
本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。
相关素材