是否可以在不知道其UUID的情况下检测iBeacons? 有没有办法使用Core Bluetooth或其他方法?
答案 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)
}
}
}