在我的应用程序中未检测到新的 ibeacons
New ibeacons not detected in my app
我正在开发信标检测应用程序,目前非常适用于 kontakt 品牌信标。
客户给我发了一些我从未见过的新信标,我用google搜索过,但我找不到它们是什么牌子的。
The following information related to this beacon they gave me:
uuid: fda50693-a4e2-4fb1-afcf-c6eb07647825
pass: 000000
name: ion_beacon00021
major: 16789
minor: 24532
我已经转换了我的代码来监控两个 uuid,但没有让它工作
for (index, beaconID) in beaconsIds.enumerated() {
let beaconUUID = UUID(uuidString: beaconID)!
let identifier = "BLERegionBeacon \(index)"
let beaconRegion = CLBeaconRegion(proximityUUID: beaconUUID, identifier: identifier)
self.locationManager?.startMonitoring(for: beaconRegion)
self.locationManager?.startRangingBeacons(in: beaconRegion)
}
func configureLocationManager() {
self.locationManager = CLLocationManager()
self.locationManager!.delegate = self
self.locationManager!.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager!.distanceFilter = kCLDistanceFilterNone;
self.locationManager!.activityType = CLActivityType.automotiveNavigation;
for region in self.locationManager!.monitoredRegions {
self.locationManager?.stopMonitoring(for: region)
}
if CLLocationManager.authorizationStatus() != CLAuthorizationStatus.authorizedAlways {
self.locationManager?.requestAlwaysAuthorization()
}
self.locationManager!.startUpdatingLocation()
}
当找不到如何使这个新的 ibeacon 工作时,我求助于第三方应用程序(如 MyBeacon
、Detector
、Beacon Demonstrator
、Locate
)来获得验证我拥有的关于此信标的信息是否正确,但在任何应用程序中我都无法使其检测到此 ibeacon。
我买了一块新电池,以确保它不是那么简单,但也不是。 :'(
我想使用任何检测蓝牙设备的应用程序,我发现了 BLE Scanner
。有了这个应用程序,我很幸运,可以意识到至少我拥有的信标名称是正确的,但没有找到与 major or minor or pass
相关的任何内容。我还认为在那里看到的长 ID 可能是正确的,而我的 ID 不是...但我放弃了它,因为当我连接品牌 kontakt 时也给了我一个不同的 uuid。
ISCONNECTABLE
在是和否之间跳转。
当我使用 BLE Scanner
检测信标时 Kontakt
向我显示名为 SERVICEDATA
和 ISCONNECTABLE
的附加信息仍然是。
- 检测这些信标还需要做些什么吗?
- 有谁知道会发生什么吗?
非常感谢
编辑
在 davidgyoung 的帮助下,我发现 Locate 应用程序可以正常工作,但仅适用于 android 的版本。事实上 returns 一开始我从那个信标那里得到的信息是正确的。
我发现这些信标可以使用名为 BeaconFlyer 的应用程序进行配置,在那里我意识到了发送给我的密码的原因。我能够更改 uuid
尽管奇怪的是我只输入了数字而没有输入字母。我按照 8-4-4-4-12 的相同模式将其更改为 32 个零。我在 IOS 中仍然没有得到任何结果,但在 android 上工作,即使在更改 uuid 之后也是如此。
可能某些品牌需要经过认证才能被 iOS 设备检测到,而 android 没有这些限制。
编辑 2
考虑到所有这些细节,问题似乎出在 IOS 而不是 android,所以我想到如果我创建一个简单的 android 项目只是为了测试信标的功能,我应该能够检测到它。
测试是通过注册这个 UUID f7826da6-4fa2-4e98-8024-bc5b71e0893e
完成的,这个 UUID 一直对我有用,我用它毫无问题地检测到信标标记 kontakt
.
令我惊讶的是,即使没有注册我为这个品牌拥有的 UUID,我也能毫无问题地检测到它。考虑到只注册了 1 个标记为 kontakt
的 UUID,这很奇怪
如果您正在检测另一个具有相同代码的信标,那么最简单的解释是您得到的 ProxmityUUID 是错误的。
您将无法从 iOS 上的 BLE 扫描器确定正确的 ProximityUUID,因为 iOS 阻止访问 iBeacon 广告,除非您预先知道 ProximityUUID。如果你能拿到 Android 设备,你就可以使用定位应用程序来查看任何信标,而不管它的标识符是什么。 https://play.google.com/store/apps/details?id=com.radiusnetworks.locate&hl=en 您可以使用它来找出它实际发送的内容。 MacOS 也有类似的应用程序,如果您可以访问 Mac。
beacon 品牌是 Iotton,它看起来像我们销售的那个:
https://www.beaconzone.co.uk/ibeacon/ton9108
Kontakt 应用程序不太可能显示 Iotton 信标,因为本地名称不正确。这更有可能是您的 Kontakt 信标 - 现在将其关闭。使用此信标或任何信标,获取 UUID 并查看信标是否正常工作的最佳应用是 Nordic nRF Connect。
您确定已在 CLLocationManager
上设置委托吗?代码没有显示它,所以除非它在上面或下面的某个地方,否则你需要添加:
self.locationManager?.delegate = self
然后确保您的 class 实现了 CLLocationManagerDelegate
didRange(beacons: region:)
方法来获取回调。
如果您认为自己已经进行了此设置,则显示该代码可能会揭示缺少的其他内容,从而无法正常工作。
关于可能发生的事情的另一种理论:
实现 iBeacon 的信标广告包必须具有 Apple 的制造商代码 004c 才能被 iOS 检测到。 Android 没有这样的限制。如果此信标发送的是不同的制造商代码,则可以解释为什么只有 Android 可以检测到它。
你怎么知道这是不是真的?您需要以某种方式查看广告的原始字节。
很明显,您的客户向您发送了 "beacons" 而不一定是“i信标”。正如davidyoung所指出的,构成iBeacon的是specified (quite strictly) by Apple。如果您愿意,可以从那里下载规格并查看。
我使用了多个 BLE 扫描器来检查我使用过的各种品牌 iBeacon 的 uuid、主要和次要编号,其中包括提到的 BLE 扫描器。我认为该规范不会阻止以某种方式将附加服务放入 iBeacon,这会导致不同品牌的 iBeacon 可能在不同的扫描仪中显示略有不同的信息。
但是,您在屏幕截图中显示的内容以及 isconnectable
字段切换值的事实让我认为这些信标无法正常工作。
没有 方法可以使它们在 iOS 上以这种方式工作。您可以编写自己的蓝牙协议代码来处理它们,但那样就不会依赖 Apple 的 iBeacon 机制。这将意味着即使在应用程序暂停时区域监控等好东西也不会起作用。这也可能会消耗更多电池电量,并且通常需要更多工作。
据说我不是蓝牙专家,但学到了很多东西:UUID 遍布规格。您(和 Apple)引用的 UUID 是 iBeacon 应该发送的 数据包 的一部分,但我也看到了 BLE 一般服务 由(非 Apple)参考文档中的 UUID 标识。当您扫描这样的信标并在多个地方看到 UUID(或至少看起来像 UUID 的字符串)时,这可能会让人感到困惑。因此,即使您的信标符合规范(或者可以以某种方式配置为这样做),我的猜测是有人搞砸了。例如,他们可能编辑了(甚至可能使用硬连线连接和工具)错误的 UUID,而不是设置您需要使用的 UUID,而是不小心覆盖了指定设备的部分一个 iBeacon(想到数据包的第 5 和第 6 个字节),让你无法使用它们。
作为建议,我建议如下:如果您的客户对实际的 iBeacon 功能感兴趣,请告诉他们应该购买正确的信标。 kontakt 的实际上非常好。我测试过廉价的仿冒瓷器,并建议不要使用这些仿制品,因为它们很快就会变得不可靠。一开始节省几美元可能很诱人,但如果您需要不断地更换长期 运行 中的信标,最终会变得更加昂贵。
我正在开发信标检测应用程序,目前非常适用于 kontakt 品牌信标。
客户给我发了一些我从未见过的新信标,我用google搜索过,但我找不到它们是什么牌子的。
The following information related to this beacon they gave me:
uuid: fda50693-a4e2-4fb1-afcf-c6eb07647825
pass: 000000
name: ion_beacon00021
major: 16789
minor: 24532
我已经转换了我的代码来监控两个 uuid,但没有让它工作
for (index, beaconID) in beaconsIds.enumerated() {
let beaconUUID = UUID(uuidString: beaconID)!
let identifier = "BLERegionBeacon \(index)"
let beaconRegion = CLBeaconRegion(proximityUUID: beaconUUID, identifier: identifier)
self.locationManager?.startMonitoring(for: beaconRegion)
self.locationManager?.startRangingBeacons(in: beaconRegion)
}
func configureLocationManager() {
self.locationManager = CLLocationManager()
self.locationManager!.delegate = self
self.locationManager!.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager!.distanceFilter = kCLDistanceFilterNone;
self.locationManager!.activityType = CLActivityType.automotiveNavigation;
for region in self.locationManager!.monitoredRegions {
self.locationManager?.stopMonitoring(for: region)
}
if CLLocationManager.authorizationStatus() != CLAuthorizationStatus.authorizedAlways {
self.locationManager?.requestAlwaysAuthorization()
}
self.locationManager!.startUpdatingLocation()
}
当找不到如何使这个新的 ibeacon 工作时,我求助于第三方应用程序(如 MyBeacon
、Detector
、Beacon Demonstrator
、Locate
)来获得验证我拥有的关于此信标的信息是否正确,但在任何应用程序中我都无法使其检测到此 ibeacon。
我买了一块新电池,以确保它不是那么简单,但也不是。 :'(
我想使用任何检测蓝牙设备的应用程序,我发现了 BLE Scanner
。有了这个应用程序,我很幸运,可以意识到至少我拥有的信标名称是正确的,但没有找到与 major or minor or pass
相关的任何内容。我还认为在那里看到的长 ID 可能是正确的,而我的 ID 不是...但我放弃了它,因为当我连接品牌 kontakt 时也给了我一个不同的 uuid。
ISCONNECTABLE
在是和否之间跳转。
当我使用 BLE Scanner
检测信标时 Kontakt
向我显示名为 SERVICEDATA
和 ISCONNECTABLE
的附加信息仍然是。
- 检测这些信标还需要做些什么吗?
- 有谁知道会发生什么吗?
非常感谢
编辑
在 davidgyoung 的帮助下,我发现 Locate 应用程序可以正常工作,但仅适用于 android 的版本。事实上 returns 一开始我从那个信标那里得到的信息是正确的。
我发现这些信标可以使用名为 BeaconFlyer 的应用程序进行配置,在那里我意识到了发送给我的密码的原因。我能够更改 uuid
尽管奇怪的是我只输入了数字而没有输入字母。我按照 8-4-4-4-12 的相同模式将其更改为 32 个零。我在 IOS 中仍然没有得到任何结果,但在 android 上工作,即使在更改 uuid 之后也是如此。
可能某些品牌需要经过认证才能被 iOS 设备检测到,而 android 没有这些限制。
编辑 2
考虑到所有这些细节,问题似乎出在 IOS 而不是 android,所以我想到如果我创建一个简单的 android 项目只是为了测试信标的功能,我应该能够检测到它。
测试是通过注册这个 UUID f7826da6-4fa2-4e98-8024-bc5b71e0893e
完成的,这个 UUID 一直对我有用,我用它毫无问题地检测到信标标记 kontakt
.
令我惊讶的是,即使没有注册我为这个品牌拥有的 UUID,我也能毫无问题地检测到它。考虑到只注册了 1 个标记为 kontakt
如果您正在检测另一个具有相同代码的信标,那么最简单的解释是您得到的 ProxmityUUID 是错误的。
您将无法从 iOS 上的 BLE 扫描器确定正确的 ProximityUUID,因为 iOS 阻止访问 iBeacon 广告,除非您预先知道 ProximityUUID。如果你能拿到 Android 设备,你就可以使用定位应用程序来查看任何信标,而不管它的标识符是什么。 https://play.google.com/store/apps/details?id=com.radiusnetworks.locate&hl=en 您可以使用它来找出它实际发送的内容。 MacOS 也有类似的应用程序,如果您可以访问 Mac。
beacon 品牌是 Iotton,它看起来像我们销售的那个: https://www.beaconzone.co.uk/ibeacon/ton9108
Kontakt 应用程序不太可能显示 Iotton 信标,因为本地名称不正确。这更有可能是您的 Kontakt 信标 - 现在将其关闭。使用此信标或任何信标,获取 UUID 并查看信标是否正常工作的最佳应用是 Nordic nRF Connect。
您确定已在 CLLocationManager
上设置委托吗?代码没有显示它,所以除非它在上面或下面的某个地方,否则你需要添加:
self.locationManager?.delegate = self
然后确保您的 class 实现了 CLLocationManagerDelegate
didRange(beacons: region:)
方法来获取回调。
如果您认为自己已经进行了此设置,则显示该代码可能会揭示缺少的其他内容,从而无法正常工作。
关于可能发生的事情的另一种理论:
实现 iBeacon 的信标广告包必须具有 Apple 的制造商代码 004c 才能被 iOS 检测到。 Android 没有这样的限制。如果此信标发送的是不同的制造商代码,则可以解释为什么只有 Android 可以检测到它。
你怎么知道这是不是真的?您需要以某种方式查看广告的原始字节。
很明显,您的客户向您发送了 "beacons" 而不一定是“i信标”。正如davidyoung所指出的,构成iBeacon的是specified (quite strictly) by Apple。如果您愿意,可以从那里下载规格并查看。
我使用了多个 BLE 扫描器来检查我使用过的各种品牌 iBeacon 的 uuid、主要和次要编号,其中包括提到的 BLE 扫描器。我认为该规范不会阻止以某种方式将附加服务放入 iBeacon,这会导致不同品牌的 iBeacon 可能在不同的扫描仪中显示略有不同的信息。
但是,您在屏幕截图中显示的内容以及 isconnectable
字段切换值的事实让我认为这些信标无法正常工作。
没有 方法可以使它们在 iOS 上以这种方式工作。您可以编写自己的蓝牙协议代码来处理它们,但那样就不会依赖 Apple 的 iBeacon 机制。这将意味着即使在应用程序暂停时区域监控等好东西也不会起作用。这也可能会消耗更多电池电量,并且通常需要更多工作。
据说我不是蓝牙专家,但学到了很多东西:UUID 遍布规格。您(和 Apple)引用的 UUID 是 iBeacon 应该发送的 数据包 的一部分,但我也看到了 BLE 一般服务 由(非 Apple)参考文档中的 UUID 标识。当您扫描这样的信标并在多个地方看到 UUID(或至少看起来像 UUID 的字符串)时,这可能会让人感到困惑。因此,即使您的信标符合规范(或者可以以某种方式配置为这样做),我的猜测是有人搞砸了。例如,他们可能编辑了(甚至可能使用硬连线连接和工具)错误的 UUID,而不是设置您需要使用的 UUID,而是不小心覆盖了指定设备的部分一个 iBeacon(想到数据包的第 5 和第 6 个字节),让你无法使用它们。
作为建议,我建议如下:如果您的客户对实际的 iBeacon 功能感兴趣,请告诉他们应该购买正确的信标。 kontakt 的实际上非常好。我测试过廉价的仿冒瓷器,并建议不要使用这些仿制品,因为它们很快就会变得不可靠。一开始节省几美元可能很诱人,但如果您需要不断地更换长期 运行 中的信标,最终会变得更加昂贵。