我希望创建一个跨平台的应用程序,允许我定期宣传设备的Mac地址(虽然我已经意识到由于某种原因我收到3个单个设备。)以便它可以被记录并用于参考简短的手动用户广告,使得每个广告可以由特定用户识别;然而,似乎我已经陷入关于BLE上的UUID的问题
在搜索了一段时间之后,我仍然对BLE服务中的UUID感到有些困惑。最初我决定使用一个自定义的BLE,即使数据只有1个字节长,也会因奇数错误或数据包变大而无法做广告。我意识到UUID必须采用xxxxxxxx-0000-1000-8000-00805F9B34FB
的形式。除此之外的任何内容都会发送完整的UUID,这个UUID在广告时没有连接就太大了。我还发现我可以在上半部分(0000XXXX
)中使用不在保留范围0x000E
- 0x01FF
中的任何UUID前缀。
这是一个正确的假设吗?我可以使用任何不符合标准的UUID,即00000200 - 0000FFFF。我问,因为我在选择该范围内的UUID时似乎遇到了问题,因为我知道在BLE之外创建自定义UUID是一个坏主意,因为它将被强制使用20-23字节中的16个可用。关于此的任何意见?
他们是一种预先定义的方式来发送用户设备的广告,以便它可以被高速缓存并用于识别其他用户广告吗?
修改
项目中需要以无连接的方式将电话与其他设备连接在一起。最初我计划让设备重复宣传它的身份以及可用于唯一识别用户消息的名称和唯一MAC地址。任何没有缓存用户身份的设备都会丢弃来自该用户的传入数据包。 - kdgwill 9分钟前
我实际上认为如果我能够以某种方式连接到5-10台设备会更容易;但是,这个想法不是在添加新设备时打扰用户重复提示。因此,我认为使用广告和洪水会有所帮助,但msg大小会有所不同。是否有可能打扰用户一次连接提示并自动连接每个额外的BLE设备。如果我能以某种方式以1比1的方式连接多个设备而不必每次都提示用户,同时仍然扫描其他可能的连接,这将非常有用,但我不认为BLE允许这样做。 - kdgwill 8秒前编辑
使用identifierForVendor或CBAdvertisementDataServiceUUIDsKey是唯一标识每个用户的好方法;但是,这意味着如果我不使用其中一个已注册的UUID,我可以随便随意选择一个。开销将是4-16 +,但识别每个数据包需要很多字节。
答案 0 :(得分:1)
如果您使用蓝牙联盟注册设备,则只能使用较短的4字节UUID,否则,您必须使用较长的16字节UUID。
您是正确的,您可以选择服务(和特征)的16字节UUID。您应该准随机选择ID,并始终对该特定类型的服务/特征使用相同的UUID。
由于您发送的每个数据包都必须包含目标服务UUID,因此使用较长的UUID会占用有效负载中可用的大量字节。每个数据包可用的字节数减少意味着必须为更大的消息发送更多数据包,从而增加了发送消息所需的时间。如果您不是在发送消息,而只是使用广告数据,那么这并不值得关注,尽管您可以使用较少的字节来获取广告数据。
使用iOS蓝牙框架的代码中无法使用MAC地址。 iOS 8+可以发送一个随机的MAC地址,所以你不应该指望用它来识别设备。
由于您无法使用MAC地址,您可能希望通过BLE连接连接并发送唯一ID(例如identifierForVendor
),或者可能通过{{在广告数据中包含一个小ID 1}}。