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



是否可以在不知道 UUID 的情况下检测 iBeacon?有没有办法使用核心蓝牙或其他方法?

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

iBeacons特别被核心蓝牙发现所掩盖。

虽然如果不预先指定邻近UUID,则无法在iOS上检测信标,但您可以设置范围以查找大量邻近UUID-我已经同时成功测距了其中的100个(尽管1000使我的应用程序崩溃。

通过使用在线信标数据库, 您可以找到已知与您附近的 UUID 列表. 这不会肯定地检测到每个信标, 但它将允许您检测您周围的许多信标,而无需将 UUID 构建到您的应用程序中.

下面是一个使用 NingoSDK 获取距离您所在位置最近的 100 个邻近 UUID 并注册它们以进行测距的示例。

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)
        }
    }
}

最新更新