在文章開始先來了解什么是Beacon ? Beacon的標準是什么?Beacon都有哪些使用場景?
- 什么是Beacon ?
Beacon是使用藍牙4.0(BLE)技術(shù)發(fā)射信號的小設(shè)備
有效范圍從幾十厘米到幾米,電池可用3年
信號為單向發(fā)射,只能發(fā)送小數(shù)據(jù)量,例如一個128bit的ID 智能手機通常作為接收方;
- Beacon的標準
Beacon的標準包括信號數(shù)據(jù)的格式等,蘋果和谷歌各有一套標準,蘋果標準更早,谷歌的標準更加強大。
Apple:iBeacon 2013年6月發(fā)布
Google:Eddystone 2015年7月發(fā)布
開源標準:AltBeacon.org 2014 (未出生,身已死);
iBeacon 和 EddyStone 比較
- Beacon的使用場景
商品的近距離推廣:超市,餐廳
信息查詢:機場,鐵路,風景點
貨品跟蹤:包裹跟蹤,新秀麗旅行包
室內(nèi)導航:商場,體育館
近距離互動:建群,分享
【Physical Web】是谷歌2014年提出來的,它認為每個物理設(shè)備都應該有一個URI,通過軟件可以將這些線上線下設(shè)備打通。
這篇文章介紹的是iBeacon的開發(fā),也就是蘋果官方提供的iBeacon標準,下面是蘋果官方文檔對iBeacon的介紹:
- 任何支持使用低功耗藍牙共享數(shù)據(jù)的iOS設(shè)備都可以變成iBeacon。
- 將其底層iOS設(shè)備用作iBeacon的應用程序必須在前臺運行。
- 將此功能用于銷售點應用程序或仍要在前臺運行的應用程序。
- 對于其他類型的iBeacon實施,請使用第三方制造商提供的專用信標硬件。
- 要將iOS設(shè)備用作iBeacon,請執(zhí)行以下操作:
1、 獲取或生成設(shè)備的128位UUID。
2、創(chuàng)建一個包含UUID值以及信標的適當?shù)闹饕痛我档膶ο?。CLBeaconRegion
3、使用Core Bluetooth框架發(fā)布信標信息
那么怎樣使iOS設(shè)備變成iBeacon設(shè)備呢?我通過一個實例,按照下面步驟來實現(xiàn);
1、UUID的作用以及生成
識別iBeacon的主要方法是從其UUID。部署一個或多個信標時,您將為每個向用戶傳達信標目的的UUID分配一個UUID。信標的確切目的是您定義的。例如,百貨商店鏈可能對其所有部署的信標使用相同的UUID,或者可能為每個商店分配了不同的UUID。由于檢測涉及使用區(qū)域監(jiān)視來查找具有特定UUID的信標,因此使用較少的UUID易于管理。
創(chuàng)建設(shè)備的UUID可以使用uuidgen命令生成,該工具生成一個唯一的128位值,并將其格式化為帶連字符的ASCII字符串,如下命令行:
$ uuidgen
FAAC0866-0CD8-4F5B-A4D4-BE52F88BE149
圖片
2、配置信標區(qū)域
信標區(qū)域?qū)ο蟮膭?chuàng)建需要用到CoreLocation框架中的CLBeaconRegion抽象類, 使用對象配置信標的身份??梢允褂眯艠藚^(qū)域生成信息字典,之后可以通過藍牙進行廣告宣傳。
- (CLBeaconRegion *)createBeaconRegion {
/**uuid 用來標識公司*/
NSUUID *uuid = [[NSUUID alloc]initWithUUIDString:@"FAAC0866-0CD8-4F5B-A4D4-BE52F88BE149"];
/**主要值,用來識別一組相關(guān)聯(lián)的 beacon,例如在連鎖超市的場景中,每個分店的 beacon 應該擁有同樣的 major。*/
NSNumber *major = @(1);
/**次要值,則用來區(qū)分某個特定的 beacon*/
NSNumber *minor = @(10001);
/**實例化信標區(qū)域*/
CLBeaconRegion *region = [[CLBeaconRegion alloc]initWithUUID:uuid major:[major shortValue] minor:[minor shortValue] identifier:@"com.Technology.IBeacon"];
return region;
}
3、通過藍牙廣播信標
要從iOS設(shè)備廣播信標的身份,請使用Core Bluetooth框架將iOS設(shè)備配置為Bluetooth外設(shè)。當配置為外圍設(shè)備時,您的iOS設(shè)備將使用藍牙硬件將其信標信息廣播到其他設(shè)備。其他設(shè)備使用該信息進行測距并檢測它們與您的iOS設(shè)備的接近程度。
- (void)advertiseDevice:(CLBeaconRegion *)region {
/**實例化外圍設(shè)備*/
CBPeripheralManager *peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
/**創(chuàng)建需要廣播的信標數(shù)據(jù)*/
NSDictionary *peripheralData = [region peripheralDataWithMeasuredPower:@(97)];
if(peripheralData)
{
/**開始廣播*/
[peripheralManager startAdvertising:peripheralData];
}
}
到這里一個iOS設(shè)備變成iBeacon設(shè)備的實現(xiàn)就完成了;
Demo下載
注意點
- 需要訪問藍牙權(quán)限 :需要在info.plist 上配置Privacy - Bluetooth Always Usage Description 使用說明;
- 手機需要開啟藍牙;
- 利用 iOS 設(shè)備模擬 beacon信號,應用程序必須繼續(xù)在前臺運行以廣播所需的藍牙信號。如果用戶退出該應用程序,則系統(tǒng)將停止通過藍牙將設(shè)備作為外圍設(shè)備廣播信號。


