为什么 android Ibeacon 需要蓝牙权限?

Why android Ibeacon need bluetooth permission?

我正在使用 android (org.altbeacon:android-beacon-library:2.19.3) 库提供交互的 API与信标

它需要位置和蓝牙权限。

权限要求:

https://altbeacon.github.io/android-beacon-library/requesting_permission.html

IOS的ibeacon不需要蓝牙权限,为什么androidibeacon需要蓝牙权限?

是否有 android Ibeacon

的替代库

Android端的工作逻辑和ios端的工作逻辑不同。在 Android 端,我们需要获得与用户相关的每个操作的权限。这是 google 政策之一。有针对该位置开发的不同库,但您需要以相同的方式添加权限。例如,另一个可用于定位的包:https://github.com/mrmans0n/smart-location-lib 或全部:https://android-arsenal.com/tag/55

是的,Android 需要蓝牙权限才能扫描蓝牙信标,但 iOS 不需要同样的权限来检测 iBeacon。 无论您使用哪个库,Android 都需要蓝牙扫描信标的权限。 这是一个 OS 平台限制。

Android 需要此权限而 iOS 不需要的原因是基于这两个平台的发展历史。几点:

  • 从 iOS7 开始,CoreLocation API 添加了蓝牙信标支持,它使用了 Location 权限,而不是GPS、WiFi、蜂窝无线电和蓝牙等各种传感器的个人权限,所有这些都可用于定位目的。 Apple 显然做出了一项设计决定,将所有传感器置于单一权限之下。

  • 开源 Android 根本没有用于检测信标的内置 API——它只有蓝牙 API。 (Beacon API 由 Google Play Services 插件或开源 Android Beacon Library 提供。所以 当在 Android 4.3 中添加蓝牙 LE 扫描时,它被视为必须在蓝牙许可之后的东西。 是有道理的。这些 API 碰巧与 Apple 的 iBeacon 发明一起使用,但 API 并非为定位而设计。

  • Android在Android6中添加运行时权限时,为了保护用户隐私,将Location权限设为运行时权限,并进一步将Bluetooth为了保护隐私,除了蓝牙权限外,还要扫描同一位置权限。

  • 在 iOS 上,低功耗蓝牙 API 确实需要蓝牙许可,并且 Apple 将来自 iBeacon 的蓝牙功能 沙盒化。这样检测iBeacon就必须获得Location权限,不需要蓝牙权限。另一方面,非 iBeacon 检测可以通过常规蓝牙许可进行,但 Apple 会过滤掉任何与 iBeacon 匹配的数据包。 Android 没有等效的沙盒,这是需要两种权限的原因之一。

需要注意的重要事项:Apple 不需要蓝牙许可来检测信标仅适用于 iBeacon 格式。如果您尝试检测 AltBeacon 或 Eddystone,您实际上确实需要蓝牙权限(而不是这些格式的位置权限)。这是一个“漏洞”,在某些情况下可用于避免 iOS 设备上的额外权限。

最后一点:从 Android 12 开始,有一个新的 BLUETOOTH_SCAN 权限,您可以使用 代替 位置权限。这个想法是让 Android 不再需要位置许可来扫描常规蓝牙设备。但是有一个很大的问题:要使用这个新权限,您必须在 AndroidManifest.xml 中声明您的应用不使用蓝牙进行定位(例如信标),并且 Android 表示它将过滤掉一些扫描在这些情况下的结果。他们没有明确说明,但这可能意味着他们将过滤掉任何与 iBeacon、AltBeacon 或 Eddystone 等已知信标格式匹配的蓝牙数据包。