# 周期性更新
基礎(chǔ)庫(kù) 2.8.0 開始支持,低版本需做兼容處理。
生效條件:用戶七天內(nèi)使用過(guò)的小程序
周期性更新能夠在用戶未打開小程序的情況下,也能從服務(wù)器提前拉取數(shù)據(jù),當(dāng)用戶打開小程序時(shí)可以更快地渲染頁(yè)面,減少用戶等待時(shí)間,增強(qiáng)在弱網(wǎng)條件下的可用性。
# 使用流程
# 1. 配置數(shù)據(jù)下載地址
數(shù)據(jù)來(lái)源為開發(fā)者服務(wù)器時(shí)支持配置灰度比例,灰度數(shù)據(jù)下載地址可以區(qū)別于數(shù)據(jù)下載地址,灰度比例不可回退,且 100% 灰度視為更新數(shù)據(jù)地址為灰度數(shù)據(jù)地址, 如需進(jìn)行測(cè)試,可將灰度比例改為百分之 0,即只對(duì)開發(fā)者體驗(yàn)者進(jìn)行灰度。
- 登錄小程序 MP 管理后臺(tái),進(jìn)入開發(fā)管理 -> 開發(fā)設(shè)置 -> 數(shù)據(jù)周期性更新,點(diǎn)擊開啟
- 個(gè)人主體小程序僅支持配置云開發(fā)環(huán)境
- 非個(gè)人主體小程序支持配置HTTPS數(shù)據(jù)下載地址、 云開發(fā)環(huán)境
# 2. 設(shè)置 TOKEN
用戶登錄小程序后,小程序可以調(diào)用 wx.setBackgroundFetchToken() 設(shè)置一個(gè)自定義 TOKEN 字符串,可以跟用戶態(tài)相關(guān),TOKEN 會(huì)在下一次預(yù)拉取或周期性更新,向開發(fā)者服務(wù)器發(fā)起請(qǐng)求時(shí)帶上,便于服務(wù)器校驗(yàn)請(qǐng)求合法性。
Tips: wx.setBackgroundFetchToken 是可選接口,不是必須調(diào)用的。
示例:
App({
onLaunch() {
// 用戶登錄后
wx.setBackgroundFetchToken({
token: 'xxx'
})
}
})
# 3. 微信客戶端定期拉取數(shù)據(jù)
微信客戶端會(huì)在一定的網(wǎng)絡(luò)條件下,每隔 12 小時(shí)(以上一次成功更新的時(shí)間為準(zhǔn))向配置的數(shù)據(jù)下載地址發(fā)起一個(gè) HTTP GET 請(qǐng)求,其中包含的 query 參數(shù)如下,數(shù)據(jù)獲取到后會(huì)將整個(gè) HTTP body 緩存到本地。
| 參數(shù) | 類型 | 說(shuō)明 |
|---|---|---|
| appid | String | 小程序標(biāo)識(shí) |
| token | String | 前面設(shè)置的 TOKEN |
| timestamp | Number | 時(shí)間戳,微信客戶端發(fā)起請(qǐng)求的時(shí)間 |
query 參數(shù)會(huì)使用?urlencode 處理
開發(fā)者服務(wù)器接口返回的數(shù)據(jù)類型應(yīng)為字符串,且大小應(yīng)不超過(guò)
256KB,否則將無(wú)法緩存數(shù)據(jù)
# 4. 讀取數(shù)據(jù)
用戶啟動(dòng)小程序時(shí),調(diào)用 wx.getBackgroundFetchData() 獲取已緩存到本地的數(shù)據(jù)。
示例:
App({
onLaunch() {
wx.getBackgroundFetchData({
fetchType: 'periodic',
success(res) {
console.log(res.fetchedData) // 緩存數(shù)據(jù)
console.log(res.timeStamp) // 客戶端拿到緩存數(shù)據(jù)的時(shí)間戳
}
})
}
})
# 調(diào)試方法
由于微信客戶端每隔 12 個(gè)小時(shí)才會(huì)發(fā)起一次請(qǐng)求,調(diào)試周期性更新功能會(huì)顯得不太方便。 因此為了方便調(diào)試周期性數(shù)據(jù),工具提供了下面的調(diào)試能力給到開發(fā)者,具體可查看周期性數(shù)據(jù)調(diào)試。