ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

为什么iOS版只能用金丝雀模式?Nearby Glasses跨平台蓝牙扫描差异全解析

为什么iOS版只能用金丝雀模式?Nearby Glasses跨平台蓝牙扫描差异全解析 为什么iOS版只能用金丝雀模式Nearby Glasses跨平台蓝牙扫描差异全解析【免费下载链接】yj_nearbyglassesattempting to detect smart glasses nearby and warn you项目地址: https://gitcode.com/gh_mirrors/yj/yj_nearbyglassesNearby Glasses 是一款免费的智能眼镜检测 App通过扫描蓝牙低功耗BLE广播中的厂商公司 ID在 Meta、Snap 等智能眼镜靠近时发出警告。很多用户注意到一个差异iOS 版只有金丝雀模式Canary Mode无法使用系统通知而 Android 版两种都行。这其实是 iOS 与 Android 在后台蓝牙扫描能力上的根本差异决定的。本文带你彻底搞懂背后的原因以及两款版本各自怎么用。1. 工作原理Nearby Glasses 靠什么发现智能眼镜智能眼镜的蓝牙 MAC 地址是随机化的服务 UUID 也不稳定无法靠扫描特定信标来抓。Nearby Glasses 采用的是启发式匹配厂商公司 ID每只 BLE 设备的广播帧ADV头部都带有蓝牙 SIG 分配的厂商编号例如0x01AB/0x058EMeta、0x0D53Luxottica、0x03C2Snap。这些编号不可变更、必须携带是当前最可靠的识别依据设备名匹配配对期间眼镜会广播产品名因此也会匹配rayban、ray-ban、HeyCyan等关键词RSSI 信号强度阈值默认-75 dBm大约对应开阔空间 10~15 米、室内 3~10 米。这套检测逻辑在 iOS 和 Android 上是同一套两端的识别名单来自仓库根目录的数据文件 smart_glasses_identifiers.csv。所以只能金丝雀模式与检测精度无关纯粹是运行环境的限制。⚠️ 注意公司 ID 也可能来自同厂商的 VR 头显等其他蓝牙产品误报是可能存在的。App 的 README 特意用大段警告提醒不要因为 App 报警就去纠缠对方这可能构成违法。请冷静判断、谨慎使用。2. 为什么 iOS 版没有后台扫描2.1 iOSCoreBluetooth 只允许前台扫描iOS 的蓝牙核心框架是CoreBluetooth。Nearby Glasses 的 iOS 版通过CBCentralManager.scanForPeripherals扫描周边设备核心代码在 BLEScanner.swift 中。问题在于iOS 对蓝牙的限制是——Central中心角色只能在应用处于前台时持续扫描苹果没有开放类似 Android 前台服务的通用机制来让 App 在后台长期扫描 BLE 广播。因此 iOS 版做了一个干脆利落的设计App 一旦退到后台扫描自动停止。相关逻辑就在 ContentView.swift 里监听scenePhase变化App 离开前台即调用stopScanning(backgrounded: true)日志里会写一条提示Scanning stops automatically when the app leaves the foreground.扫描状态与停止逻辑集中在 ScannerStore.swift。2.2 AndroidForeground Service 实现后台持续扫描Android 提供了**前台服务Foreground Service**机制。Nearby Glasses 的 Android 版用 BluetoothScanService.kt 实现了它服务带常驻通知运行并声明FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE类型防止系统杀进程因此即使 App 锁屏、切到后台蓝牙扫描照样进行检测到智能眼镜后直接推送系统通知你不用一直盯着屏幕。在 Android 设置页中可以看到这个开关Enable Foreground Service — Run scanning as a foreground service to prevent being stopped by the system。官方建议保持开启。3. 金丝雀模式Canary Mode是什么怎么用既然 iOS 上无法在后台弹系统通知作者选择了另一种低干扰、可视化的报警方式——借鉴矿井里金丝雀的意象平时画面上显示一只平静的金丝雀代表周围没有智能眼镜安全检测到智能眼镜金丝雀藏起来CanaryHide面板换成黄色警戒条纹背景 警示图标持续一个冷却时间默认 10 秒后恢复。对比项Android 版iOS 版报警方式系统通知或金丝雀模式可切换仅金丝雀模式后台扫描✅ Foreground Service❌ 退后台自动停止扫描期间使用习惯可锁屏/切后台需保持 App 在前台检测逻辑公司 ID 设备名 RSSI✅ 完全一致✅ 完全一致最低系统Android 8.0minSdk 26iOS 16在 Android 设置里金丝雀模式canary_mode是新安装的默认模式开启后系统通知、日志显示、Debug 等选项会被自动锁定避免功能互相干扰见 SettingsActivity.kt 中的refreshCanaryLocks。金丝雀的绘制与状态切换在 Android 端由 MainActivity.kt 的renderCanaryCanvas负责iOS 端对应 CanaryPanel.swift。4. 两个平台的日常使用建议Android 用户打开 App点Start Scanning授予蓝牙/附近设备权限Android 13 以下可能还要位置权限App 本身不使用位置信息建议保持Enable Foreground Service开启这样锁屏后依然持续监测推荐默认的通知模式或金丝雀模式皆可冷却时间默认 10 秒一般不用改。iOS 用户确认 iOS 16 以上从 App Store 安装名字带 original用来和仿冒应用区分点Start Scanning并开始扫描保持 App 在前台盯住金丝雀它一躲起来并出现黄色警戒条纹就说明附近可能出现了智能眼镜信号想记录证据日志仅保存在本地可随时导出为 txt 分享数据只含 BLE 厂商 ID 码隐私安全。5. 小结差异不是 Bug是平台能力边界一句话总结检测能力iOS 与 Android 完全相同都是扫描 BLE 广播中的厂商公司 ID 设备名 RSSI 过滤差异根源Android 有 Foreground Service 可后台常驻扫描并弹通知iOS 的 CoreBluetooth 不允许中心角色后台长扫App 离开前台就自动停止金丝雀模式是 iOS 的唯一报警方式也是 Android 上的可选模式——用金丝雀是否藏起来代替推送通知前台使用时同样醒目。如果你熟悉 Swift 和 iOS 内网 API如 Multipeer/私有方案的可行性项目作者也欢迎在 iOS/ 目录下提交改进的开源贡献让 iOS 版早日拥有更安静的监测方式。【免费下载链接】yj_nearbyglassesattempting to detect smart glasses nearby and warn you项目地址: https://gitcode.com/gh_mirrors/yj/yj_nearbyglasses创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表