微信设置App一键跳转的各种坑

1,714 阅读4分钟

微信浏览器支持wx-open-launch-app的一键跳转标签,可以用于微信内打开特定的App

配置

微信开放平台的账号体系

微信账号分为微信开放平台(open.weixin.qq.com)和微信公众平台(mp.weixin.qq.com)。

  • 微信公众平台上可以注册微信小程序/公众号并管理,每个账号对应一个公众号/小程序
  • 微信开放平台可以将App/网站/小程序/公众号绑定。这样就可以通过接入sdk实现 【App/网站 <-> 微信】的相互调用

要实现微信浏览器内点击直接唤醒App,至少需要注册以下内容:

  • 微信开放平台账号
  • 微信公众号(必须服务号,个人号是没有调起能力的)
  • 将要唤醒的App和微信公众号绑定到同一个微信开放平台账号上
  • 一个通过ICP备案的域名

然后:

  1. 登入公众号,选择右上角菜单,功能设置->JS安全域名中,按照提示步骤,联系运维完成域名的绑定。
  2. 登入开放平台,选择绑定的公众号,也即刚完成域名绑定的公众号,选择公众号详情里的“网页跳转移动应用”, 输入刚注册的 JS安全域名,和要唤醒的App id(App注册到微信开放平台账号时生成的)。

坑点1,账号

准备多个邮箱。 虽然微信开放平台和公众平台的账号不互通,但邮箱是互通的。一个邮箱只能注册一个账号,所以需要至少2个邮箱,每增加一个公众号/小程序都要一个新的邮箱。 多个邮箱管理起来极其麻烦。当遇到账号密码错误,找回密码又提示 email_error.png 说明是搞混了公众号/小程序的注册邮箱。

坑点2,主体

所有注册主体必须保持一致。 公众号注册需要输入公司主体,开放平台也需要。通常是xxx有限公司之类的名称。主体不同在注册和绑定的时候不会遇到什么问题,但是在开放平台内选择了公众号,并配置网页跳转移动应用时,最后一步才会弹出 “开放账号与服务号主体不同”之类的错误提示。

开发

坑点1:JS SDK接入后无法唤醒

segmentfault.com/a/119000001… 接入及授权完成后,点击按钮如果报错: "launch:fail_check fail" 校验App跳转权限失败,请确认是否正确绑定AppID 除了按照官方文档排查外,还需要检查域名。虽然公众号绑定安全域名提示(可填写五个域名或路径(例:wx.qq.com或wx.qq.com/mp)), 实测如果用了path就会出上述错误无法正确打开。解决方案简而言之就是需要填入不带path的二级域名,如wx.qq.com。

坑点2

获取微信config参数的接口在计算签名(signature)字段时参数不能包含appId,否则直接会报签名错误。后端对应的接口开发需要对应的尝试一下可行的字段。

坑点3:Android上标签点击报错

对于android手机config中的jsApiList数据必须有值,例如:jsApiList: ['updateAppMessageShareData','updateTimelineShareData',],否则会报config:param is empty错误,ios可以为空数组。

坑点4,应用没启动时页面点击无反应。或能看到界面但操作不了

wx的官方文档要求了通过WXEntryActivity的注册来响应微信的调用。但是示例代码里有个坑,若完全参考实现,那么通过标签唤醒后会有一个透明的界面盖住app 于是能看到界面但什么都操作不了。layout inspector里能看到一个额外的DecorView, 就是这个activity创建的。 安全的做法是将IWXAPIEventHandler独立实现。WXEntryAvtivity onCreate回调中将自己finish掉,摘掉这个窗口。

wx-open-launch-app

app和页面接入微信SDK后,无意外可以正常唤醒App。同步的,App中对微信sdk开发一下对应的响应事件。就能跳到对应页面了。

该标签仅有7.0.12(2020.03版本)之后微信浏览器可以识别,如果要考虑分享到低版本微信活微信外外就不得不做一个兼容处理,另开发一套同样的逻辑, 否则在外部浏览器上会什么也看不到。

应用未安装场景

返回launch:fail 错误。此时打开应用宝下载地址就可以了。