メニューを閉じる

テクノデジタルグループ

メニューを開く

2015.09.02

プログラミング

iBeaconとフォアグラウンドとバックグラウンドとか

GTラボ坂東です。最近こういうアプリ作ったんです。

びこり! – 汎用型ビーコンリーダー
https://itunes.apple.com/jp/app/id998834062

アプリ名は「iBeaconリーダー」にしたかったんですけど、「iBeacon」はAppleの商標だから使っちゃいけないんですって。まあアプリ名に入れるのはいけないよな、と分かるんですが、説明文で使うのも禁止。
「iBeaconと連動した」と書きたいのに「ビーコンと連動した」と書かなくちゃいけないんです。「※iBeaconはAppleの商標です」と説明入れても駄目。
これで2回リジェクトくらいました。でも「iBeacon」使って通ってるアプリもあるんですよ。たぶん私への嫌がらせなんでしょうね。

開発ブログなんで愚痴じゃなくて技術的な事書きます。

iBeaconの基本的な話はもう大勢の方が書かれているので、ここらへんを参考に実装して下さい。
http://grandbig.github.io/blog/2015/06/14/multi-ibeacon-region/
で、以下は実装経験のある人向けのお話です。

 

iOSのアプリには大きくわけて3つの動作モードがあります。

1.フォアグラウンド
アプリが画面上に表示された状態
2.バックグラウンド
アプリをHOMEボタンなどで閉じて10分ぐらいの間はプロセスが生きてる
3.プロセス消滅
10分以上たったりメモリが足りなくなるとプロセスが消える

それぞれのモードでiBeacon周りの挙動が変わります。

1.フォアグラウンド
ビーコンの領域内に居るよと「didRangeBeacons」がぶりぶり呼ばれる。100ms間隔?
ビーコンを受信するたびAPIを叩くような実装をしていると大変なことになりました。
受信の他に、距離が変わったとか、電波の範囲外に出たというのを、リアルタイムに検知可。
2.バックグラウンド
フォアグラウンドとほぼ同じ挙動だけどブツンとdidRangeBeaconsが呼ばれなくなる。
3.プロセス消滅
ビーコンを受信すると領域に入ったよと「didEnterRegion」が呼ばれて約10秒間だけプロセスが動作、didRangeBeaconsもぶりぶり呼ばれる。API叩いたりできる。
受信圏外になって30秒ぐらいたつと、領域から出たよと「didExitRegion」が呼ばれて10秒動作。

お店にビーコン置いて入店でポイントGET、程度のシンプルな使用なら気にしないでいい部分です。
ただ、凝った処理を行おうとすると気をつけないといけません。
例えばひとつビーコンで入店時の案内と、レジでタッチによる決済を行いたいとします。
入店時はアプリのプロセスが無くても、受信したらdidEnterRegionが呼ばれるのでAPI叩いたりPUSHしたりってできるんです。ただそのままスマホをビーコンにタッチしてもプロセス動いてなくてdidRangeBeaconsが呼ばれないから何も起こらない。
アプリをフォアグラウンドにしてもらうよう誘導するか、電波を10cmぐらいしか飛ばなくした近接専用の別のビーコンをレジに置く必要があります。

ところで、iBeaconの領域ってUUID単位なんですよね。
iOSでは同時に20個のUUIDを読むことができるので、1.5秒間隔でUUIDを切り替える発信器があったらきっと面白いですよね。
UUID1でdidEnterRegion→UUID2でdidEnterRegion→…→UUID20でdidEnterRegion
→UUID1がdidExitRegion→UUID1でdidEnterRegion→UUID2がdidExitRegion→UUID2でdidEnterRegion→…
バックグラウンドでプロセスが動き続けてサービスみたいな事できそう。
私は試してないし、Appleの想定外だろうから怒られて(デベロッパーリジェクトとか)も知りません。

 

iBeaconに関してはまだまだ書けることがあるので、週一ぐらいのペースで投下していこうとおもいます。
このような内容を予定しています。

beacons
.firstObjectは使わないほうがいいよ
BLEがOffの時は警告を出そう
ユーザーにアプリを終了させない工夫
Androidは機種ごとに挙動が違っててたいへん
Eddystoneまだ使えない

えらそうに書いてるけど実装したの1ヶ月まえで細部うろ覚えなので、間違ってたらご指摘下さい。
よろしくお願い致します。

 


【記事への感想募集中!】

記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!
  • こんな記事が読んでみたい、こんなことが知りたい、調べてほしい!という意見も募集中!
  • いただいた感想は今後の記事に活かしたいと思います!

感想フォームはこちら


【テクノデジタルではエンジニア/デザイナーを積極採用中です!】

下記項目に1つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』

【テクノデジタルのインフラサービス】

当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。

https://www.tcdigital.jp/infrastructure/

最近の記事