アプリを終了させるとビーコンのリージョンに入ってもdidEnterRegionが呼ばれない

ionic2でIBeaconクラス(cordova-plugin-ibeacon)を使用している。
アプリがフォアグラウンド、あるいはバックグラウンドにいるときはdidEnterRegionが呼ばれるのだが、終了させるとdidEnterRegionが呼ばれなくなる。
iOSは7.1からアプリを終了させてもモニタリングは継続してくれるはずだから、何かおかしい。


いつものように色々調べると、このアプリ終了後の挙動は、ビーコンのリージョンに入ったときに裏でアプリが起動され、そこでアプリのコードが実行される仕組みになっているということがわかった。
翻って自分のコードを見ると、アプリを起動して1画面遷移したところでdidEnterRegionをsubscribeしている。
これでは裏でアプリが起動されたときにsubscribeが行われない。


というわけで、最初の画面でdidEnterRegionをsubscribeするようにしたところ、アプリ終了後もdidEnterRegionが呼ばれるようになった。

iOSを再起動させるとdidEnterRegionが呼ばれなくなる

iOS7.1からはビーコンのモニタリングはアプリを終了しても、iOSを再起動しても継続するはずなのだが、iOSを再起動させるとdidEnterRegionが呼ばれなくなった。
例によって色々調べてみると、iOS起動後しばらくはCoreLocationがまだおねむな状態らしい。
少なくとも2分は待ってね、と書いてあるので、待ってからリージョンに入るとdidEnterRegionが呼ばれるようになった。


ただ、ビーコンを近くに置いてON/OFFを切り替えるのでは、didEnterRegionもdidExitRegionも呼ばれない(呼ばれることもある?)ようなので、遠くからビーコンに近づいたり離れたりする正規の手順でやったほうが良いようだ。
(再起動後に限らないけど)


http://stackoverflow.com/questions/28028382/ibeacon-monitoring-ranging-after-device-restarts