isana.netでは先日、自社で提供しているPush通知送信サービス『OneSpeak』へのiBeacon対応を発表いたしました。
http://isana.net/news/ibeacon/
ということでiBeaconについてまずはサクッとご紹介いたします。
iBeaconについて
iBeaconとは、iPhoneのiOS7から標準搭載されたBluetooth Low Energy(BLE)を使った新しい技術です。 iBeaconを実装したアプリはBLEの信号を受信することにより領域への侵入・退出・端末までのおおよその距離を検知することが可能です。 BLEの信号を発信する端末を店舗などに設置することで様々なマーケティング活用へ期待されています。
なぜ注目されているのか
従来、オンラインの告知から実際に店舗に誘導するO2O施策を行う場合、 近接距離通信の国際規格であるNFCが使われることが多くありましたが、 AppleがNFCをiPhone採用しなかったため、NFCはあまり普及しませんでした。 iBeaconはApple社の商標ではありますがBLEという汎用技術を使っているため、 Android端末でも同様の技術を適用することが可能であり、スマートデバイス全体で使う事ができます。
iBeaconの動作環境
iOS………iOS7以上・iPhone4S以降とiPad第3世代以降の端末 Android…AndroidOS4.3以上
iBeaconに設定できる情報
・proximity UUID Beacon端末や所属するグループを識別するための値 アプリに設定すれば対象のUUID以外のBeaconの信号は受信しない
・major UUIDが同じBeacon端末を識別するための値 使い方のイメージとしては特定の店舗など 0~65535の値
・minor UUIDが同じBeacon端末を識別するための値 使い方のイメージとしては特定の店舗内の位置など 例:レジ・入り口 0~65535の値
iBeaconが受信できる情報
・proximity UUID Beaconに設定してあるproximityUUIDの値
・major Beaconに設定してあるmajorの値
・minor Beaconに設定してあるminorの値
・proximity 距離(正確な数値としてわかるわけではない)
CLProximityUnknown—わからない、見つからない CLProximityImmediate—すごい近い 感覚値:50cm以内 CLProximityNear—けっこう近い CLProximityFar—遠い
iOSでの実装のポイント
iBeacon利用開始
// CLLocationManagerの生成とデリゲートの設定
self.manager = [CLLocationManager new];
self.manager.delegate = self;
// 生成したUUIDからNSUUIDを作成 NSString *uuid = @”00000000-xxxx-xxxx-xxxx-xxxxxxxxxxxx”;
//対象となるUUIDを設定 このUUID以外はイベントが発生しない self.proximityUUID = [[NSUUID alloc] initWithUUIDString:uuid];
// CLBeaconRegionを作成 self.region = [[CLBeaconRegion alloc]initWithProximityUUID:self.proximityUUID identifier:@”net.isana.isn-beacon”]; self.region.notifyOnEntry = YES; self.region.notifyOnExit = YES; self.region.notifyEntryStateOnDisplay = NO;
// 領域監視を開始 [self.manager startMonitoringForRegion:self.region];
Beacon領域に入った
監視対象のUUIDを持つBeaconの領域に入ったら通知が来る アプリを1度でも起動していればアプリが完全に停止している状態でも通知を受け取ることが可能 通知時に10秒程度アプリがbackgroundで起動する 領域に入ったらBeacon端末の距離測定を開始する
- (void)locationManager:(CLLocationManager *)manager
didEnterRegion:(CLRegion *)region{
[self sendNotification:@"iBeacon領域に入りました!"];
// 距離測定を開始 if ([region isMemberOfClass:[CLBeaconRegion class]] && [CLLocationManager isRangingAvailable]) { [self.manager startRangingBeaconsInRegion:(CLBeaconRegion *)region]; } }
Beacon領域から出た
監視対象のUUIDを持つBeaconの領域から出たら通知が来る アプリが完全に停止している状態でも通知を受け取ることが可能 通知時に10秒程度アプリがbackgroundで起動する 領域から出たらBeacon端末の距離測定を終了する
- (void)locationManager:(CLLocationManager *)manager
didExitRegion:(CLRegion *)region{
if ([region isMemberOfClass:[CLBeaconRegion class]] && [CLLocationManager isRangingAvailable]) { [self.manager stopRangingBeaconsInRegion:(CLBeaconRegion *)region]; [self sendNotification:@”iBeacon領域から出た!”]; } }
Beacon端末との距離観測
領域内のBeacon端末の距離などの情報が1秒程度の間隔で通知を受け取る 領域に複数端末が存在する場合は近い順に配列になって格納されている この通知はアプリが起動していないと受け取ることができない この通知でmajor、minor、proximityの情報を取り出してサーバーと通信するなどの実装をする
- (void)locationManager:(CLLocationManager *)manager
didRangeBeacons:(NSArray *)beacons
inRegion:(CLBeaconRegion *)region{
NSNumber* major = @0; NSNumber* minor = @0;
// 最初のオブジェクト = 最も近いBeacon CLBeacon *beacon = beacons.firstObject;
CLProximity proximity = beacon.proximity; major = beacon.major; minor = beacon.minor;
//proximityの値を判定してサーバーと通信するなどを実装する
}
次回はもっと具体的にPush通知と連動した実例をご紹介できるようにします! アイデア次第で使いみちは結構ありそうですよね。
Comments