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

时间:2018-01-30 07:09:36

标签: ios iphone ibeacon core-bluetooth

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

2 个答案:

答案 0 :(得分:2)

您必须至少知道您要查找的UUID才能创建CLBeaconRegion。在iOS上无法扫描所有信标"。

iBeacons在核心蓝牙发现中特别模糊不清。

答案 1 :(得分:0)

虽然你没有在前面指定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)
        }
    }
}