iBeacon 開(kāi)發(fā) (一) (iOS設(shè)備變成iBeacon設(shè)備)

在文章開(kāi)始先來(lái)了解什么是Beacon ? Beacon的標(biāo)準(zhǔn)是什么?Beacon都有哪些使用場(chǎng)景?

  • 什么是Beacon ?

Beacon是使用藍(lán)牙4.0(BLE)技術(shù)發(fā)射信號(hào)的小設(shè)備
有效范圍從幾十厘米到幾米,電池可用3年
信號(hào)為單向發(fā)射,只能發(fā)送小數(shù)據(jù)量,例如一個(gè)128bit的ID 智能手機(jī)通常作為接收方;

  • Beacon的標(biāo)準(zhǔn)

Beacon的標(biāo)準(zhǔn)包括信號(hào)數(shù)據(jù)的格式等,蘋(píng)果和谷歌各有一套標(biāo)準(zhǔn),蘋(píng)果標(biāo)準(zhǔn)更早,谷歌的標(biāo)準(zhǔn)更加強(qiáng)大。
Apple:iBeacon 2013年6月發(fā)布
Google:Eddystone 2015年7月發(fā)布
開(kāi)源標(biāo)準(zhǔn):AltBeacon.org 2014 (未出生,身已死);


iBeacon 和 EddyStone 比較
  • Beacon的使用場(chǎng)景

商品的近距離推廣:超市,餐廳
信息查詢:機(jī)場(chǎng),鐵路,風(fēng)景點(diǎn)
貨品跟蹤:包裹跟蹤,新秀麗旅行包
室內(nèi)導(dǎo)航:商場(chǎng),體育館
近距離互動(dòng):建群,分享
【Physical Web】是谷歌2014年提出來(lái)的,它認(rèn)為每個(gè)物理設(shè)備都應(yīng)該有一個(gè)URI,通過(guò)軟件可以將這些線上線下設(shè)備打通。

這篇文章介紹的是iBeacon的開(kāi)發(fā),也就是蘋(píng)果官方提供的iBeacon標(biāo)準(zhǔn),下面是蘋(píng)果官方文檔對(duì)iBeacon的介紹:

  • 任何支持使用低功耗藍(lán)牙共享數(shù)據(jù)的iOS設(shè)備都可以變成iBeacon。
  • 將其底層iOS設(shè)備用作iBeacon的應(yīng)用程序必須在前臺(tái)運(yùn)行。
  • 將此功能用于銷售點(diǎn)應(yīng)用程序或仍要在前臺(tái)運(yùn)行的應(yīng)用程序。
  • 對(duì)于其他類型的iBeacon實(shí)施,請(qǐng)使用第三方制造商提供的專用信標(biāo)硬件。
  • 要將iOS設(shè)備用作iBeacon,請(qǐng)執(zhí)行以下操作:
    1、 獲取或生成設(shè)備的128位UUID。
    2、創(chuàng)建一個(gè)包含UUID值以及信標(biāo)的適當(dāng)?shù)闹饕痛我档膶?duì)象。CLBeaconRegion
    3、使用Core Bluetooth框架發(fā)布信標(biāo)信息
那么怎樣使iOS設(shè)備變成iBeacon設(shè)備呢?我通過(guò)一個(gè)實(shí)例,按照下面步驟來(lái)實(shí)現(xiàn);

1、UUID的作用以及生成

識(shí)別iBeacon的主要方法是從其UUID。部署一個(gè)或多個(gè)信標(biāo)時(shí),您將為每個(gè)向用戶傳達(dá)信標(biāo)目的的UUID分配一個(gè)UUID。信標(biāo)的確切目的是您定義的。例如,百貨商店鏈可能對(duì)其所有部署的信標(biāo)使用相同的UUID,或者可能為每個(gè)商店分配了不同的UUID。由于檢測(cè)涉及使用區(qū)域監(jiān)視來(lái)查找具有特定UUID的信標(biāo),因此使用較少的UUID易于管理。
創(chuàng)建設(shè)備的UUID可以使用uuidgen命令生成,該工具生成一個(gè)唯一的128位值,并將其格式化為帶連字符的ASCII字符串,如下命令行:
$ uuidgen
FAAC0866-0CD8-4F5B-A4D4-BE52F88BE149


圖片

2、配置信標(biāo)區(qū)域

信標(biāo)區(qū)域?qū)ο蟮膭?chuàng)建需要用到CoreLocation框架中的CLBeaconRegion抽象類, 使用對(duì)象配置信標(biāo)的身份??梢允褂眯艠?biāo)區(qū)域生成信息字典,之后可以通過(guò)藍(lán)牙進(jìn)行廣告宣傳。

- (CLBeaconRegion *)createBeaconRegion {
    /**uuid 用來(lái)標(biāo)識(shí)公司*/
    NSUUID *uuid = [[NSUUID alloc]initWithUUIDString:@"FAAC0866-0CD8-4F5B-A4D4-BE52F88BE149"];
    /**主要值,用來(lái)識(shí)別一組相關(guān)聯(lián)的 beacon,例如在連鎖超市的場(chǎng)景中,每個(gè)分店的 beacon 應(yīng)該擁有同樣的 major。*/
    NSNumber *major = @(1);
    /**次要值,則用來(lái)區(qū)分某個(gè)特定的 beacon*/
    NSNumber *minor = @(10001);
    /**實(shí)例化信標(biāo)區(qū)域*/
    CLBeaconRegion *region = [[CLBeaconRegion alloc]initWithUUID:uuid major:[major shortValue] minor:[minor shortValue] identifier:@"com.Technology.IBeacon"];
    return region;
}

3、通過(guò)藍(lán)牙廣播信標(biāo)

要從iOS設(shè)備廣播信標(biāo)的身份,請(qǐng)使用Core Bluetooth框架將iOS設(shè)備配置為Bluetooth外設(shè)。當(dāng)配置為外圍設(shè)備時(shí),您的iOS設(shè)備將使用藍(lán)牙硬件將其信標(biāo)信息廣播到其他設(shè)備。其他設(shè)備使用該信息進(jìn)行測(cè)距并檢測(cè)它們與您的iOS設(shè)備的接近程度。

- (void)advertiseDevice:(CLBeaconRegion *)region {
    /**實(shí)例化外圍設(shè)備*/
    CBPeripheralManager *peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
    /**創(chuàng)建需要廣播的信標(biāo)數(shù)據(jù)*/
    NSDictionary *peripheralData = [region peripheralDataWithMeasuredPower:@(97)];
    
    if(peripheralData)
    {
        /**開(kāi)始廣播*/
        [peripheralManager startAdvertising:peripheralData];
    }
}

到這里一個(gè)iOS設(shè)備變成iBeacon設(shè)備的實(shí)現(xiàn)就完成了;
Demo下載

注意點(diǎn)

  • 需要訪問(wèn)藍(lán)牙權(quán)限 :需要在info.plist 上配置Privacy - Bluetooth Always Usage Description 使用說(shuō)明;
  • 手機(jī)需要開(kāi)啟藍(lán)牙;
  • 利用 iOS 設(shè)備模擬 beacon信號(hào),應(yīng)用程序必須繼續(xù)在前臺(tái)運(yùn)行以廣播所需的藍(lán)牙信號(hào)。如果用戶退出該應(yīng)用程序,則系統(tǒng)將停止通過(guò)藍(lán)牙將設(shè)備作為外圍設(shè)備廣播信號(hào)。
底線
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容