解决SDK注入权限验证安卓正常,IOS出现config fail的方法

所属分类: 软件编程 / IOS 阅读数: 777
收藏 0 赞 0 分享

实测有效 解决微信游览器和企业微信游览器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文件中

if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
 const url = location.href
 const res = await getSignature(url) //获取设置config的参数
 let { timestamp, noncestr, signature, appId } = res.data
 wx.config({
  beta: true,
  debug: false,
  appId: appId,
  timestamp: timestamp,
  nonceStr: noncestr,
  signature: signature,
  jsApiList: ['scanQRCode']
 });
 wx.ready(function () {
  console.log('设备已经可以使用')
 })
}

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

if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
 const url = location.href
 const res = await getSignature(url) //获取设置config的参数
 let { timestamp, noncestr, signature, appId } = res.data
 wx.config({
  beta: true,
  debug: false,
  appId: appId,
  timestamp: timestamp,
  nonceStr: noncestr,
  signature: signature,
  jsApiList: ['scanQRCode']
 });
 wx.ready(function () {
  console.log('设备已经可以使用')
 })
}

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

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

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

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

在App.vue文件中

if (/(wxwork)/i.test(navigator.userAgent)) {
 return
}
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
 const url = location.href
 const res = await getSignature(url) //获取设置config的参数
 let { timestamp, noncestr, signature, appId } = res.data
 wx.config({
  beta: true,
  debug: false,
  appId: appId,
  timestamp: timestamp,
  nonceStr: noncestr,
  signature: signature,
  jsApiList: ['scanQRCode']
 });
 wx.ready(function () {
  console.log('设备已经可以使用')
 })
}

在news文件中

if (/(wxwork)/i.test(navigator.userAgent)) {
 return
}
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
 const url = location.href
 const res = await getSignature(url) //获取设置config的参数
 let { timestamp, noncestr, signature, appId } = res.data
 wx.config({
  beta: true,
  debug: false,
  appId: appId,
  timestamp: timestamp,
  nonceStr: noncestr,
  signature: signature,
  jsApiList: ['scanQRCode']
 });
 wx.ready(function () {
  console.log('设备已经可以使用')
 })
}

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

更多精彩内容其他人还在看

iOS UISearchController的使用方法

本文主要介绍了iOS UISearchController的使用方法,具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享

IOS 中 new 和 alloc init 的对比

这篇文章主要介绍了IOS 中 new 和 alloc init 的区别的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

IOS 字符串常用处理详细介绍

这篇文章主要介绍了IOS 字符串常用处理详细介绍的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS开发支付宝支付成功返回字符串的处理操作

很多朋友在做ios开发项目时,遇到支付宝支付成功返回字符串的处理操作不知道该怎么办,今天小编给大家分享实例代码,需要的朋友参考下
收藏 0 赞 0 分享

IOS CoreLocation实现系统自带定位的方法

本篇文章主要介绍了IOS Core Location实现系统自带定位的方法,非常具有实用价值,需要的朋友可以参考下。
收藏 0 赞 0 分享

iOS之点击通知栏的通知进入程序的触发事件

本文主要介绍了iOS中点击通知栏的通知进入程序的触发事件的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享

IOS  Swift基础之switch用法详解

这篇文章主要介绍了IOS Swift基础之switch用法详解的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

IOS React等Title不显示问题解决办法

这篇文章主要介绍了IOS React等Title不显示问题解决办法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS UIScrollView滚动视图/无限循环滚动/自动滚动的实例代码

这篇文章主要介绍了iOS UIScrollView滚动视图/无限循环滚动/自动滚动,需要的朋友可以参考下
收藏 0 赞 0 分享

简单实现iOS指纹解锁(TouchID)

这篇文章主要介绍了如何简单实现iOS指纹解锁,验证TouchID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多