#android #ibeacon #ibeacon-android
#Android #ibeacon #ibeacon-android
Вопрос:
Я использую библиотеку Android (org.altbeacon: android-beacon-library: 2.19.3), предоставляющую API для взаимодействия с маяками
Он имеет требуемое местоположение и разрешение Bluetooth.
Требования к разрешениям:
https://altbeacon.github.io/android-beacon-library/requesting_permission.html
ibeacon для IOS не требует разрешения Bluetooth, зачем android ibeacon нужно разрешение Bluetooth?
есть ли какая-либо альтернативная библиотека для Android Ibeacon
Ответ №1:
Да, Android требует разрешения Bluetooth для сканирования маяков Bluetooth, но iOS не требует такого же разрешения для обнаружения iBeacon. Требование к Android иметь разрешение Bluetooth для сканирования маяков верно независимо от используемой библиотеки. Это ограничение платформы ОС.
Причина, по которой Android требует этого разрешения, а iOS нет, основана на истории развития двух платформ. Несколько моментов:
- Начиная с iOS 7, поддержка Bluetooth beacons была добавлена в CoreLocation API, который использовал разрешение местоположения, а не отдельные разрешения для различных датчиков, таких как GPS, Wi-Fi, сотовая связь и Bluetooth, все из которых могут использоваться для определения местоположения. Apple явно приняла дизайнерское решение поместить все датчики под одно разрешение.
- Android с открытым исходным кодом вообще не имеет встроенных API для обнаружения маяков — у него есть только API Bluetooth. (API-интерфейсы Beacon предлагаются надстройкой Google Play Services или библиотекой Android Beacon с открытым исходным кодом). Поэтому имеет смысл, что когда в Android 4.3 было добавлено сканирование файлов Bluetooth, оно рассматривалось как нечто, что должно находиться за разрешением Bluetooth.. Эти API-интерфейсы работали с изобретением Apple iBeacon, но API-интерфейсы не были предназначены для определения местоположения.
- Когда Android добавил разрешения времени выполнения в Android 6, он попытался защитить конфиденциальность пользователей, сделав разрешение местоположения разрешением времени выполнения, и, кроме того, он поместил сканирование Bluetooth за это же разрешение местоположения в дополнение к разрешению Bluetooth в попытке защитить конфиденциальность.
- На iOS API-интерфейсы Bluetooth LE требуют разрешения Bluetooth, и Apple изолировала функциональность Bluetooth от iBeacon. Таким образом, обнаружение iBeacon должно получать разрешение на определение местоположения и не требует разрешения Bluetooth. С другой стороны, обнаружение без iBeacon возможно при обычном разрешении Bluetooth, но Apple отфильтровывает любые пакеты, соответствующие iBeacon. Android не имеет эквивалентной песочницы, что является одной из причин, по которой требуются оба разрешения.
Следует отметить одну важную вещь: Apple, не требующую разрешения Bluetooth для обнаружения маяков, применяется только к формату iBeacon. Если вы попытаетесь обнаружить AltBeacon или Eddystone, вам действительно нужно разрешение Bluetooth (а не разрешение на местоположение для этих форматов). Это «лазейка», которая полезна для того, чтобы избежать дополнительных разрешений в некоторых случаях на устройствах iOS.
Последнее замечание: начиная с Android 12, появляется новое разрешение BLUETOOTH_SCAN, которое вы можете использовать вместо разрешения местоположения. Идея состоит в том, чтобы сделать так, чтобы Android больше не требовал разрешения местоположения для сканирования обычных устройств Bluetooth. Но есть большая загвоздка: чтобы использовать это новое разрешение, вы должны объявить в своем AndroidManifest.xml что ваше приложение не использует Bluetooth для определения местоположения (например, маяки), и Android говорит, что в этих случаях он отфильтрует некоторые результаты сканирования. Они не говорят явно, но это, вероятно, означает, что они будут отфильтровывать любой пакет Bluetooth, соответствующий известному формату маяка, такому как iBeacon, AltBeacon или Eddystone.
Ответ №2:
Рабочая логика на стороне Android и рабочая логика на стороне ios различны. На стороне Android нам нужно получить разрешение на каждое действие, связанное с пользователем. Это входит в правила Google. Для местоположения разработаны разные библиотеки, но вам нужно добавить разрешения таким же образом. Например, другой пакет, который вы можете использовать для определения местоположения: https://github.com/mrmans0n/smart-location-lib или все : https://android-arsenal.com/tag/55