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