天天看點

微信小程式使用wx.chooseMedia提示存在涉及違反國家法律法規和政策,稽核不通過的解決方案

問題場景:

在微信小遊戲/小程式使用wx.chooseMedia接口,允許使用者使用攝像頭或本地相冊的圖檔,稽核不通過,理由是存在涉及違反國家法律法規和政策,建議将遊戲角色或場景中,包括但不限于國家政治、上司、經濟活動,以及國家上司人等内容移除。

問題原因

使用本地相冊的圖檔沒有做圖檔校驗,也就是使用者能夠選一些國家上司人的照片使用,哪怕不上傳雲端在本地使用,在目前政策下也是不允許的(…)

解決方案

最簡單粗暴的解決方案:

1.調用wx.chooseMedia時把[‘album’, ‘camera’]裡的’album’讀取相冊功能去掉,隻留’camera’,稽核就過了,缺點是使用者隻能拍照不能用相冊裡的圖

有背景服務端的解決方案:

1.官方标準方案:把圖檔上傳到服務端,使用官方接口media_check_async進行校驗,校驗成功後才能使用該圖檔。需要注意的是media_check_async是異步方法也就是不會立刻傳回結果(“異步檢測結果在 30 分鐘内會推送到你的消息接收伺服器”),實時性比較高的項目不能用這個接口。還有一個同步校驗的方法,是老版本的最新官方文檔找不到了但還能用,有興趣可以自己找下,這個同步方法在圖檔大小和調用頻率上都有限制,使用的話需要對上傳圖檔做壓縮。

2.投機取巧方案:建立接口(是否為正式環境),傳回true或false,在小程式加載時擷取,如果為true,則開啟[‘album’, ‘camera’],如果為false則隻留[‘camera’]。送出稽核後讓接口傳回false,等稽核通過了再改成true,優點是靈活切換是否開啟本地相冊,稽核的時候關掉就行了。缺點是需要對代碼做混淆,以及稽核期間使用者無法使用相冊功能。

(後續編輯:此方案有優化,接口不傳回bool了,改成傳回string,前端代碼改成 if(接口傳回===‘a’){隻開啟攝像頭}else{開啟攝像頭和相冊} 第一次送出稽核的時候讓接口傳回a,稽核通過。然後下一次提審的時候順便把等于’a’改成等于’b’,讓接口傳回b,這樣線上版本的邏輯就變成了b等于a,不成立則保留了攝像頭和相冊,稽核版本b等于b隻開啟攝像頭。第三次提審的時候順便把等于’b’再改成等于‘c’并讓接口傳回c, 這樣稽核版本永遠相等隻開啟攝像頭,線上版本因為是上一個版本條件是前一位是以永遠不成立就一直開啟全部,這方案能保證稽核期間使用者也一直能使用相冊)

沒有背景服務端的解決方案:

1.投機取巧方案:如果小程式小遊戲隻是本地用,沒有任何後端互動,那為了過審特意搭個後端屬實沒必要,有個方案就是大家都知道非首次送出的稽核時間一般都在3天以内(首次送出可能3-6天。信用分低的話時間更長),是以代碼可以這樣寫:如果我打算1月1号提審,就在程式裡判斷 if(目前時間<1月4号){wx.chooseMedia隻開啟camera} else {wx.chooseMedia同時開啟camera和album}。該方案優點是無需搭建後端,缺點也很明顯需要做代碼混淆,1月4号前使用者無法使用相冊功能,稽核時間如果過長也會導緻不通過。但相比搭建個後端,這點困難算啥…

還有其他更好的方案歡迎留言(既然是投機取巧的方案,官方肯定是抓到就ban的,自己用用就好别宣傳到開放社群去…本部落格對後果不負責,推薦大家還是使用官方的解決方案)