iBeaconを利用したアプリ開発について

iBeaconはiOS7から標準搭載されたBluetooth Low Enaergy(BLE)を使った新技術で,オンラインの情報からオフライン(実際の店舗など)にユーザを誘導するO2O(Online to Offline)施策の切り札になるのではないかと注目を集めている技術です。

従来のO2O施策ではNFCが多く利用されていましたが,iPhoneにはNFCが搭載されておらずiPhoneユーザは利用できない状況でした。
また,日本ではiPhoneのスマートフォンシェアが約7割という調査結果も出ており,特に日本でのO2Oの普及が伸び悩む原因となっています。

iBeaconはBLEに基づいた技術なので,「iBeacon」というAppleの商標はついていますが,同様のことはBLEに対応したAPIが追加されたAndroid4.3以降の端末でも可能となっています。

私はプログラマなので実際にiBeaconアプリを開発する上でのポイントなどをご紹介します。

iBeaconの基本的な仕組みはビーコン(発信機)から常時発信される以下の情報をiPhone(受信機)で受け取るという単純なものです。

  • 送信される情報
    1. UUID:128ビット文字列
    2. Major値:16ビット整数
    3. Minor値:16ビット整数

注意点としては, このUUIDはビーコン固有のUUIDではありません。ビーコン領域(リージョン)のUUIDとなります。
そのため,一つの店舗のビーコンは全て同一のUUIDに設定し,Major値・Minor値の組み合わせでビーコンを特定するような使い方になります。

上記の情報に付随してビーコンからの信号電波強度(rssi)から距離の概算を取得することができます。

  • 取得可能な距離情報
    1. 近接度(proximity):接近(Immediate),近い(Near),遠い(Far),不明(Unknown)のいずれか
    2. 精度(accuracy)

よくaccuracyを距離(m)と解説しているサイトが有りますが,そうではなく精度≒推定誤差です。
地図アプリでGPSを使用した際に表示される誤差の円のようなものです。
この技術では電波強度から距離を概出しているに過ぎないため,ビーコンとの正確な距離は取得できません。
もちろん遮蔽物の状況によっても変わります。
実際に試してみた感じですと,だいたいImmediate:10cm以内,Near:1m以内,Far:1m以上といったところでした。
ビーコンとiPhoneの距離の変化に対する距離情報の追従はワンテンポ遅い感じです。(2秒程度経って変化するぐらい)
内部的にある程度サンプルを取って平均値を返しているような挙動です。

実際のビーコン検出は以下の2つの方法を組み合わせて行います。

  • リージョン監視
    アプリで予めビーコン領域(リージョン)のUUIDを登録しておくことで,リージョンへのIn・Out時にアプリ側に通知が来ます。
    この検出はバックグラウンド動作中も可能です。
    ただし,この際に取得できる情報はリージョンのUUIDのみです。
    ビーコンごとのMajor・Minor・距離情報は取得できません。
  • レイジング
    こちらはアプリから動的にビーコンを検出しに行く感じです。
    1秒ごとに検出されたビーコンのリストを取得できます。
    もちろん,ビーコンごとのMajor・Minor・距離情報も含まれます。

レイジングは常にONにすると電力消費が大きいため,リージョン監視でリージョン内であることを検知すると,
レイジングをONにするような使い方になります。
なお,ユーザがリージョンの境界をウロウロした際に,通知が頻繁に発生することを抑えるため,
リージョンからの退出検知は大きめのバッファが取られています。
そのため,ユーザの退店等を即座に検出するのは難しいです。

あとはこれらの情報とオンラインの情報を組み合わせてサービスを提供することになります。

iOS上でiBeaconをユーザに使用してもらうには以下のハードルを超える必要があります。

  1. iBeaconを使用するアプリをインストールしてもらう
    ※標準アプリのPassbookを使う方法がありますが,こちらについては後述。
  2. iOS7以上を使ってもらう
    iOS7からの技術なので必須です。
  3. Bluetooth機能をONにしてもらう
    BLEを使用した技術なので必須です。
  4. アプリの位置情報サービス利用を許可してもらう
    iBeaconの機能はCoreLocationモジュールに含まれるため許可してもらわないと情報が取れません。
  5. アプリを起動(バックグラウンド動作を含む)しておいてもらう
    アプリが起動している場合しか通知することができません。
    バックグラウンド動作中はビーコン領域へのIn・Out(リージョン監視)のみ検出可能

ユーザに予めやってもらうことが多いため,ある程度ユーザにiBeacon(アプリ)を使う意識を持ってもらうことが必要そうです。
電池の持ちを考慮してBluetoothをOFFにしているユーザが多いと思われますので,このあたりのユーザへの動機付けがサービスの成否を分けそうです。

Passbookとの連携は若干上記と異なります。
Passに予め対応するビーコンの情報(UUID・Major・Minor)を設定しておくことで,そのビーコンと対応したPassがロック画面に表示されるようになります。
GPSより精度よくクーポンなどを提示したい場合に使えそうです。
クーポン裏面にはURLリンクを設置することが可能で,URLスキームと組み合わせることでアプリへ誘導することも可能です。(iOS7からのテキストリンク使用時のみ)
ただし,ロック画面からクーポン表示時はリンクは不活性になってしまうため,Passbookアプリから表示する必要があります。

その他にiBeaconを利用する際に知っておく必要が有ることは,セキュリティについてです。
ビーコンは自分の情報(UUID・Major・Minor)を無差別に発信(アドバタイズ)しているだけですので,セキュリティは非常に低いです。
そのためビーコンに近づくとポイントが発行されるようなシステムを構築した場合,
偽ビーコン(実際のビーコンと同一のUUID・Major・Minorを発信する)を作られてしまうと来店していないのにポイントが貯まるといったことが簡単に可能となります。
このあたりは他の情報(GPS情報など)と組み合わせてうまくやる必要がありそうです。

アメリカでは日本と違いNFCの普及度が低いため,iBeaconの普及にかなり力を入れているようです。
実際に導入された例としては以下のようなものがあります。

このシステムではスタジアムのゲートに近づくとチケットが画面に表示されたり,スタジアム内の売店に近づくとクーポンが表示されたりするようです。

こういったユーザが特定の場所に近づくことでその場所に最適な情報を手に入れることができ,
店舗側はユーザの動線やホットスポットを知ることができるようなシステムが主になっていきそうです。

単純な仕組みだからこそ他の技術と組み合わせることで様々な場所で応用できると思います。
普及していない今のうちに触ってみては如何でしょうか?

もちろんiPhoneをビーコン(発信機)にすることも可能です。