[踩坑]小程序分享票據shareTickets

小程序的分享票據,可以理解為每一次分享的一個唯一ID。有什么用處呢?太有用處了,比如分享到群。

微信小程序

怎么獲取這個shareTickets呢?有兩種方式

1、分享的回調里

onShareAppMessage: function (res) {
    if (res.from === 'button') {
      // 來自頁面內轉發按鈕
      console.log(res.target)
    }
    return {
      title: '自定義轉發標題',
      path: '/page/user?id=123',
      success: function(res) {
        res.shareTickets // 單聊是沒有的
    },
      fail: function(res) {
        // 轉發失敗
      }
    }
  }

2、app的onLaunch

App({
    onLaunch(res){
        res.shareTickets
    }
})

注意必須要在分享前調用wx.showShareMenu方法,否則是不會帶分享票據。

最初的版本是只有這兩個地方可以獲取分享票據的。但是這個的設計是極其不合理,為什么呢?因為onLaunch的回調場景有限制。

當小程序初始化完成時,會觸發 onLaunch(全局只觸發一次)

全局只執行一次,所以第二次進來是不會執行。當然我們有辦法,可以緩存shareTickets。可是,一旦在群里多次分享,shareTickets的管理就變得極其蛋疼,可能會取不到第二第三次分享的shareTickets。

這是個很大的坑,后面官方又在onShow的回調中加入了獲取shareTickets的邏輯,這次應該可以避免這個問題。

分享票據的有效期

微信

官網文檔沒有明確的說明有效期,實際操作過程又遇坑。getShareInfo是用shareTickets去換取加密信息,這個加密信息有什么用?獲取群ID。

換回的encryptedData和iv加密信息傳給后臺處理解密。

encryptedData才會有有效期,有效期過期了怎么辦?重新getShareInfo是無效的,必須重新wx.login。

我們的請求流程是這樣:

  • 進入小程序頁面,onShow
  • wx.login成功
  • 獲取shareTickets
  • getShareInfo換取encryptedData
  • 請求CGI,POST發送encryptedData
  • 后臺處理請求,返回給前端
  • 如果encryptedData失效
  • 重新wx.login
  • 繼續后面的邏輯

一個完整的請求鏈太長了,導致用戶體驗并不太好。我不知道小程序框架設計有沒有考慮這一點。

層層回調嵌套,簡直反人類。

getShareInfo

這個有什么坑呢,不能頻繁請求,應該算是一個坑吧。千萬不要在setInterval這里面調用這個接口。先緩存住加密encryptedData數據,如果過期,則重新getShareInfo。

即使不過期,也不要頻繁請求,因為getShareInfo耗時200-300ms,等不起。

單聊和群聊

單聊是無法獲取到shareTickets,總覺得以shareTickets來區分單聊和群聊場景是不太合理的事情。

不要說還有sence的值,那個只在onLaunch回調里面才有。

shareTickets用處就是可以在群里玩小程序。比如常見的群公告,群打卡。說白了,就是讓普通開發者拿到群ID。具體小程序,大家可以搜搜看。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容