MonitoringとRanging、バックグラウンドでRangingは結局できるのか
MonitoringとRangingの違いはこの記事がわかりやすい
日本語の記事でも一部記載あるエリアへの出入りを監視する「リージョン監視」
エリア内でのビーコン情報を取得する「レージング」
https://qiita.com/himara2/items/1d6c11a4d4839c3027d5
アプリがはいってさえいればバックグランドでもMonitoringは実行されるみたいだけど
今回実装したいものについてはバックグラウンドでもRangingが動作していないと困るので調べているけど
記載では「バックグランドでは無理」「短い時間ならできる」といった内容をよく見かける
でも10分以上できてるからこの辺の事実を知りたいために調べる
気の所為だった
念の為didRangeで検出されたビーコンをprintするようにして確認してみた
位置情報の許可が「常に許可」のとき
- バックグラウンド(ホームに移ってスクリーンOFF): 約3分経つとそれ以降はビーコン情報をログに出力しなくなった
- バックグラウンド(別のアプリ利用): 約5分経つとそれ以降はビーコン情報をログに出力しなくなった
- フォアグラウンド: 約10分経つとそれ以降はビーコン情報をログに出力しなくなった
*フォアグラウンドに関してはエリア内にいれば検知されつづけるはずなので実装を確認し直す
位置情報の許可が「アプリ使用中の場合のみ許可」のとき
- バックグラウンド(ホームに移ってスクリーンOFF): 10秒経つとそれ以降はビーコン情報をログに出力しなくなった
- バックグラウンド(別のアプリ利用): 10秒経つとそれ以降はビーコン情報をログに出力しなくなった
- フォアグラウンド: 約10分経つとそれ以降はビーコン情報をログに出力しなくなった
*フォアグラウンドに関してはエリア内にいれば検知されつづけるはずなので実装を確認し直す
現状抱えてる障害となる問題
- Ragingを行う時間ががバッググラウンドでもフォアグラウンドでも短すぎる
確認
- 本当に距離を測る必要があるのか?Nearやfarのようなおおよそではだめなのか
- MonitoringとRangingの一連の流れをできればOfficialから得る
*Officialなところでなければちらほらみかけるhttps://noumenon-th.net/webstrategy/2014/11/30/swift%E3%81%A7beacon%E9%A0%98%E5%9F%9F%E3%81%AE%E8%A6%B3%E6%B8%AC%E3%82%92%E3%81%99%E3%82%8B/
やっぱりバッググラウンドでのRangingはMax3分っぽい?
You can use the fact that iOS wakes/launches your app into the background for a few seconds to handle monitoring enter/exit events, and use those few seconds to range for beacons.
You can start a background execution task to extend the time your app can spend in the background. The empirical limit as of iOS 9 seems to be 3 minutes, but you should use the backgroundTimeRemaining property to know for sure how much time your app has in the background before iOS force-terminates it. You can use all this time in the background to perform ranging.
と思ったけど
background processingの設定をONにすればいけそう?👈朝確認
*- background processingをtrueに
Continuous background ranging
If short-term background ranging is not enough, you need to find a way to keep your app running in the background longer by using Background Modes. However, keep in mind that the use of Background Modes is heavily regulated by Apple! They only accept apps using Background Modes when it's justified—e.g., an app using the "audio" background mode needs to be playing music in the background, etc.
The only Background Mode which remotely makes sense in the context of beacons is the "location" background mode. Even then though, there must be clear value for the end user coming from the use of background ranging, value that can't be fulfilled at all with monitoring. You’ll also have to lay this value out in the review process. Users should also be provided with an easy way to opt-out of this kind of service.
If you’re planning to use the "location" background mode to do long-term ranging without a major user benefit (for example just to track user’s movements for your analytics—i.e., you're the beneficiary, not the user), you will most certainly have your app rejected.
Also, keep in mind the power consumption and performance implications of having your app continuously running in the background with ranging enabled (which keeps the radio going). Nobody wants their app uninstalled because users found out it eats up their battery and slows their device down. For the "location" background mode, Apple requires you to add a boilerplate "Continued use of GPS running in the background can dramatically decrease battery life." line to your app description.
https://community.estimote.com/hc/en-us/articles/203914068-Is-it-possible-to-use-beacon-ranging-in-the-background-
【共有スべきリスク】
- 長時間バッググラウンドで位置情報の取得を行うのでバッテリー問題を気にする必要があるかもしれない
- 距離を計算&取得しなくても、proximityでnearとかfarは取れるはずなので、わざわざ裏で動かし続けてる距離を取得する必要がなぜあるのか説明によってはリジェクトの対象となる可能性