经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » iOS » 查看文章
解决SDK注入权限验证安卓正常,IOS出现config fail的方法
来源:jb51  时间:2019/6/25 10:02:56  对本文有异议

实测有效 解决微信游览器和企业微信游览器JSSDK注入权限验证 安卓正常,IOS出现config fail

一开始我们想到的是可能微信这边的Bug,但细想一下应该不是。因为可能涉及到了IOS的底层原理的问题,可能是不受微信所控。(有问题欢迎拍砖)

出现问题得解决问题啊,不能把问题晾在那边不管,这是程序员的尊严!

我这个是SPA应用,所以拿其中一个vue项目来做探讨,其他SPA应用同理

首先我们想到在安卓中生效,在IOS中不生效是什么原因?

我们把所有设置都检查了一遍,最终发现是当前路由location.href不一致的问题

我们可以去尝试一下去到具体某个页面:

在Android下微信复制当前链接然后粘贴到输入框里,会发现路由是具体到某个路由。例如:www.xxxx.com/news/xxxx

在IOS下微信复制当前链接然后粘贴到输入框里,会发现路由是首页。例如:wwwx.xxxx.com/index

所以问题就定位在了url上,这次我只拿调取扫一扫功能,其余功能自行加上。

那我们只需要判断访问设备是安卓还是IOS即可

首先在index.html页面中引入JSSDK文件

然后在App.vue文件中

  1. if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
  2. const url = location.href
  3. const res = await getSignature(url) //获取设置config的参数
  4. let { timestamp, noncestr, signature, appId } = res.data
  5. wx.config({
  6. beta: true,
  7. debug: false,
  8. appId: appId,
  9. timestamp: timestamp,
  10. nonceStr: noncestr,
  11. signature: signature,
  12. jsApiList: ['scanQRCode']
  13. });
  14. wx.ready(function () {
  15. console.log('设备已经可以使用')
  16. })
  17. }

具体到某个页面的时候 例如:news下

  1. if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
  2. const url = location.href
  3. const res = await getSignature(url) //获取设置config的参数
  4. let { timestamp, noncestr, signature, appId } = res.data
  5. wx.config({
  6. beta: true,
  7. debug: false,
  8. appId: appId,
  9. timestamp: timestamp,
  10. nonceStr: noncestr,
  11. signature: signature,
  12. jsApiList: ['scanQRCode']
  13. });
  14. wx.ready(function () {
  15. console.log('设备已经可以使用')
  16. })
  17. }

仅限于在微信自带的游览器上。企业微信自带的游览器这方法是不行的。

通过微信企业浏览器扫码获取到的微信浏览器信息如下:(图片摘取于CSDN)

微信客户端扫码获取到的信息如下:

对比企业微信游览其和微信游览器的信息,多出了wxwork。那么我们只需要添加多一个判断条件就好了

在App.vue文件中

  1. if (/(wxwork)/i.test(navigator.userAgent)) {
  2. return
  3. }
  4. if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
  5. const url = location.href
  6. const res = await getSignature(url) //获取设置config的参数
  7. let { timestamp, noncestr, signature, appId } = res.data
  8. wx.config({
  9. beta: true,
  10. debug: false,
  11. appId: appId,
  12. timestamp: timestamp,
  13. nonceStr: noncestr,
  14. signature: signature,
  15. jsApiList: ['scanQRCode']
  16. });
  17. wx.ready(function () {
  18. console.log('设备已经可以使用')
  19. })
  20. }

在news文件中

  1. if (/(wxwork)/i.test(navigator.userAgent)) {
  2. return
  3. }
  4. if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
  5. const url = location.href
  6. const res = await getSignature(url) //获取设置config的参数
  7. let { timestamp, noncestr, signature, appId } = res.data
  8. wx.config({
  9. beta: true,
  10. debug: false,
  11. appId: appId,
  12. timestamp: timestamp,
  13. nonceStr: noncestr,
  14. signature: signature,
  15. jsApiList: ['scanQRCode']
  16. });
  17. wx.ready(function () {
  18. console.log('设备已经可以使用')
  19. })
  20. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号