通過服務端云函數(shù)可以獲取一個小程序任意頁面的小程序碼,掃描該小程序碼就可以直接進入小程序?qū)捻撁?,所有生成的小程序碼永久有效,可長期使用。小程序碼具有更好的辨識度,且擁有展示“公眾號關注組件”等高級能力。當用戶掃小程序碼打開小程序時,開發(fā)者可在小程序內(nèi)配置公眾號關注組件official-account
,用戶可以快捷關注公眾號。
wxacode.get 和 wxacode.createQRCode 總共生成的碼數(shù)量限制為10萬個,也就是究極你的小程序的一生,只能通過這兩種方式生成10萬個小程序碼和小程序二維碼,不過如果參數(shù)相同,是不算次數(shù)的,所以10萬個還是挺多的。
wxacode.get和wxacode.getUnlimited的區(qū)別
如果你的小程序頁面參數(shù)是動態(tài)更新的,建議使用wxacode.getUnlimited,如果你的小程序頁面包含了非常多的運營類的參數(shù),32個字符不夠用,或者動態(tài)頁面較少,那可以使用wxacode.get,通常用wxacode.getUnlimited比較穩(wěn)妥。
wxacode.getUnlimited可能32個字符不夠用,比如想追蹤分享小程序碼的用戶的openid,比如希望記錄更多運營數(shù)據(jù),不過即使不夠用,也是有替代方法的,就是在數(shù)據(jù)庫里添加一個字段ID,將你要記錄的這些參數(shù)與這個簡短而獨一無二的ID對應,這個會浪費一點數(shù)據(jù)庫的性能,不過也在可以接受范圍之類。
除此之外,在云調(diào)用時傳遞的參數(shù)上,wxacode.get是必須填寫path的(path為小程序的頁面路徑,即包含page和scene),而wxacode.getUnlimited的page和scene是分開的,可以只填scene,不必填寫page。
首先我們使用開發(fā)者工具,新建一個云函數(shù)比如wxacode,然后在config.json里添加如下權限配置(前面已經(jīng)反復強調(diào)權限配置文件json的格式),也就是我們在處理云調(diào)用時,一定要先添加權限,而且權限文件的格式不能出錯。
{
"permissions": {
"openapi": [
"wxacode.get",
"wxacode.getUnlimited"
]
}
}
然后在index.js里添加如下代碼,我們先以wxacode.getUnlimited這個接口為例獲取小程序碼,然后再把小程序碼上傳到云存儲里,
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
const wxacodeResult = await cloud.openapi.wxacode.getUnlimited({
scene: 'uid=1jigsdff',
//只支持數(shù)字,大小寫英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,不能有空格之類的其他字符
page: 'page/index/index',
//注意這個必須是已經(jīng)發(fā)布的小程序存在的頁面(否則報錯),根路徑前不要填加 /,不能攜帶參數(shù)(參數(shù)請放在scene字段里),如果不填寫這個字段,默認跳主頁面;但是你要填寫就不要寫錯路徑
})
const uploadResult = await cloud.uploadFile({
cloudPath: `wxacode.jpg`,
fileContent: wxacodeResult.buffer,
})
return uploadResult.fileID
}
而如果是使用wxacode.get這個接口,它傳遞的參數(shù)會有所不同,
const result = await cloud.openapi.wxacode.get({
path: 'page/index/index?uid=1jigsdff',
})
調(diào)用這個云函數(shù),就能在云存儲里看到生成的wxacode.jpg小程序碼了。我們可以把集合的某個字段的id,或者頁面id等參數(shù)寫進小程序碼里。
通過追蹤帶有參數(shù)的小程序碼,我們就能知道用戶到底是通過我們生成的哪個小程序碼進入到小程序的,這個功能應用的場景有很多,尤其是運營上特別有用,比如追蹤用戶的分享來增加積分或返利,追蹤各個渠道的運營效果等等,要完成這樣的步驟,除了生成帶參數(shù)的小程序外,還需小程序能識別該小程序碼。
場景值用來描述用戶進入小程序的路徑,比如公眾號文章的自定義菜單、模板消息、文章等,二維碼的掃描、長按、通過識別手機相冊的二維碼等,微信群聊或單聊等,微信首頁頂部搜索框等,也就是用戶到底是通過什么方式進入到我們的小程序的,會有一個對應的場景值,掃描小程序碼的是1047,長按圖片識別小程序碼為1048,掃描手機相冊中選取的小程序碼為1049。
我們可以在 App生命周期的 onLaunch 和 onShow,或wx.getLaunchOptionsSync
(注意,這個接口是一個對象,不是一個函數(shù)) 中獲取上述場景值,在下面的options對象里就會包含scene
onLaunch (options) {
console.log('onLaunch方法',options)
},
onShow (options) {
console.log('onShow方法',options)
},
在options對象里就包含著scene這個屬性,屬性的值即為場景值:
path: "" //頁面路徑
query: {} //頁面的參數(shù)
referrerInfo: {} //來源小程序、公眾號或 App 的 appId
scene: 1047 //場景值
shareTicket: //帶 shareTicket 的轉(zhuǎn)發(fā)可以獲取到更多的轉(zhuǎn)發(fā)信息,例如群聊的名稱以及群的標識 openGId
值得注意的是,使用cloud.openapi.wxacode.get和cloud.openapi.wxacode.getUnlimited生成的小程序碼所帶的參數(shù)在調(diào)試時需要使用開發(fā)工具的條件編譯自定義參數(shù) scene=xxxx 進行模擬,開發(fā)工具模擬時的 scene 的參數(shù)值需要進行 encodeURIComponent。
首先我們需要encodeURIComponent()方法將我們要傳遞的參數(shù)進行編碼,比如我們要傳遞“a=3&b=4&c=5”這樣的參數(shù),我們可以直接在控制臺里進行編碼:
encodeURIComponent('a=3&b=4&c=5')
編碼之后的結果為"a%3D3%26b%3D4%26c%3D5",調(diào)試時可以添加編譯模式,在啟動參數(shù)里填入
scene=a%3D3%26b%3D4%26c%3D5
小程序碼不只是一個技術問題,更多的是涉及到運營,讓運營的效果可以量化追蹤,是增長黑客、數(shù)據(jù)運營的關鍵,場景值可以讓我們了解小程序的增長來源;而將一些參數(shù)寫進小程序碼,可以讓我們根據(jù)參數(shù)的不同來采取不同的運營策略,比如廣告點擊、返利、分銷、拼團、分享追蹤等等。作為開發(fā)人員,可以多和運營交流,讓小程序的增長更有效果。
更多建議: