我在某处读到,苹果上的信标,工作方式与地理围栏类似,每部手机也有20个限制。
是这样的吗?
我们的使用案例:我们希望在应用未运行且手机未唤醒时(在口袋中)向用户发送推送通知。我们正在考虑依靠信标而不是地理围栏,以避免每部手机达到20个围栏的限制,并且必须处理重要的位置变更功能和类似的解决方案(目前)。
答案 0 :(得分:1)
信标与地理围栏类似。当您进入或退出信标区域(在蓝牙范围内)时,您将收到通知,并且您还可以查看所有信标以获取其ID。
CLBeaconRegions还有20个地区的限制。看到: https://developer.apple.com/reference/corelocation/cllocationmanager/1423656-startmonitoringforregion 通过监控区域和测距的组合,您甚至可以使用一个区域来完成您的工作。 (在很大程度上取决于您的用例)
如果您想发送基于地理位置的通知,信标可能适合您。
答案 1 :(得分:1)
是的,最多20个区域(信标和地理围栏组合)都有限制。 有几种方法可以监视1000个信标,但这取决于用例。
您可以使用不同的通配符并监控1000个信标,但有一些限制。您必须使用信标配置,如beacon UDID,主要和次要值。
如果您只对进入或退出任何信标感兴趣(并且对特定信标不感兴趣)。实际上,您可以设置所有信标的相同UDID,只监控一个信标区域将解决您的问题。
let region = CLBeaconRegion.init(proximityUUID: UUID.init(uuidString: "YOUR_BEACONS_UDID_32_DIGITS")!, identifier: "beacon_region1")
locationManager.startMonitoring(for: region)
您还可以使用UDID和Major值对信标进行分组。
let r1 = CLBeaconRegion.init(proximityUUID: UUID.init(uuidString: "YOUR_BEACONS_UDID_32_DIGITS")!, major: 1000, identifier: "region_1000")
因此,您可以在后台监控20组信标,每组可以拥有任意数量的信标。
答案 2 :(得分:1)
虽然CoreLocation API将信标区域监控限制在20个区域(与地理围栏区域相结合),但可以查找近860亿个不同的信标位置,以便向用户发送通知。
是的,没错。 86亿 - 准确地说是85,899,345,920。认为这够了吗?
简单的技术是将信标监控API与信标测距API相结合。使用监控功能,您可以在检测到任何一个信标时在后台唤醒您的应用。然后使用测距API,您可以读取检测到的确切信标标识符,并向用户发送推送通知。这一切都适用于手机仍然放在用户的口袋里。
由于每个信标标识符包括主要(0-63355)和次要(0-63335),因此您可以使用不同的ProximityUUID监视最多20个信标区域,并获得20 x 65536 x 65536 = 85,899,345,920种不同的组合。
let region = CLBeaconRegion.init(proximityUUID: UUID.init(uuidString: "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6")!, identifier: "beacon_region1")
locationManager.startMonitoring(for: region)
locationManager.startRangingBeacons(in: region)
// TODO: repeat the above for up to 19 more regions
...
public func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
for beacon in beacons {
var uuid = beacon.proximityUUID
var major = beacon.major
var minor = beacon.minor
// TODO: Send a unique local notification to the user for this
// uuid/major/minor combination identifying a particular place
}
}
这种方法有一些限制。如果您的信标被放置在彼此重叠的无线电范围内(约50米),那么用户住在一个信标一段时间然后走到隔壁的那个将不会得到背景唤醒,除非信标在两个不同的区域。您可以玩一些游戏来解决这个限制,但对于许多用例,您甚至不需要打扰。