微信小程序轉發涉及如下4個方法:小程序
一、Page.onShareAppMessage({})
設置右上角「轉發」配置,及轉發後回調函數返回 shareTicket 票據
二、wx.showSahreMenu()
用戶點擊右上角後,顯示「轉發」按鈕
三、wx.hideShareMenu()
隱藏轉發按鈕,無視 Page.onShareAppMessage({})
四、wx.getShareInfo({})
根據 shareTicket 獲取已加密的羣信息微信小程序
把轉發流程切分:轉發前配置->轉發時->轉發到羣組後打開->二次轉發
轉發流程圖:數組
U1: 用戶
T1,T2,T3:表示轉發票據,即 shareTicket
G1,G2,G3:羣組微信
1.轉發前配置
在頁面 onLoad 方法添加數據結構
1 wx.showShareMenu({ 2 withShareTicket: true 3 })
withShareTicket 爲 true 時,表示容許轉發時是否攜帶 shareTicket。
shareTicket 是獲取轉發目標羣信息的票據,只有擁有 shareTicket 才能拿到羣信息,用戶每次轉發都會生成對應惟一的shareTicket 。ide
shareTicket 有兩個用途:函數
2.轉發時獲取羣信息
當某個小程序被轉發到羣組後,開發者想獲取到轉發目標羣組信息,將用戶和羣組作某種綁定關係(openId + openGid)。加密
1 onShareAppMessage: function () { 2 return { 3 title: '自定義轉發標題', 4 path: '/page/user?id=123', 5 success: function(res) { 6 var shareTickets = res.shareTickets; 7 if (shareTickets.length == 0) { 8 return false; 9 } 10 wx.getShareInfo({ 11 shareTicket: shareTickets[0], 12 success: function(res){ 13 var encryptedData = res.encryptedData; 14 var iv = res.iv; 15 } 16 }) 17 }, 18 fail: function(res) { 19 // 轉發失敗 20 } 21 } 22 }
shareTickets 是一個數組,每一項是一個 shareTicket ,對應一個轉發對象,轉發給用戶不會包含shareTicket。spa
拿到 shareTicket 以後,使用 wx.getShareInfo({}) 方法傳入 shareTicket 參數,wx.getShareInfo({}) 裏回調函數中包含 已加密的羣信息和 向量IV。code
3.轉發到羣組後打開
用戶將小程序轉發到微信羣組後,羣成員打開小程序,經過 shareTicket,開發者就能將羣成員和羣組綁定起來(openId + openGid),基於羣組關係,小程序有更多的應用場景,例如:王者榮耀羣排行,摩拜單車。
1 Page({ 2 onLoad: function(opt) { 3 /** 判斷場景值,1044 爲轉發場景,包含shareTicket 參數 */ 4 if (opt.scene == 1044) { 5 wx.getShareInfo({ 6 shareTicket: opt.shareTicket, 7 success: function(res){ 8 var encryptedData = res.encryptedData; 9 var iv = res.iv; 10 } 11 }) 12 } 13 } 14 })
在羣組中打開小程序,頁面onLoad 或 onShow 方法包含 scene 和 shareTicket,須要判斷 scene 是否爲1044,若是不是則不包含 opt 中 shareTicket 參數。
4.二次轉發
二次轉發重複前3個步驟,沒什麼可說的,可是有一個方向值得探討,能否把小程序轉發路徑比做轉發鏈,進而生成轉發樹,用數據結構方法(樹、馬爾科夫鏈)處理髮現羣組與羣組,羣組與成員之間微妙關係。
如開頭那張圖,咱們很容易看出轉發鏈和轉發樹。 轉發鏈:U1 > G1 > G2 轉發樹:U1 > G1 > G2 & G3