微信小程序如何檢測接收iBeacon信號


前話

微信小程序開發帶着許多坑,最近就遇到了個需求,檢測iBeacon來進行地點簽到。

(╯▔皿▔)╯

微信小程序對於iBeacon的文檔也寫的十分精簡,只簡單介紹了每個接口的作用,這就導致我以為簡單調用單個接口即可實現功能,因此我就寫出了這樣的錯誤代碼邏輯 :

(╯‵□′)╯︵┻━┻

wx.startBeaconDiscovery({
	uuids: ['xxxxx'],
	success(res){
		console.log('簽到成功')
	},
	fail(err){
		console.log('簽到失敗')
	}
})

結果是,點擊簽到按鈕調用該接口的時候,幾乎都是簽到失敗

(╯‵□′)╯炸彈!•••*~●。

當然,最后還是谷歌解決了,因為前人也踩了這個坑,因此我還是搬運過來,讓后人少受熬夜之苦 (;´༎ຶД༎ຶ`)

正題

廢話不多說,如果你要檢測接收iBeacon信號,建議按照這樣的接口調用步驟:

	   wx.stopBeaconDiscovery # 停止掃描
		↑
	   setTimeout # 超時設置
		↑
開始 → wx.startBeaconDiscovery # 開始掃描
		︱
		︱―fail(err)→結束
		︱
	   success(res)
		↓
       wx.onBeaconUpdate # 監聽iBeacon信號
		︱  
		︱―fail(err)→結束
		︱
	   success(res)
		↓
       TODO
       

最后,我的代碼如下:

var devices = [];

// 開始掃描
wx.startBeaconDiscovery({
    uuids: uuidArray,
    success: function () {
        console.log("開始掃描設備...");
		// 監聽iBeacon信號
        wx.onBeaconUpdate(function (res) {
            // 請注意,官方文檔此處又有BUG,是res.beacons,不是beacons。
            if (res && res.beacons && res.beacons.length > 0) {
                devices = res.beacons;
                // 此處最好檢測rssi是否等於0,等於0的話信號強度等信息不准確。我是5秒內重復掃描排重。
            }
        });
    }
});

// 超時停止掃描
setTimeout(function () {
    wx.stopBeaconDiscovery({
        success: function () {
            console.log("停止設備掃描!");
            console.log(devices);
        }
    });
}, 5 * 1000);

OK,問題似乎不經意間被完美解決了( •̀ ω •́ )y


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM