Я пытаюсь выяснить, находится ли пользователь рядом с iBeacon на iOS. Для этого я использую CoreLocation.
Когда пользователь входит в регион, запускается didEnterRegion
, а затем didDetermineState
. Когда пользователь покидает регион, запускается didExitRegion
(возможно, с некоторой задержкой), а затем didDetermineState
. Я даже обнаружил флаг в CLBeaconRegion
, который запускает didDetermineState
, когда дисплей включен.
Пока это работает нормально. Тем не менее, я бы хотел время от времени получать вызов didDetermineState
. Это не должно быть частым, каждый час или два были бы совершенно нормальными, и я не возражал бы, что это не был точно такой же интервал, если он гарантированно сработает через пару часов.
Я знаю, что могу запросить вызов didDetermineState
, позвонив по номеру requestStateForRegion
, но для этого необходимо запустить приложение.
Я хочу выделить следующие случаи:
- Пользователь вошел в регион и остается там в течение нескольких часов / дней / недель / месяцев / лет / десятилетий с включенным телефоном
- Пользователь вошел в регион, исчерпалБатарея (или отключенный Bluetooth) и может или не может остаться в какой-то момент
Если обновление было гарантировано каждые один или два часа, я мог бы быть уверен, что 2. это случай, если обновление несрабатывает после этого периода.
Решения, о которых я думал до сих пор:
- , чтобы отправлять (беззвучный) пуш на устройство каждый час и вызывать приложение
requestStateForRegion
inфон. Но, похоже, не гарантировано получить фоновое время. Кроме того, он имеет недостаток, заключающийся в том, что устройству требуется активное подключение к Интернету. - для отправки (не тихого) нажатия на устройство, зная, что оно включит дисплей и, следовательно, вызовет обновление. Но получение видимого толчка все время раздражает, и опять же требуется подключение к Интернету.
Есть ли какой-либо другой способ вызвать requestStateForRegion
для фонового / приостановленного приложения время от времени?