Open6

MonitoringとRanging、バックグラウンドでRangingは結局できるのか

さしもんさしもん

アプリがはいってさえいればバックグランドでもMonitoringは実行されるみたいだけど
今回実装したいものについてはバックグラウンドでもRangingが動作していないと困るので調べているけど
記載では「バックグランドでは無理」「短い時間ならできる」といった内容をよく見かける
https://community.estimote.com/hc/en-us/articles/203914068-Is-it-possible-to-use-beacon-ranging-in-the-background-

でも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.

https://community.estimote.com/hc/en-us/articles/203914068-Is-it-possible-to-use-beacon-ranging-in-the-background-

さしもんさしもん

と思ったけど
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は取れるはずなので、わざわざ裏で動かし続けてる距離を取得する必要がなぜあるのか説明によってはリジェクトの対象となる可能性