如何在不知道 UUID、任何可能获得核心蓝牙或其他方式的情况下检测 iBeacons

Posted

技术标签:

【中文标题】如何在不知道 UUID、任何可能获得核心蓝牙或其他方式的情况下检测 iBeacons【英文标题】:How to detect iBeacons without know UUID,Any Possible to get core bluetooth or Some other way 【发布时间】:2018-01-30 07:09:36 【问题描述】:

是否可以在不知道其 UUID 的情况下检测 iBeacons? 有什么方法可以使用 Core Bluetooth 或其他方法吗?

【问题讨论】:

这个问题似乎太窄了。 【参考方案1】:

您必须至少知道要查找的 UUID 才能创建 CLBeaconRegionios 上无法扫描“所有信标”。

iBeacons 被 Core Bluetooth 发现特别遮挡。

【讨论】:

【参考方案2】:

虽然如果不预先指定 ProximityUUID 就无法在 iOS 上检测信标,但您可以设置范围以查找大量 ProximityUUID——我已经成功地同时针对其中的 100 个进行了范围(尽管 1000 次使我的应用程序崩溃) .)

通过使用在线信标数据库,您可以找到已知与您关系密切的 UUID 列表。这不会确定检测到每个信标,但它可以让您检测周围的许多信标,而无需将 UUID 构建到您的应用中。

这是一个使用NingoSDK 获取距离您的位置最近的 100 个 ProximityUUID 并注册它们以进行测距的示例。

let locationManager = CLLocationManager()
// Get up to 100 beacon ProximityUUIDs within 1km from our current location, so we can use these for beacon ranging
let queryClient = QueryBeaconClient(authToken: Settings().getSetting(key: Settings.ningoReadonlyApiTokenKey)!)
queryClient.queryFirstIdentifiers(latitude: latitude, longitude: longitude, radiusMeters: 1000, limit: 100)  (proximityUUIDStrings, errorCode, errorDetail) in
    if let proximityUUIDStrings = proximityUUIDStrings 
        NSLog("There are now \(proximityUUIDStrings.count) nearby beacon uuids")
        if proximityUUIDStrings.count > 0 
            for region in locationManager.rangedRegions 
                locationManager.stopRangingBeacons(in: region as! CLBeaconRegion)
            
            for uuidString in proximityUUIDStrings 
                let region = CLBeaconRegion(proximityUUID: UUID(uuidString: uuidString)!, identifier: uuidString)
                locationManager.startRangingBeacons(in: region)
            
            BeaconTracker.shared.updateTransientUuids(uuids: proximityUUIDStrings)
        
    

【讨论】:

以上是关于如何在不知道 UUID、任何可能获得核心蓝牙或其他方式的情况下检测 iBeacons的主要内容,如果未能解决你的问题,请参考以下文章

使用核心蓝牙 ios 扫描外围设备时如何更改特征顺序

是否可以在不唤醒手机的情况下在后台使用 iphone 注册和收集匹配的 UUID?

如何在 iOS 中使用 Core Bluetooth 获取蓝牙设备的唯一 ID

如何获得蓝牙状态STATE_CONNECTING

车载免提设备的蓝牙 UUID

如何获取设备数据?