Может ли iOS по-прежнему запускать приложения в диапазоне iBeacon в iOS 10?
Я искал несколько дней на эту тему. Я видел несколько постов, но ни одна из реализаций не работает, или они упоминают устаревшие методы, опции или библиотеки, которые являются частными. Я нахожу документы Apple самыми ужасными за все время, и тем не менее даже в этой фиктивной стене текста, известной как их документы, я нашел несколько ссылок на запуск завершенного приложения, основанного на входе в диапазон iBeacon.
Мне нужно, чтобы приложение было полностью закрыто и завершено, как если бы пользователь завершил работу с ним. Тогда мне нужно использовать UIBackgroundMode
за услуги BLE в info.plist
для прослушивания didRangeBeacons
метод делегата. Это срабатывает, так что я знаю, что многое работает.
Именно в этот момент все реализации до сих пор потерпели неудачу. Как, черт возьми, вы запускаете приложение в фоновом режиме, находясь в зоне действия iBeacon? Я начинаю думать, что все, что вы можете сделать, это вызвать локальное уведомление, когда в радиусе действия...
1 ответ
Получение приложения для автоматического запуска из неработающего состояния на основе обнаружения iBeacon на удивление легко CoreLocation
и iBeacon.
Чтобы это работало, необходимо выполнить несколько предварительных условий:
- Приложение должно быть запущено вручную один раз.
- При первом запуске приложение должно запросить и получить доступ к местоположению "Всегда" от пользователя.
- Приложение должно зарегистрировать
CLBeaconRegion
сCLLocationManager
позвонивlocationManager.startMonitoring(region: region)
и установитеlocationManager.delegate
, Так как вы также хотите ранжировать, вы можете одновременно звонитьstartRanging(beacons: beacons, region: region)
, Обычно это проще всего сделать вAppDelegate.
- В телефоне должно быть включено местоположение и включен Bluetooth.
Если вы все сделаете правильно, iOS CoreLocation запомнит, что ваше приложение зарегистрировало CLBeaconRegion
и автоматически запускать ваше приложение при обнаружении маяка. Даже если вы перезагрузите телефон или убьете свое приложение из переключателя задач, оно сделает это. После автоматического запуска приложения в фоновом режиме оно вызовет didEnter(region: region)
Обратный звонок на ваш делегат, а затем начать вызывать didRange(beacons: beacons, region: region)
Обратный вызов выполняется один раз в секунду в течение 10 секунд, пока операционная система снова не приостановит ваше приложение.
Есть много способов сделать ошибки при тестировании, так что это не работает. Но если вы все делаете правильно, это чертовски надежно.
То, что вы не можете сделать, это вывести приложение на передний план программно, потому что iOS не позволяет этого. На iOS пользователь должен сделать жест, чтобы вывести приложение на передний план - это не имеет ничего общего с маяками, а является давним правилом в дизайне ОС. Вот почему многие приложения отправляют локальное уведомление, находясь в этом кратком фоновом состоянии после обнаружения маяка, чтобы дать пользователю способ вывести приложение на передний план.