狠狠撸

狠狠撸Share a Scribd company logo
iBeacon Tips
potatotips-27
佐藤 光
iOS App Developer
佐藤 光
@SatoHikaruDev
iOSアプリのプログラミングと、少しのサーバーサイドjavaやAndroidアプリの
プログラミングをしています。
自己紹介
目次
? iBeaconとは
? 颈叠别补肠辞苍利用时に必要な条件
? 実装
? よいと思ったところ
? 悪いと思ったところ
颈叠别补肠辞苍とは?
? Beaconと呼ばれる発信機から出て
いるBluetooth Low Energy(BLE)
の信号を受信する機能。
? 近くのお店のクーポンや商品情報
を通知にするのに利用されている
。
? iOS7に搭載されて、2014年ぐら
いに話題になったが、いまだあまり
多くに浸透はしていないように感じ
ている(似たような技術のNFCに比
べて)。
? だが、アイデア次第では今後ブレイ
クの可能性はまだまだあるのでは?
と思って、今回の題材にしました。
颈叠别补肠辞苍利用时に必要な条件
? Beacon機器(aplix、estimote、Gimbalなど)
? 1個300円?3000円くらい
? iPhoneやMacでもOK
? iOS7以降
? Bluetoothが搭載されたiPhone/iPad/iPodなど
実装
Beacon監視開始
locationManager = CLLocationManager()
locationManager.delegate = self
//iBeaconは位置情報「常に利用」の許可が必要。info.plistにもNSLocationAlwaysUsageDescriptionを追加しておく。
if locationManager.respondsToSelector("requestAlwaysAuthorization") {
locationManager.requestAlwaysAuthorization()
}
//ビーコン領域を生成
let uuidString = "EBEFD083-70A2-47C8-9837-E7B5634DF524"
let beaconIdentifier = "sample_iBeacon"
let beaconUUID = NSUUID(UUIDString: uuidString)!
let beaconRegion = CLBeaconRegion(proximityUUID: beaconUUID,
identifier: beaconIdentifier)
//let beaconRegion = CLBeaconRegion(proximityUUID: beaconUUID, major: 3, minor: 1, identifier: beaconIdentifier)
//beacon領域に入ったときのdelegateからの通知がいらないときはfalse。defaultはtrue
//beaconRegion.notifyOnEntry = false
//beacon領域に入ったときのdelegateからの通知がいらないときはfalse。defaultはtrue
//beaconRegion.notifyOnExit = false
//iPhoneのロック解除ボタンが押されて、ロック中画面が表示されたときにBeaconの状態(内側にいるか外側にいるか)を確認するかど
うか。defaultはfalse
beaconRegion.notifyEntryStateOnDisplay = true
//Beaconの領域IN/OUTの監視開始
//これで、locationManager:didEnterRegion や
//locationManager:didExitRegionが通知される(アプリが起動していない時でも)
//20個(uuidString/major/minorの組み合わせ)のbeaconRegionまで監視可能
locationManager.startMonitoringForRegion(beaconRegion)
Beacon領域IN/OUTを検知(delegate)
//以下のdelegeteはアプリが起動していなくてもコールされる(その際、AppDelegateのdidFinishLaunchingWithOptionsがコールさ
れた後に、以下のdelegateメソッドがコールされる)
/**
* beaconの領域に入った
*/
func locationManager(manager: CLLocationManager,
didEnterRegion region: CLRegion) {
manager.startRangingBeaconsInRegion(region as! CLBeaconRegion)
manager.startUpdatingLocation()
//結構感度が良い
}
/**
* beaconの領域から出た
*/
func locationManager(manager: CLLocationManager,
didExitRegion region: CLRegion) {
//didEnterRegionに比べて感度が悪い
}
/**
* beaconRegion.notifyEntryStateOnDisplay = true時に、iPhoneのロック解除ボタンが押されて、ロック中画面が表示された時、コ
ールされる。
*/
func locationManager(manager: CLLocationManager,
didDetermineState state: CLRegionState,
forRegion region: CLRegion) {
//現在、対象Beaconの内側/外側/どちらかかわらないかが、stateで取得できる
}
Beacon領域IN/OUTのエラー検知(delegate)
/**
* beacon監視でエラー。
*/
func locationManager(manager: CLLocationManager, monitoringDidFailForRegion region:
CLRegion?, withError error: NSError) {
//ex) 監視するbeaconが無効、beaconを21種類以上登録した場合など
}
Beaconデータの受信開始
locationManager.delegate = self
//Beaconデータの受信開始。Beaconデータ(CLBeacon)には
//uuid/major/minor/CLProximity(すぐ近く/近い/遠い)/rssi(信号強度)が入っている
locationManager.startRangingBeaconsInRegion(beaconRegion)
Beaconデータ受信を検知(delegate)
/**
* Beaconデータ受信処理
*/
func locationManager(manager: CLLocationManager,
didRangeBeacons beacons: [CLBeacon],
inRegion region: CLBeaconRegion) {
//Beaconデータ受信時は何度もコールされる。CLBeaconには
uuid/major/minor/CLProximity(すぐ近く/近い/遠い)/rssi(信号強度) が入っている
//Beacon範囲に入っている時はbeaconsリストにCLBeaconオブジェクトが入っているが
、
//Beacon範囲から出てもしばらくbeaconsリストが空でコールされる。
}
Beaconデータ受信のエラー検知(delegate)
func locationManager(manager: CLLocationManager,
rangingBeaconsDidFailForRegion region: CLBeaconRegion,
withError error: NSError) {
//beaconデータ受信でエラー。
//ex) 監視するbeaconが無効など
}
よいと思ったところ
? iPhoneのロック解除ボタンを押した時にも
Beacon検知タイミングがあるところ。
? ローカル通知したいときに、ユーザーの目に
つきそう
? Beacon検知している時、ロック画面左下に
アプリのアイコンが表示される。
by スマートフォンECラボ(http://smartphone-ec.net/)
? 省電力
? iBeaconの方が、GPSを利用した領域観測
(iOSの別機能)に比べて電池が長持ちしそう
? Beacon機器は乾電池2本でほとんどのもの
が1年以上は持つ。
悪いと思ったところ
? iPhoneの電源ONにした直後1?5
分くらいBeaconを検知できない時
間がある。
? Beacon領域OUTの検知が遅いので、そ
れを早めに検知したい時は工夫が必要
そう。
? Beaconデータ受信検知で受信データが
空になった時と組み合わるなど
まとめ
? 実装はかなり簡単。
? アプリを起動していなくても、起動できるトリガ
ーが多い(Beacon IN/OUT検知、ロック画面表示
時)。
? まだ流行ってはいないが、日本でも徐々に
iBeaconサービスが出てきているので、今後普及
するかも?
佐藤 光
@SatoHikaruDev
http://qiita.com/HIkaruSato
ご静聴ありがとうございました。

More Related Content

iBeacon tips(potatotips27)