最近,微信小程序掃碼簽到工具正式上線了。canvas
回首過去一個月的歷程,是時候該停下來作個階段性的總結了,回顧得失,以便持續改進。這篇文章,就總結一下過去跳過的那些坑吧。小程序
小程序某些技術細節與經常使用技術存在不一致。文檔中雖有說起,若是不仔細看容易跳坑。微信小程序
小程序的文檔太簡略,沒有註明支持哪些功能,哪些不支持,只有用了才知道。服務器
小程序的bug。微信
小程序支持經過post獲取小程序碼(有點像菊花)。嘗試經過wx.request向微信服務器獲取小程序碼的圖片,結果發現返回的結果沒法顯示。開始懷疑代碼有問題,調試以後,發現微信服務器返回的結果正確,而小程序會自動把二進制結果轉碼。更鬱悶的是,這種轉碼丟失了文件內容,而且轉換是不可逆的。函數
因而,咱們改方案,把服務器當中轉站,讓小程序使用wx.downloadFile從服務器下載圖片。在收到小程序下載圖片的請求以後,服務器直接和微信服務器獲取小程序碼的圖片,而後以附件的形式返回給小程序。工具
問題解決。post
①掃碼簽到中用到了二維碼。 在開始的版本中,咱們準備在Canvas上直接繪製二維碼,接着使用wx.canvasToTempImage函數保存爲image文件,而後經過Image組件加載。開發工具
通過調試,一切順利。運行的時候呢,發現有時候在繪製完圖片以後,調用wx.canvasToTempImage函數失敗。這種狀況在調試沒法重現,運行的時候偶爾出現,不穩定。測試
仔細檢查了代碼,沒問題啊。Google以後,有網友提出瞭解決方案,在drawImage完成以後,最好等3秒鐘再調用wx.canvasToTempImage,以保證保存成功。
② Canvas和Image都不支持Base64圖片,Image沒法保存。
最初的方案中,咱們本身生成二維碼,後來爲了兼容微信的「掃一掃」功能,咱們決定改用小程序碼。
開始,咱們把Image的src設置爲Base64格式,從服務器上經過request獲取圖片的Base64編碼。小程序開發工具和iPhone上面測試都沒有問題,惟獨Android手機上沒法正常顯示圖片。哦,原來在Android上,Canvas和Image都不支持Base64圖片。但是...小程序開發文檔中並無這方面的說明啊。
怎麼解決Android手機上的這個問題呢?若是把Image改爲URL形式呢,小程序沒法保存圖片,以至即便是相同的圖片,每次都要從服務器獲取,這又加劇了服務器的負擔。這樣吧,使用wx.downloadFile把文件下載到本地,而後再處理。
3. 小程序碼的識別率過低。
上文提到,最初咱們使用的簽到二維碼是本身生成的二維碼(QRCode),正方形的那種。識別率高,缺點是不支持微信「掃一掃」。在使用過程當中,咱們發現,至關數量的用戶看見二維碼,第一反應會使用微信「掃一掃」去掃二維碼。爲了知足這個需求,那就把二維碼替換成微信的小程序碼(有點像菊花)吧。
但是,和方形二維碼相比,識別小程序碼的成功率很是低。小程序碼距離遠點、稍微有些變形或方向沒有對正均可能形成識別失敗。一種典型的使用場景是:簽到發起者把小程序碼投影到大屏幕上,因爲投影儀的分辨率和電腦不一致,圖片可能產生變形。這種狀況下,簽到者怎麼掃都沒法識別。而以上全部這些,對於方形的二維碼,全都不是問題。
因爲小程序碼的實現和識別原理沒有開放,咱們也無法採起圖片糾錯、還原等措施改善識別效果。
魚和熊掌,真的很難兼得。
關於轉發,在官方文檔裏是這麼寫的。
在 Page 中定義 onShareAppMessage 函數,設置該頁面的轉發信息。
只有定義了此事件處理函數,右上角菜單纔會顯示 「轉發」 按鈕
用戶點擊轉發按鈕的時候會調用
因而,在實現中,咱們定義了此方法,把方法體留空。而後紕漏出現了,當用戶簽到以後再分享,收到的人一點擊分享的連接會進入簽到狀態。
查了好久,才發現緣由是在分享的時候,把當前頁面加載時候的參數也給分享過去了,但是,onShareAppMessage函數裏面什麼都沒作啊。
看來,什麼都不作的話,它就會默認分享頁面加載時的參數。爲了修復這個bug,就嘗試return一個object,並給這個object賦值path和title兩個參數。
終於解決了。
除了上面提到的以外,還有很多微小的bug,不一而足。雖然很快就解決了,相對開發源生代碼而言,仍是有些影響開發效率的。
過去的這一個月,有些累。
相對以前鋪天蓋地的小程序宣傳,其實它沒咱們想象中的那麼好。固然,不得不認可,微信平臺的龐大用戶量和小程序無需下載的便利性,這是國內其餘任何平臺沒法作到的。
對於掃碼簽到工具這種輕量級的應用,開發微信小程序或許是比較好的選擇。
至於複雜的應用,是否要開發小程序版本,可能就得慎重了。
歡迎關注我微信公衆號,終端研發部,一個致力於技術研發的公衆號!