網(wǎng)絡(luò)是當(dāng)前信息時(shí)代的重要基石,無論是在移動設(shè)備還是桌面電腦上,任何一個(gè)應(yīng)用程序的任何一個(gè)業(yè)務(wù)邏輯都需要依賴網(wǎng)絡(luò)來進(jìn)行通信。移動設(shè)備則更是如此,由于網(wǎng)絡(luò)環(huán)境的多變性,往往會發(fā)現(xiàn)某些業(yè)務(wù)邏輯在網(wǎng)絡(luò)條件不佳時(shí)無法正常工作。
因此,在小程序中實(shí)時(shí)監(jiān)測網(wǎng)絡(luò)狀態(tài)變化,便成為了 resolver 優(yōu)化或解決小程序中各種網(wǎng)絡(luò)問題的必要手段。那么在小程序開發(fā)中,如何監(jiān)聽網(wǎng)絡(luò)狀態(tài)的變化,成為了一個(gè)需要解決的核心問題。
在接下來的內(nèi)容,筆者將從以下幾個(gè)問題出發(fā),為開發(fā)者提供一些監(jiān)測網(wǎng)絡(luò)狀態(tài)變化的技術(shù)方案和實(shí)踐經(jīng)驗(yàn):
1.小程序中如何獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài)?
2.監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化有哪些方法?
3.如何在小程序中監(jiān)測網(wǎng)絡(luò)狀態(tài)變化?
4.如何應(yīng)用網(wǎng)絡(luò)狀態(tài)變化的信息?
1.小程序中如何獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài)?
在介紹獲取網(wǎng)絡(luò)狀態(tài)的方法之前,首先我們需要了解一下,當(dāng)前可用的網(wǎng)絡(luò)分類,它們分別是:
- WIFI
- 4G(LTE)
- 3G
- 2G
- 蜂窩移動
- 無網(wǎng)絡(luò)
通常情況下,小程序需要判斷的網(wǎng)絡(luò)狀態(tài)只有兩種,即 “有網(wǎng)絡(luò)” 和 “無網(wǎng)絡(luò)”狀態(tài)。
在小程序中獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài),我們可以使用小程序官方提供的 wx.getNetworkType() API 接口來實(shí)現(xiàn),該接口返回的實(shí)時(shí)上網(wǎng)類型,可根據(jù)該值判斷當(dāng)前的網(wǎng)絡(luò)情況。
wx.getNetworkType({
success: function(res) {
console.log(res.networkType) // 返回網(wǎng)絡(luò)類型,如wifi、2g、3g、4g、unknown、none
}
})
此外,在 wx.getNetworkType() 中,我們還可以根據(jù)當(dāng)前的實(shí)時(shí)上網(wǎng)類型,來確認(rèn)當(dāng)前網(wǎng)絡(luò)的具體數(shù)據(jù):(單位為kb/s)
- wifi:971,45.5,22.5
- 4g:418,10.8,3.2
- 3g:1.4,0.45,0.15
- 2g:0.23,0.05
2.監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化有哪些方法?
接下來,我們需要進(jìn)一步講解,如何在小程序中監(jiān)聽網(wǎng)絡(luò)狀態(tài)的變化,以及監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化的方法有哪些?
在小程序中監(jiān)聽網(wǎng)絡(luò)狀態(tài)的變化,我們通常使用 wx.onNetworkStatusChange() 這個(gè)接口,該接口的作用是當(dāng)網(wǎng)絡(luò)狀態(tài)變化時(shí),小程序會推送對應(yīng)的事件信息。
基于該方法的監(jiān)聽,我們可以監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化后,進(jìn)行相關(guān)的操作,以及在小程序頁面上做出用戶友好的提示等等。
wx.onNetworkStatusChange(function(res) {
console.log(res.isConnected) // 返回boolen 值,有網(wǎng)絡(luò)連接為true,否則為false
console.log(res.networkType) // 返回網(wǎng)絡(luò)類型,如wifi、2g、3g、4g、unknown、none
})
不過需要注意的是,該方法只適用于小程序運(yùn)行在前臺的情況。如果小程序不能成功獲取網(wǎng)絡(luò)狀態(tài)信息,建議考慮更換數(shù)據(jù)API、嘗試重連操作或者引導(dǎo)用戶檢查網(wǎng)絡(luò)設(shè)置以獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài)。
除了上述方法,還可以創(chuàng)建一個(gè)網(wǎng)絡(luò)請求封裝類,監(jiān)測每次網(wǎng)絡(luò)請求的成功與失敗,錯(cuò)誤碼等等,根據(jù)網(wǎng)絡(luò)請求的情況來實(shí)現(xiàn)網(wǎng)絡(luò)狀態(tài)的監(jiān)測。
3.如何在小程序中監(jiān)測網(wǎng)絡(luò)狀態(tài)變化?
在小程序中監(jiān)測網(wǎng)絡(luò)狀態(tài)變化,最好的實(shí)踐方案是將網(wǎng)絡(luò)狀態(tài)應(yīng)用注入到小程序的整個(gè)生命周期中。
在小程序的生命周期中,我們可以通過 app.js 來實(shí)現(xiàn)全局生命周期的監(jiān)聽,以便對網(wǎng)絡(luò)狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)測:
1.在 app.js 中創(chuàng)建網(wǎng)絡(luò)狀態(tài) function 作為全局變量,設(shè)置網(wǎng)絡(luò)狀態(tài)初始值為 false;
2.監(jiān)聽 wx.onNetworkStatusChange() 接口,并在該接口回調(diào)中,進(jìn)行網(wǎng)絡(luò)狀態(tài)的更新;
3.由于小程序的開發(fā)往往是進(jìn)行 tab 化開發(fā)的,因此需要為每個(gè) tabbar 設(shè)置一個(gè)全局的網(wǎng)絡(luò)狀態(tài)變量來進(jìn)行網(wǎng)絡(luò)狀態(tài)的更新;
4.當(dāng) tab 頁面被展示時(shí),監(jiān)聽當(dāng)前 tab 對應(yīng)的網(wǎng)絡(luò)狀態(tài)變量;
5.如果網(wǎng)絡(luò)狀態(tài)變化,更新網(wǎng)絡(luò)狀態(tài)變量并更新圖標(biāo)等提示信息。
以下是小程序全局變量的示例代碼:
App({
globalData: {
isConnected: true
}
})
網(wǎng)絡(luò)狀態(tài)變化的示例代碼如下:
wx.onNetworkStatusChange(function(res) {
this.globalData.isConnected = res.isConnected
})
更新網(wǎng)絡(luò)狀態(tài)變量的代碼如下:
wx.switchTab({
url: '/pages/index/index',
success: function (e) {
var page = getCurrentPages().pop();
if (page == undefined || page == null) return;
page.onLoad();
}
})
4.如何應(yīng)用網(wǎng)絡(luò)狀態(tài)變化的信息?
監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化后,也需要對它進(jìn)行進(jìn)一步的應(yīng)用操作。尤其是在網(wǎng)絡(luò)狀況不理想的情況下,如何在小程序中給用戶做出積極的提示,是一個(gè)值得深思的問題。
在應(yīng)用網(wǎng)絡(luò)狀態(tài)變化時(shí),我們需要了解一些提示用戶的方式:
1.遮罩提示或警告信息:當(dāng)網(wǎng)絡(luò)狀態(tài)不佳或無網(wǎng)絡(luò)連接時(shí),我們需要有一種獨(dú)特的方式來提示用戶,這時(shí)候,遮罩提示或警告信息是很好的選擇方式。
2.智能配適:當(dāng)網(wǎng)絡(luò)狀態(tài)不同調(diào),并且快速可變時(shí),我們需要對不同的網(wǎng)絡(luò)狀態(tài)做出不同的響應(yīng)攔截,通過智能配適解決不同網(wǎng)絡(luò)環(huán)境下小程序速度慢的問題。
3.移動網(wǎng)絡(luò)與 WiFi 的展現(xiàn)方式:一般而言,網(wǎng)絡(luò)狀態(tài)較佳時(shí),小程序體驗(yàn)也會變得更好。但在不同網(wǎng)絡(luò)環(huán)境下,不同的用戶體驗(yàn)卻不相同。這時(shí)候,我們可以通過一些圖標(biāo)、標(biāo)志來提示當(dāng)前的網(wǎng)絡(luò)狀態(tài),讓用戶提高對不同網(wǎng)絡(luò)狀態(tài)的敏感性,更好的維護(hù)網(wǎng)絡(luò)體驗(yàn)。
總結(jié)
在小程序中監(jiān)聽網(wǎng)絡(luò)狀態(tài)的變化,是小程序開發(fā)中非常重要的一點(diǎn),也是解決小程序網(wǎng)絡(luò)問題的有效手段之一。具體可以從四個(gè)問題入手考慮:
1.小程序中如何獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài)?
2.監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化有哪些方法?
3.如何在小程序中監(jiān)測網(wǎng)絡(luò)狀態(tài)變化?
4.如何應(yīng)用網(wǎng)絡(luò)狀態(tài)變化的信息?
如何使用上述方法,需要結(jié)合具體的小程序業(yè)務(wù)場景來進(jìn)行實(shí)際應(yīng)用。如果你還有其他的實(shí)踐經(jīng)驗(yàn),歡迎在針對本文的評論欄中分享給我們。