摘要:我們的業(yè)務(wù)代碼是在自己的客戶端微信釘釘企業(yè)微信四個地方跑的同一套代碼。描述的具體描述是企業(yè)微信用戶在使用上傳圖片時,無反應(yīng)。
起因
今早一去公司,被組長遠(yuǎn)程發(fā)過來一個Bug,據(jù)說是用戶反饋的一個iOS的問題,在我們的業(yè)務(wù)中,有一個有關(guān)圖片上傳的問題。我們的業(yè)務(wù)代碼是在自己的客戶端、微信、釘釘、企業(yè)微信四個地方跑的同一套代碼。
Bug描述Bug的具體描述是企業(yè)微信用戶在使用上傳圖片時,無反應(yīng)。但是在安卓下運(yùn)行正常。在其他平臺運(yùn)行正常。
找測試復(fù)現(xiàn)該問題時,發(fā)現(xiàn)在安卓平臺下一切正常,但是在iOS端測試發(fā)現(xiàn),在iOS8上運(yùn)行正常,在iOS9往上的系統(tǒng)中,會彈出一個報錯
a.oldWXObj.invoke not a function解決過程
因?yàn)槭窃趇OS端有問題,所以我初步懷疑是因?yàn)槲覀冏约簩ζ髽I(yè)微信的相關(guān)SDK進(jìn)行二次封裝的時候出現(xiàn)了問題,所以我在自己的業(yè)務(wù)代碼中找到了調(diào)用wx.chooseImage的地方,然后console出相關(guān)的opts參數(shù)
wx.chooseImage(opts);//這是我們自己的調(diào)用 wx.chooseImage({ count: 1, // 默認(rèn)9 sizeType: ["original", "compressed"], // 可以指定是原圖還是壓縮圖,默認(rèn)二者都有 sourceType: ["album", "camera"], // 可以指定來源是相冊還是相機(jī),默認(rèn)二者都有 defaultCameraMode: "batch", //表示進(jìn)入拍照界面的默認(rèn)模式,目前有normal與batch兩種選擇,normal表示普通單拍模式,batch表示連拍模式,不傳該參數(shù)則為normal模式。(注:用戶進(jìn)入拍照界面仍然可自由切換兩種模式) success: function (res) { var localIds = res.localIds; // 返回選定照片的本地ID列表, // andriod中l(wèi)ocalId可以作為img標(biāo)簽的src屬性顯示圖片; // 而在IOS中需通過上面的接口getLocalImgData獲取圖片base64數(shù)據(jù),從而用于img標(biāo)簽的顯示 } });
發(fā)現(xiàn)opts沒有問題,然后開始查看企業(yè)微信的開發(fā)文檔,發(fā)現(xiàn)了這樣一段話
此接口在企業(yè)微信2.3及以后版本支持相機(jī)連拍(當(dāng)sourceType是camera時)
參數(shù)defaultCameraMode僅在企業(yè)微信2.4.20及以后版本支持
從2.4.6版本開始,IOS版企業(yè)微信瀏覽器將升級為WkWebView,因其不支持原有的直接通過localid作為img標(biāo)簽的src屬性來顯示圖片的方式。開發(fā)者需要采用通過getLocalImgData來獲取localid對應(yīng)圖片的base64數(shù)據(jù)。
看到了iOS,看到了有關(guān)圖片上傳,便以為是這里的問題,然后便開始對localid 進(jìn)行修改,改著改著發(fā)現(xiàn),不對啊,是調(diào)用的時候就報錯了,并不是因?yàn)樵?b>callback里面的問題啊。
然后把wx.chooseImage進(jìn)行alert,發(fā)現(xiàn)這個函數(shù)是存在的,但是發(fā)現(xiàn)還是有問題,代碼大概是這樣的
a.oldWXObj.invoke("chooseImage",params,callback)
然后我一直在想這個a.oldWXObj是什么東東,看源碼,并沒有找到這個東西,然后查看我們的sdk版本是1.0.0,最新的sdk版本是1.2.0。以為是因?yàn)閟dk版本的原因,然后把項(xiàng)目中的sdk升級,問題還是存在,看來不是sdk的原因,繼續(xù)探索。
后來沒有思路,去請教大佬,大佬給了個思路,在企業(yè)微信中開啟一個別的第三方的業(yè)務(wù),看看他們的圖片上傳是否也存在相同的問題,OK,照著這個思路往下繼續(xù)。我去,第三方的圖片上傳是沒有問題的,OK,那么肯定是我們自己的業(yè)務(wù)代碼的問題,然后把業(yè)務(wù)剝離出來,在新建兩個文件,一個采用我們自己封裝的sdk,一個不用自己封裝過后的sdk,直接調(diào)用wx的sdk,然后我把相關(guān)的wx.config給 復(fù)制 了過去,發(fā)現(xiàn)圖片上傳還是有問題,然后考慮是不是免登沒有通過呢? 試著調(diào)用其他的方法,發(fā)現(xiàn)獲取當(dāng)前位置、掃描二維碼、開始錄音這三個方法都可以成功調(diào)用,確定免登是通過了的,不是免登的問題。
大佬說換個思路,用Charles開始抓包查看第三方的實(shí)現(xiàn),這一部分才是寫這個 踩坑記錄的重點(diǎn) ,主要是看這個調(diào)試的過程,最開始用Mac自帶的Safari嘗試調(diào)試,發(fā)現(xiàn)企業(yè)微信并沒有把調(diào)試開放出來,只能通過抓包來一點(diǎn)點(diǎn)嘗試了,OK,在簡書上搜索Charles抓包,按照步驟,發(fā)現(xiàn)第三方是https,然后再萬能的簡書,抓包https,一切完成后。發(fā)現(xiàn)第三方也是調(diào)用的wx.chooseImage,那么說明我們調(diào)用的業(yè)務(wù)代碼沒問題啊,然后通過這種方式,用本地文件代替線上的文件進(jìn)行調(diào)試,把我們的相關(guān)業(yè)務(wù)代碼代替第三方的相關(guān)代碼,發(fā)現(xiàn)我們的代碼在第三方的應(yīng)用里面是正常運(yùn)行的。我去!!!這就奇怪了呀,這時,一天的時間不知不覺都過去了,還沒有解決問題,心中真的是,一言難盡!!!
最后,開始從頭梳理代碼,從第三方最開始調(diào)用企業(yè)微信的sdk開始一點(diǎn)點(diǎn)對比,把我們的相關(guān)信息跑在第三方平臺里,來,把wx.config粘貼過來、貼過來、過來、來......咦,這個config有一點(diǎn)不一樣誒!??!
//我們自己的配置 wx.config({ debug: false, appId: "", // 必填,企業(yè)微信的corpID timestamp: , // 必填,生成簽名的時間戳 nonceStr: "", // 必填,生成簽名的隨機(jī)串 signature: "",// 必填,簽名,見附錄1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2 }); //文檔標(biāo)準(zhǔn)的配置 wx.config({ beta: true,// 必須這么寫,否則wx.invoke調(diào)用形式的jsapi會有問題 debug: true, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。 appId: "", // 必填,企業(yè)微信的corpID timestamp: , // 必填,生成簽名的時間戳 nonceStr: "", // 必填,生成簽名的隨機(jī)串 signature: "",// 必填,簽名,見附錄1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2 });
?突然發(fā)現(xiàn)我們的代碼配置里面,沒有beta這個配置,加上,試一下,
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/96749.html
摘要:本文作者來自授權(quán)地址已解決在里設(shè)置了圖片路徑在里正常無誤但是在手機(jī)上是沒有顯示的解決辦法這段話位置放那么偏問題描述代碼截圖模擬器里的效果手機(jī)里的效果未解決用小程序自帶的底部導(dǎo)航組件的話沒法實(shí)現(xiàn)跟微信原生底部小紅點(diǎn)或者消息提醒的功能已解決使用 本文作者:dongtao 來自:授權(quán)地址 1.已解決在app.wxss里設(shè)置了圖片路徑,在IDE里正常無誤,但是在手機(jī)上是沒有顯示的,解決辦法...
摘要:本文作者來自授權(quán)地址已解決在里設(shè)置了圖片路徑在里正常無誤但是在手機(jī)上是沒有顯示的解決辦法這段話位置放那么偏問題描述代碼截圖模擬器里的效果手機(jī)里的效果未解決用小程序自帶的底部導(dǎo)航組件的話沒法實(shí)現(xiàn)跟微信原生底部小紅點(diǎn)或者消息提醒的功能已解決使用 本文作者:dongtao 來自:授權(quán)地址 1.已解決在app.wxss里設(shè)置了圖片路徑,在IDE里正常無誤,但是在手機(jī)上是沒有顯示的,解決辦法...
摘要:使用微信企業(yè)號回調(diào)的坑最近在做企業(yè)號回調(diào)的接口,之前做過幾個企業(yè)號的應(yīng)用了,每次接入到都報各種各樣的錯誤,算哥倒霉,該踩的不該踩的坑全踩了。 ThinkPHP 使用微信企業(yè)號回調(diào)的坑 最近在做企業(yè)號回調(diào)的接口,之前做過幾個企業(yè)號的應(yīng)用了,每次接入到Thinkphp都報各種各樣的錯誤,算哥倒霉,該踩的不該踩的坑全踩了。 這次掉坑里差點(diǎn)就放棄了,開發(fā)過企業(yè)號的都知道,企業(yè)號回調(diào)會經(jīng)過一個...
摘要:微信選擇圖片遇到的坑有個需求要在微信企業(yè)號里面做開發(fā),有個功能是選擇圖片,使用標(biāo)簽肯定是不管用了,手機(jī)上不能多選,所以使用了微信的提供的相關(guān),這個地方真的是有坑,記錄一下。 微信JS-SDK選擇圖片遇到的坑 有個需求要在微信企業(yè)號里面做開發(fā),有個功能是選擇圖片,使用input標(biāo)簽肯定是不管用了,Android手機(jī)上不能多選,所以使用了微信的JS-SDK提供的相關(guān)API,這個地方真的是有...
閱讀 3722·2021-11-23 09:51
閱讀 1386·2021-11-10 14:35
閱讀 4025·2021-09-22 15:01
閱讀 1293·2021-08-19 11:12
閱讀 392·2019-08-30 15:53
閱讀 1704·2019-08-29 13:04
閱讀 3441·2019-08-29 12:52
閱讀 3069·2019-08-23 16:14