SPA 中微信 JSSDK 签名在 iOS 和 Android 中的差异

本文提及的各个环境版本为当前最新版本,若与各位看官版本不一致,可能出现差异:
微信:7.0.3
JSSDK:1.4.0
iOS:12.1.4(iPhone6s)
Android:EMUI 9.0.0(HUAWEI P20)

项目使用 React + Router 来管理路由,使用了 BrowserHistory,按文档说,访问每个页面的 URL 都会改变,因此每次都需要调用后端重新获取签名。下面是 app.jsx,位于入口。

上面的代码在 Android 中是正常的,但是在 iOS 中,第一次签名成功,而 URL 变更后会提示签名失败,该异常并没有在官方《iOS WKWebview 网页开发适配指南》中提出。这个问题可以在 vue 的 issues 中找到了一些提示《关于html5-History模式在微信浏览器内的问题》。iOS 下在每次页面 URL 变更,微信内置浏览器用于验证签名的 URL 是不会变的 😂(这也是为什么使用 HashHistory 方式不会出现签名失败的原因),因此在 history.listen 事件中,我们需要加一些判断,iOS 下仅需要签名一次就可以了。

为了避免长时间停留在 app 时,微信的 access token 可能存在超时,我们在一定时间内可以请求一次重签名。

您可能还喜欢

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload CAPTCHA.