前期准备
想使用微信拉起app功能需要准备
- H5页面使用的域名
- 可以进行微信鉴权的后端服务
- 认证过的服务号(目前一年3张,一个域名就要有一个可用的服务号)
- 认证过并且主体和服务号一致的微信开放平台(费用不太清楚)
- 一个需要拉起的app(未上架应用市场的话是有调用次数的)
后端
- 把后端IP配置在服务号的IP白名单中
- 使用公众号appId和secret获取access_token(有效时间7200s)
- 使用access_token获取jsapi_ticket(有效时间7200s)
- 调用签名算法生成签名signature
附录1-JS-SDK使用权限签名算法
注意: access_token和jsapi_ticket后端一定要缓存起来,这个微信那边是有调用次数限制的,超过次数就不让调用了。
access_token和jsapi_ticket实际有效时间不一定是7200s,会比这个值长一些,后端可以按7200s缓存起来,个人验证问题时发现缓存时间都过了半小时旧值有时候还能用。
前端
- 公众平台上面注册移动应用,关联服务号
- 在微信公众号和开放平台绑定域名,虽然公众号管理台配置JS安全域名可以配置多个域名,但是开放平台中配置公众号关联关系时候只允许配置一个域名,所以如果有多个域名(比如测试环境)需要做拉起app功能时候,要么就多用几个公众号来绑定域名,要么就使用一个父域名来绑定(这个我没验证过,因为我们这应用有点多,使用父域名怕影响了别的应用)
微信内网页跳转APP功能 - 前端代码 引入JS文件https://res.wx.qq.com/open/js/jweixin-1.6.0.js
- 通过config接口注入权限验证配置,这里timestamp、nonceStr、signature都是取后端接口返回的值
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [] // 必填,需要使用的JS接口列表}); 例子:'checkJsApi','onMenuShareTimeline','onMenuShareAppMessage'
})
- 通过ready接口处理成功验证
- 通过error接口处理失败验证,有的时候微信鉴权失效了,这里可以做个兜底处理
JSSDK使用步骤 - 拉起app使用微信开放标签wx-open-launch-app
跳转APP:wx-open-launch-app
注意事项
- 后端调用接口需要先在微信公众号平台配置白名单,否则无法调用
- 后端缓存的access_token、jsapi_ticket需要根据不同的appId来处理,否则会造成多个域名互相冲突
- 开放平台、公众平台配置域名必须完全一致,因为开放平台中配置公众号的关联关系中只能绑定一个域名,所以多个域名需要实现微信拉起App要借助多个公众号来实现。
- 开放平台中配置的关联关系不支持解绑,仅支持换绑,如将对应的公众号至其他开放平台,原有的关联关系仍然能生效
- 微信中文字链无法使用拉起app标签,支持的有卡片分享、二维码等
- iframe内不支持开放标签
- 确认url是页面完整的url(请在当前页面alert(location.href.split(‘#’)[0])确认),包括’http(s)😕/‘部分,以及’?‘后面的GET参数部分,但不包括’#'hash后面的部分。
附录5-常见错误及解决方法
ps:微信实现拉起app工作量是真的不少,配置和认证也很麻烦,图省事还是做个页面右上角浏览器里打开,使用浏览器拉起app吧。