Edited at

iOSデバイスをiBeacon発信機にする.

More than 3 years have passed since last update.


道具作りから

ちょっとしたiBeaconアプリを作りたかったんですが、開発用に使ってたLightBlue Beanのコイン電池が切れてたので、とりあえず自宅にはiPhone6もiPad Airもあるので一台をiBeacon発信機にして開発を進めることにしました。

AppStoreにはこれというものがなかったので、ネットで探すと実装の参考となるサイトも見つかったのですが、検索キーワードの問題なのか探すのは大変でした。

iBeacon自体がそんなに話題になってないのかな・・・とか思ったり。

単純なものでよかったので、自分で実装してみることにしました。


実装


サンプルコード

iBeaconアプリもそうなんですが、うまくフレームワーク化されているので非常にシンプルに利用することができます。(これで面白いアプリを作るのは簡単ではないかも)


CBPeripheralManagerとCBPeripheralManagerDelegate

iBeaconの発信にはCBPeripheralManagerとCBPeripheralManagerDelegateを実装する必要があります。


self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self
queue:dispatch_get_main_queue()];

これはviewDidLoadにでも置いておけばよいです。


#pragma mark - delegate
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral
{

}

このメソッドをオーバーライドしないとWarningが出ますが、中身は空でよいです。


ビーコンの発信

次のようなコードで発信できます。


NSUUID* uuid = [[NSUUID alloc] initWithUUIDString:UUID];
CLBeaconRegion* region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid
major:[self.majorText.text intValue]
minor:[self.minorText.text intValue]
identifier:[uuid UUIDString]];

NSDictionary* peripheralData = [region peripheralDataWithMeasuredPower:nil];//Default
[self.peripheralManager startAdvertising:peripheralData];

UUIDは128bitのユニークなキーを与える必要がありますが、コンソールからuuidgenを使って生成したキー文字列を利用するのがよいと思います。


github

下記にサンプルプロジェクトを起きました。

参考にしてください。

https://github.com/g-1/iBeaconDevice


確認方法

ちゃんとビーコンを発信できているかどうかという確認ですが、私はLightBlue

というアプリを使ってます。

お手軽に確認ができるのでオススメです。


謝辞

下記のサイトを参考にさせていただきました。

http://www.gaprot.jp/pickup/ios7/vol2/

ただ、iOS7のときの記事なので、iOS8になっていろいろ変わっているかもしれません。

設定の位置情報のくだりは、確認できませんでした。

iBeaconはiOS8になっていろいろ変わっているので他にも違っている箇所があると思われます。