關(guān)于微信小程序opensetting授權(quán)踩過(guò)的坑

時(shí)間點(diǎn)是2018年12月,寫(xiě)了一版小程序其中有兩處授權(quán)的地方,一處是canvas繪圖保存到手機(jī),一處是微信健康獲取步數(shù)。

因?yàn)槲⑿沤】敌枰峤籪orm_id用于消息推送,點(diǎn)擊事件是基于一個(gè)formtype為submit的button觸發(fā)的,然后bug就來(lái)了,授權(quán)相關(guān)的代碼大概是這個(gè)樣子的(run_auth_deny會(huì)在onshow的時(shí)候根據(jù)getSetting的狀態(tài)進(jìn)行更新):


這里是onshow時(shí)檢查授權(quán)狀態(tài)

這里是點(diǎn)擊后觸發(fā)的函數(shù)

ios毫無(wú)問(wèn)題,但是測(cè)試小姐姐的安卓機(jī)在拒絕了授權(quán)之后死活無(wú)法再次呼起授權(quán),也就是代碼段最上面的openSetting根本打不開(kāi)。然后我就開(kāi)始了各種測(cè)試。

先說(shuō)說(shuō)官方文檔,為了避免無(wú)良開(kāi)發(fā)者無(wú)腦調(diào)用openSetting接口,微信在9月份對(duì)openSetting接口的調(diào)用進(jìn)行了調(diào)整(順便吐槽一下官方還說(shuō)可以在點(diǎn)擊后的非手寫(xiě)promise異步回調(diào)或者模態(tài)框的成功回調(diào)內(nèi)觸發(fā),然而這些都是不能兼容所有設(shè)備的,至少現(xiàn)在是不行的):

官方的意思是禁止了在類(lèi)似onshow等生命周期函數(shù)里直接呼起openSetting,然后我測(cè)試了一下,確實(shí)直接wx.openSetting()沒(méi)法進(jìn)入設(shè)置頁(yè),但是在ios端這么寫(xiě)還是能在頁(yè)面一加載就進(jìn)入設(shè)置頁(yè)的(測(cè)試小姐姐的安卓并不能進(jìn)入~),嗯。。。那可真蠢。



看了這么多先說(shuō)說(shuō)解決方案吧,一些異常的兼容性放在最后再吐槽。目前我掌握的兼容寫(xiě)法是這樣的:

wxml要這么寫(xiě)(其實(shí)就是放棄了form_id的搜集。。。),利用官方的第二種解決方案(如果想要用wx:if wx:else控制wxml顯示/隱藏<button open-type="opensetting">,兼容性會(huì)好很多,文章旨在討論只使用js來(lái)解決不同客戶(hù)端openSetting的兼容性問(wèn)題~)

js這么寫(xiě)或者像最上面那么寫(xiě)都沒(méi)有問(wèn)題,即可以每次點(diǎn)擊時(shí)都getSetting,也可以在onshow時(shí)getSetting記錄授權(quán)狀態(tài),點(diǎn)擊時(shí)直接進(jìn)行想要的操作。

這么寫(xiě)每次點(diǎn)都會(huì)去getSetting,對(duì)性能有些不好的影響,但是利用了微信潛在的getSetting的成功回調(diào)在ios端可以無(wú)腦調(diào)用openSetting這一點(diǎn)會(huì)稍微放心一些,畢竟到處都是坑。

順帶吐槽一下授權(quán)失敗回調(diào)的形參e,上周里面的錯(cuò)誤碼字段還是e.errCode,這周就變成了e.err_code,然后失敗的messge還用的駝峰命名e.errMsg。不知道啥時(shí)候又會(huì)被亂改,真是無(wú)力吐槽。


補(bǔ)充說(shuō)明一下,用每次都getSetting的js,wxml如果還像最上面收集form_id那么寫(xiě)的話

在拒絕授權(quán)后,會(huì)進(jìn)入到else if中,我們安卓測(cè)試機(jī)無(wú)法執(zhí)行else if中的opensetting


最后吐槽一下其他寫(xiě)法,比如說(shuō)點(diǎn)擊以后什么都不管,直接觸發(fā)獲取微信運(yùn)動(dòng)的數(shù)據(jù),因?yàn)橹熬芙^過(guò)授權(quán),這個(gè)授權(quán)操作一定會(huì)失敗,并進(jìn)入fail回調(diào)。


ios端毫無(wú)問(wèn)題,打開(kāi)了設(shè)置頁(yè)面。我們的安卓測(cè)試機(jī)在拒絕授權(quán)后會(huì)走到getWeRunData的失敗回調(diào),并且不執(zhí)行openSetting?。?!而且參數(shù)e里面只有errMsg這個(gè)字段,相比ios少了err_code字段。具體原因不明。。。。。。

大致就是這么多了,估計(jì)以后這些問(wèn)題都會(huì)慢慢修復(fù),工作不到1年的新手上路,語(yǔ)文學(xué)的也不好,記錄一下自己的成長(zhǎng)歷程~看官多多包涵~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容