【问题标题】:How to find iBeacon without beacon identifier?如何找到没有信标标识符的 iBeacon?
【发布时间】:2017-03-15 23:06:40
【问题描述】:

我正在使用以下代码行创建CLBeaconRegion,然后以下列方式调用location manager

 let beaconRegion:CLBeaconRegion = CLBeaconRegion(proximityUUID: beaconUUID as UUID,
                                                                 identifier: beaconIdentifier)

///  save a beacon region for stopping after.
                (beaconInfo as! BeaconInfo).beaconRegion = beaconRegion

                ///  start monitoring the specified region.
                self.locationManager.startMonitoring(for: beaconRegion)

                ///  start calculating ranges for beacons in the specified region.
                self.locationManager.startRangingBeacons(in: beaconRegion)

位置管理器委托中的代码是:

func locationManager(_ manager: CLLocationManager,
                         didRangeBeacons beacons: [CLBeacon],
                         in region: CLBeaconRegion) {

        ///  it may be assumed no beacons that match the specified region are nearby.
        if beacons.count == 0 {
            print ("beacon.count = 0")
            return
        }
else
{
     \\executed rest of the code
}

其中 beaconUUID 是我的 iBeacon 的 UUID,beaconIdentifier 是标识符字符串。问题是因为我的应用程序将检测到通用 iBeacons,所以我可能不知道他们的 beaconIdentifier 字符串(这不是 UUID,只是一个标识符)。有什么方法可以将它作为通用字符串或 nil 传递(以消除依赖性)?

编辑:添加 CLLocationManager 代码

【问题讨论】:

    标签: ios ibeacon uuid


    【解决方案1】:

    不,您需要知道要查找的信标的 UUID。 iOS 无法扫描“所有信标”。

    标识符字符串只是您在应用程序中分配给CLBeaconRegion 的字符串。它与实际信标中配置的任何值无关。

    所以

    let beaconRegion:CLBeaconRegion = CLBeaconRegion(proximityUUID: beaconUUID as UUID, identifier: "someIdentifier")
    

    let beaconRegion:CLBeaconRegion = CLBeaconRegion(proximityUUID: beaconUUID as UUID, identifier: "someOtherIdentifier")
    

    都将扫描同一组 iBeacon;具有beaconUUID指定的UUID的iBeacon

    您可以在以后使用该标识符来识别信标区域,例如在进入该区域时或您想停止监视某个区域时。请记住,信标区域在您的应用执行期间保持活动状态,因此您不能依赖对象引用。

    【讨论】:

    • 我说的是信标标识符,而不是信标 UUID。我将编辑我的问题以使其更清楚。
    • 信标标识符只是您在创建 CLBeaconRegion 时分配的字符串;它与信标本身无关。
    • 不幸的是,@Paulw11 是正确的。无论 ProximityUUID 是什么,iOS 上都没有公共 API 来查找所有信标。
    • 保罗给了你答案。唯一定义信标的是 UUID、主要和次要 ID。标识符是你的名字。当操作系统检测到与您的 UUID、UUID + 主要 ID 或 UUID + 主要 ID + 次要 ID 匹配的信标时,它会将其返回给您。将其视为信标名称,例如“弗雷德”。你说“位置经理,寻找带有 UUID xyz 的信标。我们称它为 Fred。”然后位置管理器说“我检测到了 Fred!”信标不知道也不关心你和 iOS 决定将它命名为 Fred。
    • @DuncanC 在我的情况下,如果我给出“someOtherIdentifier”而不是“someIdentifier”,位置管理器的委托方法 - didRangeBeacons 不会检测到 CLBeaconRegion,这是一个问题。
    【解决方案2】:

    所以问题是每个信标都需要有唯一的标识符字符串。这就是为什么我的应用程序没有检测到的原因,因为我有一个所有信标的通用字符串。

    【讨论】:

      猜你喜欢
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      相关资源
      最近更新 更多