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”> </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”> </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”> </a>