2024.11.14
いまさらNode.jsを知ろう~環境構築も~
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つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索