iOS7から搭載されたiBeaconについて

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通知と連動した実例をご紹介できるようにします!
アイデア次第で使いみちは結構ありそうですよね。

iOS7から搭載されたiBeaconについて iOS7から搭載されたiBeaconについて Reviewed by Masafumi Abe on 15:57:00 Rating: 5
Powered by Blogger.