開發|如何在小程序中,獲取微信群 ID?
那麼,如何正確地在小程序里,加入這個能力呢?在使用開發者工具的時候,如何進行調試呢?
今天,「知曉程序」就來告訴你,如何正確地在小程序里讀取微信群 ID。
關注「知曉程序」公眾號,在微信後台回復「ID」,查看小程序獲取群 ID Demo 的源碼。
兩種讀取方式
根據官方文檔,我們可以通過以下兩個方式,讀取到微信群 ID 的信息:
- 當用戶成功地將小程序頁面微信群的時候,小程序的回調中可以獲取分享目標的微信群 ID。
- 當用戶從微信群進入小程序頁面的時候,小程序啟動時可以獲取用戶進入小程序的渠道群聊 ID。
首先,我們來聊聊用戶成功地將小程序頁面微信群的情況下,如何讀取目標微信群的 ID。
此次介面更新,控制小程序頁面右上角菜單中的「分享」按鈕顯示與消失,不再完全依賴頁面邏輯文件中是否擁有 onShareAppMessage
函數。
現在有兩個新的介面,可以決定小程序是否顯示分享菜單:wx.showShareMenu
(顯示分享菜單)和wx.hideShareMenu
(隱藏分享菜單)。
在 wx.showShareMenu
介面中,設定withShareTicket: true
,即可在用戶分享時,獲取到shareTickets
。
同時,在此次介面更新中,微信為小程序更新了 onShareAppMessage
介面。
原本這個介面的 return
只能接受title
、path
等控制分享卡片內容的參數。在此次更新後,return
可以在分享成功、失敗、完成(成功和失敗)下,執行特定的回調函數。
在回調函數中,我們可以插入參數,以便小程序將微信群信息傳入。小程序在檢測到用戶分享動作之後,會將 shareTicket
帶入到這個參數中,並執行相應回調函數。
來看代碼:
Page({
onLoad {
wx.showShareMenu({
withShareTicket: true //要求小程序返回分享目標信息
})
},
// 其他的頁面函數、生命周期函數等
onShareAppMessage {
return {
title: "頁面分享標題",
path: "/pages/path/to/target",
success(res){
console.log(res.shareTickets[0]) // 奇怪為什麼 shareTickets 是個數組?這個數組永遠只有一個值。
}
}
}
}
接下來,是通過微信群進入小程序情景下的微信群 ID 獲取。
用戶進入小程序時,小程序可以在 app
對象中的onLaunch
生命周期函數中,獲取到進入小程序的渠道(情景值)。
當情景值為 1044
,即通過帶shareTicket
的微信群分享卡片進入小程序,小程序就可以額外獲取到shareTicket
。
這一步的代碼就比較簡單了:
App({
onLaunch: function (ops) {
if(ops.scene == 1044){
console.log(ops.shareTicket)
}
}
})
有了 shareTicket
,我們就可以通過調用wx.getShareInfo
函數,獲取到目標微信群(加密過後的)ID 了。
wx.getShareInfo({
shareTicket: shareTicket,
complete(res){
console.log(res)
}
})
需要注意的是,如果當前用戶未登錄(從未調用 wx.login
或session
過期),這些介面都會出現調用失敗的情況。
另外,當分享失敗或數據獲取失敗,這些函數只會調用 fail
(失敗)和complete
(完成)回調,而不會調用success
(成功)回調。
「知曉程序」建議直接使用 complete
回調,並通過數據包中的錯誤碼,判斷介面是否成功調用,以免出現調用失敗時小程序無相應反應的情況。
為了便於開發,微信很貼心地在開發者工具中加入了分享介面調試功能。下面,「知曉程序」就來告訴你,調試分享介面的具體方法。
首先是用戶的分享動作調試。
在目標頁面中,點擊右上角的「更多」按鈕,再點擊「轉發」。這時候,頁面會變成「發送給好友」,裡面有開發者工具提供的 9 個模擬群,任君選擇。
隨意點擊一個群,進行模擬分享動作,小程序就可以獲取到模擬群的加密數據。
接下來,是獲取進入小程序的微信群信息的調試方法。
點擊左側「編譯」按鈕下方的「自定義編譯」按鈕,在「設置應用的進入場景」,選擇「1044:微信群會話中的小程序消息卡片(帶 shareTicket)」。
選擇場景之後,對話框下方會多出「選擇進入的群」。隨便選擇一個測試群,再點擊確定,你就可以開始調試了。
如果你利用 wx.getShareInfo
介面,調試出的結果是這樣,那麼恭喜你,你的代碼沒毛病,可以直接進入下一個步驟——數據解碼。
為了保證用戶隱私安全,微信特意將微信群 ID 進行了非常複雜的加密。當加密數據直接發到伺服器後,伺服器還需要再進行一步解碼,才能正常使用微信群信息。
如果你之前做過小程序中用戶數據的解碼,那麼你可以將同樣的代碼套用到解碼微信群數據上,因為二者的加密演算法是一模一樣的。
如果你沒有做過類似的解碼工作,也不用擔心,微信提供了包括 PHP、Node.js 等環境下的解碼 demo 代碼。我們只需從小程序開發文檔中下載 demo 代碼,再將其引入,也能輕鬆進行解碼。
我們以 Node.js 為例,演示如何使用官方的解碼 Demo:
- 解壓官方 Demo 代碼包,在解壓後的文件夾中找到
Node
這個文件夾。 - 通過終端(Terminal)進入這個文件夾,執行
npm init
命令,將它變為 Node.js 應用。 - 修改文件夾中的
demo.js
,將示例代碼替換成實際信息,包括小程序 App ID、登錄用戶的 Session Key、加密數據等等。 - 在終端中,執行
node demo.js
命令 。
執行後的結果如下:
比較有意思的是,在宣布這個消息當天進行調試,分享介面仍可以獲取到微信群名稱,但現在已無法正常獲取。不知道是有意為之還是 bug 使然。
但是,微信群的唯一 ID(openGId
)仍然可以正常獲取。開發者依然可以通過這個 ID 識別不同的微信群,進而判斷用戶通過哪一個微信群進入小程序。
※亞馬遜發布了一款帶屏幕的 Echo 設備,這才是智能音箱的最佳形態
※這一次,老羅的堅果 Pro 終於做對了
※「人肉搜索」一時爽,但你知道這是犯罪嗎?
※MUJI 在日本要跑郊區開綜合性大門店,不是奧特萊斯折扣那種
TAG:愛范兒 |
※DIY小程序開發平台上線,智能小程序開發時代已經來臨
※開發小程序多少錢?哪裡可以開發小程序?如何選擇靠譜的小程序開發公司
※大數據分析下的小程序應用該如何選擇和開發?
※小程序OS,讓開發更簡單
※小程序開發真福音,小程序雲開發功能上線!
※全網獨家首發:小程序·雲開發課程免費開放!
※程序員該如何轉型 5G 開發?
※小程序·雲開發最佳實踐:零基礎如何快速上手小程序開發?
※「小程序·雲開發」開放
※Omi×雲開發搞定小程序
※Opera多年來一直在開發瀏覽器和其他應用程序,現在它正在邁出下一步
※蘋果似乎阻止了開發者在應用程序中使用它的表情符號
※被人工智慧挾裹的程序員們,該如何切入 AI 開發?
※整合iOS和Mac應用程序?蘋果讓開發者更順手
※搞笑GIF:現實程序猿與電影中程序猿
※「小程序·雲開發」重磅上線,讓小程序開發更高效!
※新小程序課程預覽與提前開發說明
※我最在行小程序模式開發
※微軟開發了一款應用程序可以根據表情符號對你的面部表情進行評分
※微盟CEO孫濤勇:小程序還在蓄勢期,到底該怎麼玩