一.前言
現(xiàn)在app
有個(gè)需求,當(dāng)用戶進(jìn)入到某一領(lǐng)域,如果監(jiān)測(cè)到用戶在這一范圍內(nèi)犹芹,則發(fā)送相應(yīng)的信息給用戶屿笼,用戶再根據(jù)這些信息進(jìn)一步操作肝断,其中涉及到的2點(diǎn),一個(gè)是位置洁奈,另一個(gè)就是監(jiān)測(cè),那么這個(gè)時(shí)候就可以用到蘋果的ibeacon
來(lái)解決,下面對(duì)ibeacon
進(jìn)行詳細(xì)介紹汇竭。
二.iBeacon介紹
iBeacon的官方文檔
iBeacon
是Apple
在2013年iOS7
推出的新功能。配備有低功耗藍(lán)牙通信功能的設(shè)備使用BLE
技術(shù)向四周發(fā)送自己的uuid
彪蓬,接收到該uuid
的application
可以根據(jù)uuid
進(jìn)行相應(yīng)的操作。
簡(jiǎn)單講,就是iBeacon
發(fā)送信號(hào)漾峡,配備有低功耗藍(lán)牙通信功能iOS
設(shè)備在一定范圍內(nèi)監(jiān)測(cè)到信號(hào)遍尺,反饋信號(hào)歧蕉。
iBeacon
使用的是BLE技術(shù),具體而言催跪,利用的是BLE
中名為“通告幀”(Advertising
)的廣播幀懊蒸。通告幀是定期發(fā)送的幀通危,只要是支持BLE
的設(shè)備就可以接收到逆害。
iBeacon
的主要參數(shù):
uuid
:128位標(biāo)識(shí)符靡馁,通用唯一標(biāo)識(shí)符损晤。
Major
和Minor
由iBeacon
發(fā)布者自行設(shè)定,都是16位的標(biāo)識(shí)符红竭,可以用來(lái)區(qū)別使用相同uuid
的iBeacon
尤勋。
proximity
:表示iBeacon
的遠(yuǎn)近。CLProximityImmediate
表示最接近茵宪,CLProximityNear
表示很接近最冰,CLProximityFar
表示遠(yuǎn),CLProximityUnknown
表示不見(jiàn)了稀火。
rss
(Received Single Strength Indicator
):信號(hào)的強(qiáng)弱暖哨,是負(fù)數(shù),越接近0表示信號(hào)越強(qiáng)凰狞。
三.cordova ibeacon plugin使用
在Github上都有詳細(xì)的介紹篇裁,對(duì)iOS
和android
都有ranging
,monitoring
功能。
iOS7
之后的設(shè)備可以當(dāng)作一個(gè)ibeacon
服球。
需要注意在iOS8
需要允許使用定位權(quán)限 (因?yàn)閕baecon的使用是基于藍(lán)牙和定位的)茴恰。
這里以ranging
為例子
Start ranging a single iBeacon
var delegate = new cordova.plugins.locationManager.Delegate();
delegate.didDetermineStateForRegion = function (pluginResult) {
console.log('didDetermineStateForRegion:', pluginResult);
};
delegate.didStartMonitoringForRegion = function (pluginResult) {
console.log('didStartMonitoringForRegion:', pluginResult);
};
delegate.didRangeBeaconsInRegion = function (pluginResult) {
console.log('didRangeBeaconsInRegion:', pluginResult);
};
var uuid = '00000000-0000-0000-0000-000000000000';
var identifier = 'beaconID';
var minor;
var major;
var beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid, major, minor);
cordova.plugins.locationManager.setDelegate(delegate);
// required in iOS 8+
cordova.plugins.locationManager.requestWhenInUseAuthorization();
// or cordova.plugins.locationManager.requestAlwaysAuthorization()
cordova.plugins.locationManager.startRangingBeaconsInRegion(beaconRegion)
.fail(function(e) { console.error(e); })
.done();
Stop ranging a single iBeacon
var uuid = '00000000-0000-0000-0000-000000000000';
var identifier = 'beaconID';
var minor;
var major;
var beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid, major, minor); cordova.plugins.locationManager.stopRangingBeaconsInRegion(beaconRegion)
.fail(function(e) { console.error(e); })
.done();
四.注意點(diǎn)
以rangingBeacons
為例:
1.當(dāng)app
啟動(dòng)的時(shí)候,在init_page
就開(kāi)始startRangingBeacons
斩熊,要注意,這個(gè)startRangingBeacons
只運(yùn)行一次伐庭,去到其他頁(yè)面再次進(jìn)入這個(gè)init_page
頁(yè)就不能再進(jìn)行一次startRangingBeacons
粉渠,這里可以通過(guò)一個(gè)字段進(jìn)行標(biāo)記。
2.當(dāng)app
進(jìn)入后臺(tái)的時(shí)候需要停止ranging
,當(dāng)app
進(jìn)入前臺(tái)的時(shí)候需要開(kāi)始ranging
圾另。
在Cordova的官網(wǎng)中有app進(jìn)入后臺(tái)和前臺(tái)相對(duì)應(yīng)的事件霸株。
- pause
The pause event fires when the native platform puts the application into the background, typically when the user switches to a different application.
app
進(jìn)入后臺(tái),會(huì)調(diào)用pause
事件集乔,例如切換不同apps
去件,點(diǎn)擊home
鍵等等,該方法都會(huì)調(diào)用,但是在android
中尤溜,當(dāng)點(diǎn)擊home
鍵時(shí)倔叼,pause
事件會(huì)調(diào)用,但是在iOS
中宫莱,pause
事件不會(huì)調(diào)用丈攒,需要使用resign
事件。
- resume
The resume event fires when the native platform pulls the application out from the background.
app
進(jìn)入前臺(tái)授霸,在android
中巡验,call
resume
事件;在iOS
中碘耳,call
active
事件显设。
需要注意,resume事件和pause事件調(diào)起的方法需要包裹在一個(gè)setTimeout里面辛辨,timeout值為0敷硅,否則,程序會(huì)掛起愉阎。
3.在Cordova
中绞蹦,需要判斷platform
,可以導(dǎo)入device plugin榜旦。
4.如果需要在xcode
的控制臺(tái)輸出log
幽七,可以導(dǎo)入console plugin,原有的console.log()只能在瀏覽器的調(diào)試中輸出溅呢,但是對(duì)于真機(jī)測(cè)試澡屡,app
進(jìn)入后臺(tái),需要在pause
的時(shí)候輸出信息咐旧,則導(dǎo)入console plugin來(lái)打印驶鹉。