vue單頁面應(yīng)用分享報錯invalid signature簽名錯誤

描述下問題就是vue單頁面應(yīng)用接入JS-SDK實現(xiàn)分享等功能(history模式副帶的頁面刷新問題和iOS、Android獲取url方式不同的兼容問題)掰吕、做好微信的配置后剂邮,開始測試的時候發(fā)現(xiàn)除第一次進入的頁面外iOS都簽名失敗洲愤,Android卻每次都能正確簽名颓芭。簽名失敗會導(dǎo)致非常尷尬的問題,分享出去就像這樣:

1524757994505.jpg

因為有指定不同頁面的分享禽篱,所以采用vue-router的history模式(如果使用hash模式,分享出去的地址微信會自動處理掉#后邊的部分馍惹,這樣分享出去的都是同一個頁面躺率,不能指定某個頁面)。再看如何配置微信分享功能万矾,官方是這樣說的:

  • vue-router切換的時候 都是操作的瀏覽器歷史記錄悼吱,真實URL為第一次剛進入時的URL。每次路由變化時都重新請求下簽名良狈,簽名的URL 用第一次進入時的URL后添。
    而history模式每次跳轉(zhuǎn)利用 history.pushState API 來完成 URL 跳轉(zhuǎn)而無須重新加載頁面,所以在每次路由url變化時都要重新調(diào)用一次api去注入實時的配置信息薪丁。
  • 所有需要使用JS-SDK的頁面必須先注入配置信息遇西,否則將無法調(diào)用(同一個url僅需調(diào)用一次,對于變化url的SPA的web app可在每次url變化時進行調(diào)用,目前Android微信客戶端不支持pushState的H5新特性严嗜,所以使用pushState來實現(xiàn)web app的頁面會導(dǎo)致簽名失敗粱檀,此問題會在Android6.2中修復(fù))
我做了個簡單的實驗 ,在微信ios手機中有
A: http://www.xx.com漫玄、B: http://www.xx.com/B 兩個頁面
主頁面是A頁面茄蚯,就一個按鈕負(fù)責(zé)跳轉(zhuǎn)b頁面
 <router-link to="/B">跳轉(zhuǎn)B頁面</>
點擊A頁面的按鈕跳到B頁面
獲取當(dāng)前B頁面的window.location.href是http://www.xx.com/B
但是用微信自帶的復(fù)制鏈接功能復(fù)制當(dāng)前頁面的鏈接還是http://www.xx.com

所以配置里面的link一定要與你頁面url一致!

根據(jù)查閱的信息據(jù)說因為這些問題幾年都無法解決睦优,所以小程序應(yīng)運而生渗常,徹底解決了已上問題

解決問題的方法

1、beforeRouteEnter解決辦法參考
或者用 vue-router 的beforeEach

    vue組件中添加汗盘。

    beforeRouteEnter(to, from, next) {

          var u = navigator.userAgent;

          var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端

          if (isiOS && to.path !==  location.pathname) {

                location.assign(to.fullPath) // 此處不可使用location.replace

          } else {

                next()

          }

    } 

上面的方式等于刷新了頁面皱碘,但是在我的項目中需要有跳轉(zhuǎn)鏈接的統(tǒng)計埋點事件,所以我刷新頁面會影響我統(tǒng)計不到我的埋點隐孽,所以我選擇了下面的方式尸执,我到現(xiàn)在我都沒有理解后端做了什么配置,在某個項目缓醋,是可以的如失,我現(xiàn)在的項目卻沒有實現(xiàn),大致問了下他們的解決辦法就是
在你和后端同學(xué)對接的時候送粱,獲取jsSDK這個接口拿簽名串的時候褪贵,編碼encodeURIComponent(當(dāng)前頁面的鏈接),給他們,他們做了一個處理就是:

if(我們是否傳了當(dāng)前頁面的鏈接){
用我們是傳了當(dāng)前頁面的鏈接解碼后作為驗簽的url
}else if(當(dāng)前的請求是否有reffer){
用reffer作為驗簽的url
}else{
用域名作為驗簽的url
}
然后在把驗簽的url返回給我們方便我們查看是否一致

但是這樣解決的話脆丁,還是會有問題世舰,就是微信ios版復(fù)制當(dāng)前的鏈接,永遠(yuǎn)是進單頁面應(yīng)用的第一個鏈接地址
這個辦法在我的項目中沒有實現(xiàn)槽卫,所以我最終采用下面的方式跟压,最后完美解決,就留一個小bug歼培,微信ios版復(fù)制當(dāng)前的鏈接永遠(yuǎn)是進單頁面應(yīng)用的第一個鏈接地址

IOS:微信IOS版震蒋,微信安卓版,每次切換路由躲庄,SPA的url是不會變的查剖,發(fā)起簽名請求的url參數(shù)必須是當(dāng)前頁面的url就是最初進入頁面時的 Android:微信安卓版,每次切換路由噪窘,SPA的url是會變的笋庄,發(fā)起簽名請求的url參數(shù)必須是當(dāng)前頁面的url(不是最初進入頁面時的)
請求簽名的url跟當(dāng)前頁面的url(location.href)對比明明是一樣的!

解決方案:ios記錄進入的第一個頁面的鏈接window.entryUrl = location.href.split('#')[0]
        var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端
        let iosURL=''
        if (isiOS) {
            iosURL='?referer='+encodeURIComponent(window.entryUrl)

        }

繼續(xù)分享的坑之旅倔监,用第一個進入的url解決了ios上述的問題直砂,發(fā)現(xiàn)又大量爆發(fā)了微信分享失效的問題,但是我抓包浩习,開啟debug模式哆键,居然微信配置的config是ok,分享朋友debug模式也是報ok瘦锹,說明我應(yīng)該是可以的籍嘹,but,事實是殘酷的弯院,屢次失敗辱士,我必須得找到原因,不然老大不高興了听绳,然后我就找颂碘,一個重大發(fā)現(xiàn)出來了,就是我的我打開的鏈接地址https://xxx.com椅挣,就是第一個頁面ok头岔,后面的也是ok,但是顯示就是有問題的鼠证,但是https://xxx.com/帶了斜杠的居然沒有問題峡竣。我就問公眾號的小哥哥,你入口的地址是不是填的https://xxx.com量九,果不其然
接下來适掰,又有新的問題了颂碧,后退頁面的時候config雖然配置了,但是他會用后退前的最后一個頁面的分享文案

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末类浪,一起剝皮案震驚了整個濱河市载城,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌费就,老刑警劉巖诉瓦,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異力细,居然都是意外死亡睬澡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門艳汽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猴贰,“玉大人对雪,你說我怎么就攤上這事河狐。” “怎么了瑟捣?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵馋艺,是天一觀的道長。 經(jīng)常有香客問我迈套,道長捐祠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任桑李,我火速辦了婚禮踱蛀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贵白。我一直安慰自己率拒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布禁荒。 她就那樣靜靜地躺著猬膨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呛伴。 梳的紋絲不亂的頭發(fā)上勃痴,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音热康,去河邊找鬼沛申。 笑死,一個胖子當(dāng)著我的面吹牛姐军,可吹牛的內(nèi)容都是我干的污它。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衫贬!你這毒婦竟也來了德澈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤固惯,失蹤者是張志新(化名)和其女友劉穎梆造,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葬毫,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡镇辉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贴捡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忽肛。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖烂斋,靈堂內(nèi)的尸體忽然破棺而出屹逛,到底是詐尸還是另有隱情,我是刑警寧澤汛骂,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布罕模,位于F島的核電站,受9級特大地震影響帘瞭,放射性物質(zhì)發(fā)生泄漏淑掌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一蝶念、第九天 我趴在偏房一處隱蔽的房頂上張望抛腕。 院中可真熱鬧,春花似錦媒殉、人聲如沸担敌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柄错。三九已至,卻和暖如春苦酱,著一層夾襖步出監(jiān)牢的瞬間售貌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工疫萤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颂跨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓扯饶,卻偏偏與公主長得像恒削,于是被迫代替她去往敵國和親池颈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 上兩個星期做了一個公司用于推廣的小活動钓丰,選擇了Vue的單頁面應(yīng)用躯砰。【Vue單頁面應(yīng)用+微信網(wǎng)頁開發(fā)】套餐贈送了超值...
    大瑜_HiJack閱讀 8,495評論 5 33
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理携丁,服務(wù)發(fā)現(xiàn)琢歇,斷路器,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 本文首發(fā)于TalkingCoder梦鉴,一個有逼格的程序員社區(qū)李茫。轉(zhuǎn)載請注明出處和作者捷绒。 寫在前面 本文為系列文章命黔,總共...
    Aresn閱讀 9,531評論 0 42
  • 2017年7月9號客给,星期日跳仿,天氣:晴 今天帶著于浩晨去書店給輔導(dǎo)班的孩子們買學(xué)習(xí)資料,到了書店這小家伙看看這本也想...
    于浩晨閱讀 224評論 0 2
  • 只能共享不能復(fù)制的資源 嚴(yán)格實現(xiàn) 創(chuàng)建 內(nèi)存管理 子類化一個單例類 alloc調(diào)用被轉(zhuǎn)發(fā)給super, 意味著如果...
    飲長刀閱讀 275評論 0 1