這個問題困擾了我很久裸弦,相信有很多人也都碰到過,因為關(guān)于這個坑的提問能百度出一堆作喘,之前也一直在網(wǎng)上尋找解決方案理疙,有些文章要么一筆帶過,有些要么不適用泞坦,姿勢始終不正確窖贤,還好,通過不斷的嘗試與摸索贰锁,終于搞定了赃梧。
先說問題,做過傳統(tǒng)多頁面應用微信分享的人都知道豌熄,不管是Android還是IOS上授嘀,在需要做自定義分享的頁面上做一次簽名和注入就可以了修己,只要簽名正確承璃,就不會有問題。但是對于SPA的應用尖坤,表現(xiàn)的就很奇葩囱持,我的問題是Android分享正常夯接,但是在IOS上始終報"Invalid Signature",而有些人是Android有問題纷妆,而IOS沒問題盔几,從jssdk文檔上看,這個可能是android對于pushState的支持問題掩幢,在此不討論這個逊拍。
由于使用的是vue-router做頁面跳轉(zhuǎn),而問題也出現(xiàn)在這里际邻,IOS對于URL的處理與Android有差異芯丧。對于Android而言,它的每次路由的變換世曾,URL都跟著改變缨恒,也就是說它的Landing Page和Current Page同時在變,這就和傳統(tǒng)應用一樣轮听,在每個頁面做簽名就行骗露。但是對IOS而言,每次路由的變換血巍,URL卻不變萧锉,也就是說雖然它的Currernt Page在變,但是它的Landing Page不變述寡,這就是讓人很蛋疼的地方柿隙,也不知道是微信的問題還是safari的問題,當初想搞清楚這個還給微信團隊發(fā)了封郵件鲫凶,很顯然优俘,他們很忙沒有理我。
經(jīng)過反復的試錯掀序,起初帆焕,將一般分享的問題解決了,但是如果配些諸如GA的跟蹤參數(shù)不恭,或者進行二次分享還是會有問題叶雹,最后對URL又進行了一次編碼處理,總算一切正常换吧。
解決方案也不麻煩:
1折晦、對于Android,用每個頁面的URL做簽名參數(shù)沾瓦,對于IOS满着,使用入口URL進行簽名(切記)谦炒,我是使用VUEX進行url的更新
2、一定要在mounted中做簽名的初始化操作风喇,反正我的created就是不成功宁改。
3、對需要簽名的URL進行encodeURIComponent編碼魂莫,這個主要處理URL帶參的分享問題还蹲。
4、在后臺再對用于簽名的URL進行一次解碼耙考。
踩了這么長時間的坑谜喊,趕緊給后人栽個樹,我這個只是history模式的解決方法倦始,hash模式的問題不在這個討論范圍內(nèi)斗遏。