Tutorial iBeacon

Tutorial iBeacon

記錄 實 作 iBeacon 溝通 的 過程, Beacon 分為 Peripheral (提供 local 資訊) & Central (ex: App 接收 資訊 並且 用 push local 提醒 使用者)
使用 情境
以下 記錄 實 作 的.

Requerimento

BLE baseado em bluetooth 4.0. 可以 在 iOS5 以上 實 作
特別 要 注意 的 是 在 iOS8 必須 在 info.plist 加上 key

<key>NSLocationAlwaysUsageDescription</key]]><string>beacon testser</string]]>

Periférico

建立 serviço 的 細節 在 此

- (void)setupService
{
CBUUID
*characteristicUUID = [CBUUID UUIDWithString:kCharacteristicUUID];
self.customCharacteristic = [[CBMutableCharacteristic alloc] initWithType:characteristicUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];

CBUUID
*serviceUUID = [CBUUID UUIDWithString:kServiceUUID];
self.customService = [[CBMutableService alloc] initWithType:serviceUUID primary:YES];

[self.customService setCharacteristics:@[self.customCharacteristic]];
[self.peripheralManager addService:self.customService];

}

Código de amostra 可以 在這裡找到
流程 如下

<a title=”monitorBeacon por hsin chang, no Flickr”> monitorBeacon</a>

特別 說明

[[CLBeaconRegion alloc] initWithProximityUUID:uuid
major
:rand()
minor
:rand()
identifier
:@"com.beaconDemo"];

裡面 的 uuid 可以 代表 公司 或者 整棟 百貨, Central 端 也是 靠 相同 的 uuid 做 beacon 的 搜尋
maior 可以 是 樓層 等 大 範圍 的 ID, menor 則可 留給 房 號 或是 商品 做.

Central

O código de amostra pode ser encontrado aqui
分為 以下 兩個 部分

  • Monitoramento e alcance

<a href=” https://www.flickr.com/photos/hsin919/15538688501 “title=”monitorBeacon por hsin chang, no Flickr”> monitorBeacon</a>

完成 後就 可以 在 就 可以 在

func locationManager(manager: CLLocationManager!,
didRangeBeacons beacons
: [AnyObject]!,
inRegion region
: CLBeaconRegion!)

收到balizas的matriz,其中índice 0的baliza最近的是
透過CLBeacon可以得到proximity, proximityUUID,rssi信號強度
其中proximity:immediate代表10mm,near代表小於1m,far代表大於1m

另外 要 注意 iOS8 特別 的 隱私 設定
在 使用CLLocationManager前.

if(locationManager!.respondsToSelector("requestAlwaysAuthorization")) {
locationManager
!.requestAlwaysAuthorization()
}
  • Conectar periférico

後 可以 透過centralManager = CBCentralManager(delegate: self, queue: nil)

{% codeblock lang: swift%}
centralManager? .scanForPeripheralsWithServices (nulo, opções: nulo)
{% endcodeblock%}

找到 週邊 的 Periférico
這個 amostra 很 陽春 的 暫存 了 Perial 等到 Central 跟 Periférico 的 距離 在immediate
的 時候 做 conectar

case CLProximity.Immediate:
message
= "You are in the immediate proximity of the beacon"
centralManager
?.connectPeripheral(_peripheral, options: nil)

<a href=” https://www.flickr.com/photos/hsin919/14920624754 “title=”centralBeacon por hsin chang, no Flickr”> centralBeacon</a>

Referência