後臺開發人力吃緊?騰訊數字文創小程序是這麼做的!

數據庫 騰訊 技術 設計 i時光與少年 2019-05-31

又是一年TGC,去年是我們第一次嘗試使用小程序去結合線下活動,並且採用了智能印章的方式來打通線上小程序部分和線下的全場運營互動,極大的增強了玩家在線下展會的體驗,刺激了活動的參與度。2019年,TGC升級為騰訊數字文創節,同時在後端的開發中,採用雲開發,繼續給線下的玩家們帶來全新的不同體驗。

今年的2019騰訊數字文創節(以下簡稱TGC)的舉辦地點是在世界最大的單體建築----成都環球中心裡面,整個場館區域非常大,同時場館內有很多商區,為了能更加突出打卡TGC的整體性,我們將整個TGC所有的場館地點設計在一個全場地圖上,玩家可以很清楚的看到所有打卡點的分佈和場館的具體位置:

後臺開發人力吃緊?騰訊數字文創小程序是這麼做的!

每年的TGC小程序我們在嘗試一些新的技術形式的加入。今年TGC整體升級為騰訊數字文創節,整個活動以展會形式為主,整個TGC共設為值四大展區——IP主題(該主題展區內有每個遊戲ip單獨佈置的展區)、傳統文化、競技文化和未來探索,相較於去年的形式,今年更加側重在和傳統文化進行集合,所以我們在玩法上還是和去年一樣,採用打卡的方式,但是在形式上,則採用了更加適合玩家感受遊戲文化和傳播內容的拍照打卡。通過打卡得積分、分享打卡照邀請好友點贊得積分和積分抽獎的方式,來帶動活動線下的參與以及線上的傳播。整體的效果圖如下:

後臺開發人力吃緊?騰訊數字文創小程序是這麼做的!

雲開發

這次活動的開發排期十分緊張,後臺的開發人力又無法及時跟進項目,所以這次的整個活動的開發我們十分大膽的嘗試了雲開發。其實在雲開發內部測試的時候,我們就已經有預研過雲開發。

雲開發提供了雲存儲、雲函數和數據庫,提供了較為完整的雲端支持,還搭配了一套基礎運維體系,開發者無需關心服務器搭建和代碼部署。關於一些基礎的類似雲函數提供了鑑權的內容啥的,這裡受限篇幅也就不再闡述,可自行查看開發者文檔,這裡講下開發過程中的小總結吧。

1、雲開發環境

每個小程序賬號開通了小程序雲能力後會默認得到一套雲開發環境,每個小程序賬號最多可以創建兩個雲開發環境,一個雲環境用於開發環境,一個雲環境用於線上環境。

小程序端只需要在小程序雲初始化函數配置當前運行的環境ID即可:

// app.js
App
({

......
globalData
:

{
wxCloudEnv
:

'tgc-production-xxxx'

// 當前運行環境ID

}
})
// index.js
wx
.
cloud
.
init
({
env
:
app
.
globalData
.
wxCloudEnv
})

但是小程序雲上,即使雲函數當前運行的雲環境不一樣,也需要在每個雲函數上顯式的配置當前運行的雲環境ID,要不然可能會在線上環境的雲函數也會調用到測試環境的數據庫和雲存儲。

現在每個雲環境默認是基礎的資源配額,可以自行發郵件申請.

2、雲開發的權限控制

小程序雲提供的API分為小程序端API和服務端API,顧名思義,一套是在小程序的代碼裡調用的,一套是在服務端雲函數調用的,兩套API都可以進行數據庫操作、雲函數調用和雲文件的操作。

後臺開發人力吃緊?騰訊數字文創小程序是這麼做的!

小程序端的數據庫API在添加一條數據庫記錄的時候,該條數據庫記錄會默認加上_openid字段,值為該條記錄創建者(也就是用戶)的openid,而如果是服務端數據庫API進行同樣的操作就不會帶上該字段。小程序雲數據庫的集合默認的權限都是設置為"僅創建者和管理員可讀寫",在小程序端如果通過數據庫API訪問數據庫某個集合的數據時,只能訪問到用戶自己在小程序上調用數據庫API創建的數據,寫的邏輯也是一樣,另外幾個權限也是很好理解。小程序雲管理後臺可以設置數據庫的操作權限,不同的用戶對數據的讀寫權限不同,通過這個操作,可以靈活的調整數據庫中的數據使用場景。

3、使用雲開發生成小程序二維碼

通常在做朋友圈分享圖的邏輯時,前端會請求後端接口直接拿到生成好帶有特定參數的小程序碼地址,然後直接繪製到canvas上。後端會從內存緩存讀accesstoken,判斷是否過期,然後請求微信的生成二維碼接口得到生成好的二維碼,再保存到服務器上的文件存儲目錄,再將訪問地址返回給前端。但是在小程序雲上,因為沒有內存緩存的支持,我們需要將請求到的accesstoken和過期時間等信息直接存儲在小程序雲數據庫集合上。

後臺開發人力吃緊?騰訊數字文創小程序是這麼做的!

因為小程序雲的雲函數的調用方式類似Ajax的方式,無法直接將生成的圖片返回給前端放到Image組件中使用,所以在小程序雲上,生成好小程序二維碼後,還需要再存儲到小程序雲的雲文件存儲中,得到雲文件ID,再將雲文件ID返回給前端使用。

let wxACodeResult 
=
await axios
({

// 請求微信接口得到小程序二維碼
method
:

'POST'
,
url
:

'https://api.weixin.qq.com/wxa/getwxacode'
,
params
:

{
access_token
:
accessToken
,
is_hyaline
:

true
,
width
:

200

},
data
:

{
path
:
path

},
responseType
:

'stream'
,

})
let uploadFileResult
=
await cloud
.
uploadFile
({
cloudPath
:

`
wxacode_$
{
Date
.
now
()}.
png
`,
fileContent
:
wxACodeResult
.
data

})

4、雲開發的全能性

雲開發為開發者提供完整的原生雲端支持和微信服務支持,弱化後端和運維概念,無需搭建服務器,使用平臺提供的 API 進行核心業務開發,即可實現快速上線和迭代,同時這一能力,同開發者已經使用的雲服務相互兼容,並不互斥。

雲開發提供了幾大基礎能力支持:

後臺開發人力吃緊?騰訊數字文創小程序是這麼做的!

來源:微信公眾號 騰訊云云開發

相關推薦

推薦中...