解決SDK注入權(quán)限驗證安卓正常,IOS出現(xiàn)config fail的方法
實測有效 解決微信游覽器和企業(yè)微信游覽器JSSDK注入權(quán)限驗證 安卓正常,IOS出現(xiàn)config fail
一開始我們想到的是可能微信這邊的Bug,但細想一下應(yīng)該不是。因為可能涉及到了IOS的底層原理的問題,可能是不受微信所控。(有問題歡迎拍磚)
出現(xiàn)問題得解決問題啊,不能把問題晾在那邊不管,這是程序員的尊嚴(yán)!
我這個是SPA應(yīng)用,所以拿其中一個vue項目來做探討,其他SPA應(yīng)用同理
首先我們想到在安卓中生效,在IOS中不生效是什么原因?
我們把所有設(shè)置都檢查了一遍,最終發(fā)現(xiàn)是當(dāng)前路由location.href不一致的問題
我們可以去嘗試一下去到具體某個頁面:
在Android下微信復(fù)制當(dāng)前鏈接然后粘貼到輸入框里,會發(fā)現(xiàn)路由是具體到某個路由。例如:www.xxxx.com/news/xxxx
在IOS下微信復(fù)制當(dāng)前鏈接然后粘貼到輸入框里,會發(fā)現(xiàn)路由是首頁。例如:wwwx.xxxx.com/index
所以問題就定位在了url上,這次我只拿調(diào)取掃一掃功能,其余功能自行加上。
那我們只需要判斷訪問設(shè)備是安卓還是IOS即可
首先在index.html頁面中引入JSSDK文件
然后在App.vue文件中
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
const url = location.href
const res = await getSignature(url) //獲取設(shè)置config的參數(shù)
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('設(shè)備已經(jīng)可以使用')
})
}
具體到某個頁面的時候 例如:news下
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
const url = location.href
const res = await getSignature(url) //獲取設(shè)置config的參數(shù)
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('設(shè)備已經(jīng)可以使用')
})
}
這僅限于在微信自帶的游覽器上。企業(yè)微信自帶的游覽器這方法是不行的。
通過微信企業(yè)瀏覽器掃碼獲取到的微信瀏覽器信息如下:(圖片摘取于CSDN)

微信客戶端掃碼獲取到的信息如下:

對比企業(yè)微信游覽其和微信游覽器的信息,多出了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) //獲取設(shè)置config的參數(shù)
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('設(shè)備已經(jīng)可以使用')
})
}
在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) //獲取設(shè)置config的參數(shù)
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('設(shè)備已經(jīng)可以使用')
})
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS開發(fā)中使用CoreLocation框架處理地理編碼的方法
這篇文章主要介紹了iOS開發(fā)中使用CoreLocation框架處理地理編碼的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-12-12
iOS App開發(fā)中使用設(shè)計模式中的單例模式的實例解析
單例模式是最簡單和基本的一種設(shè)計模式,下面我們就簡單解讀一下iOS中單例設(shè)計模式的用法,示例代碼還是為傳統(tǒng)的Objective-C,主要為了體現(xiàn)單例模式的思想,需要的朋友可以參考下2016-05-05
ios 流媒體播放器實現(xiàn)流程及FreeStreamer的使用的示例
本篇文章主要介紹了ios 流媒體播放器實現(xiàn)流程及FreeStreamer的使用的示例代碼,非常具有實用價值,需要的朋友可以參考下2018-01-01
iOS開發(fā)Masonry與Frame布局差異示例詳解
這篇文章主要為大家介紹了iOS開發(fā)Masonry與Frame布局差異示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
iOS App中UIPickerView選擇欄控件的使用實例解析
這篇文章主要介紹了iOS App中的UIPickerView選擇欄控件的使用,文中演示了兩個超詳細的例子,示例代碼為Objective-C,需要的朋友可以參考下2016-04-04

