さくっと本題に入りますね。
#どこが改善されたの?
- Backgroundで起動していなくても反応するようになった
- 応答速度が向上した
##Backgroundで起動していなくても反応するようになった
正直なところ、iBeaconってO2Oでものすごく注目を浴びて、もてはやされてきましたが、アプリをフォアグラウンドもしくはバックグラウンドで立ち上げていないといけないなど、色々な制限があり、はいはい解散解散、なムードがあったと思うんですよ。特に最近。
しかし!iOS7.1では、アプリがiBeaconのMonitoringを開始していれば、その後ユーザがアプリを終了させても反応するようになりました。
つまり、
- 一度起動して、そのまま封印していても、
- 意図的、もしくはフリーズなどで再起動しても、
- 電源をオフにして、その後オンにした後でも、
上記のような場合でも、アプリはiBeaconを検知します。すばらしい!
具体的にどのような処理の流れになるかというと、
####アプリが起動していない状態の場合
- デバイスがregionに入る/出る
- アプリが自動的にBackgroundで起動する
- 処理が実行される
####アプリがサスペンド状態の場合
- デバイスがregionに入る/出る
- wake upする
- 10秒程度のイベントをハンドルする処理時間が与えられる。なお、この時間は
beginBackgroundTaskWithExpirationHandler:
で増やせる
##応答速度が向上した
iBeacon検知後、体感でだいたい10秒から30秒ぐらいしないと通知を投げてくれなかったのですが、体感でちょっと何となく早くなったような気がしました。
しかし、appleのドキュメントを読み直すと、スパムや乱雑な通知を避けるための閾値としてOSで定められている、20秒以上境界線の中もしくは外にいないと通知はされないようになっているようです。
##アプリを作る上で逆に考えないといけない事
アップルはiOSユーザ向けの発表にはこれらの変更点を載せていません。
(http://support.apple.com/kb/DL1732 参照の限りは、です。)
よって、全くアプリを起動していない状態なのにいきなり通知が来たりすると「ん?なんだこのアプリは。スパムか??」というような憶測などにより、アプリ自体の評価を下げてしまったりするかもしれません。
このような事態を引き起こさないように、適度な通知を行なう、ユーザに周知するなどの工夫が必要そうです。