以前分享過一篇轉載的微信分享填坑文章vue
基本涵蓋了微信分享功能開發的基本操做。android
實際項目中,在作微信分享追蹤的時候,遇到了一個百思不得其解的問題。ios
在加入了用戶分享追蹤功能
以後,頁面已經加載完成的狀況下,安卓分享功能沒有任何問題,ios卻老是分享失敗。後端
項目需求是,咱們須要對用戶的分享行爲作追蹤,對用戶從哪一個人分享的連接進來的作記錄。因此每一個用戶有一個惟一的分享碼。瀏覽器
用戶A分享出去,連接上帶有他本身的分享碼。 用戶B點進連接的一瞬間,把當前url上的分享碼傳給後端作記錄,同時替換上本身的分享碼。bash
我使用替換參數的方式是直接修改router的query服務器
this.$router.push({
name: 'routername' //當前路由名稱
query: {
sharecode: 'sharecode' //修改後的sharecode
}
})
複製代碼
加上追蹤記錄以後,卻發現安卓設備可以分享成功,也能拿到正確的記錄。可是ios老是分享失敗,就算切換到其餘頁面也依然沒法分享,只有在刷新頁面後才能分享成功。。。微信
amazing...微信開發
簽名是後端和微信服務器作的事情,我要作的就是把要作簽名的url傳給後端。框架
作法很簡單,就是監聽路由變化(只變化了參數也須要監聽),每次變化時給後端傳url。
由於無論從什麼渠道點入咱們的連接,都會有分享碼生成並加在路由上,致使一開始頁面就會觸發兩次路由變化;並且,若是用戶沒有登錄的話微信爸爸還會強行跳轉受權,致使頁面重載一次,因此若是一個用戶沒有登錄,那頁面會觸發4次路由變化!那就須要和後端交互四次。
不能忍!
最後商議的是,默認進入頁面的第一次不作記錄 ,這樣首屏最多隻須要交互2次(劃重點,後面要考)。
以上故事在告訴咱們人爲何要做死
好了咱們回到ios分享失敗的問題上
chorme瀏覽器調試模式沒發現毛病,微信開發者工具也沒發現有問題,就是在ios真機上出現了這個bug。(微信開發者工具竟然是一個披着ios外衣的android??dev環境是ios,表現行爲卻和安卓一毛同樣)
千辛萬苦線上線下調試,最後發現是真機上在用本身的分享碼
替換別人分享碼
的這個步驟出現了問題。
安卓設備可以正常替換sharecode參數,可是ios卻沒有替換成功。後端作簽名使用的url是拼接sharecode替換後的連接,因此致使簽名和路由匹配不上。
確認使用路由參數替換的方法沒有問題,由於安卓環境可以正常替換。因此ios環境該怎麼辦??
這就引伸出了一個問題:vue框架下ios如何在當前頁面替換路由參數??
最後是很不優雅的強行重載 - -,相信我會找到解決辦法的 > _ <
就這樣第一天結束了 ——————————時間到了次日———————————— 繼續填坑
重載這麼噁心的方法固然不行了,不要虛繼續幹
索性把全部的url都alert出來。
而後,在ios上發現了一個神奇的現象
http:example.com/a&share=111
http:example.com/a&share=111
,緊接着下一步執行替換分享碼操做,將share替換成222,即理論上url會變成http:example.com/a&share=222
。http:example.com/a&share=222
。111
!wtf !?ok,緊接着我進行了下一步操做
111
!(你沒看串行,就是和上面一毛同樣)以上現象能夠得出一個結論,在ios環境下(安卓分享正常因此沒有測試是否是也有一樣的行爲),若是簽名驗證失敗,那麼無論路由如何變化,不只分享自己不會成功,並且分享出去的路由永遠都是第一次加載時的路由。
後來查閱資料才發現,ios的簽名驗證機制和安卓不同。
這說明了啥,ios環境下,微信只認第一次進來的路由啊!
讓咱們再把和後端交互部分的重點重複一遍:默認進入頁面的第一次不作記錄 ,這樣首屏最多隻須要交互2次
不記錄你個大頭貼
最後,判斷環境是ios的時候,老老實實把第一次的路由給記上。
你問我那ios環境下的首屏最多須要加載4次啦?
認真聽講的小朋友,獎勵你一朵大紅花~
可是!ios只認第一次的路由,我只須要傳第一次路由給後端就行,監聽路由變化都!不!用!了!(微笑)
掘金主頁:如意同窗
簡書主頁:如意同窗
b站直播地址,每週五晚不按期直播,偶爾寫代碼,偶爾讀書,偶爾看學習視頻,偶爾乾點亂七八糟的(反正和學習有關),歡迎一塊兒學習!yo~