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