繁体   English   中英

iBeacon:定义UUID

[英]iBeacon: defining UUID

在面向开发人员的官方iBeacon指南中Apple声明:

应用程序开发人员应定义特定于其应用程序和部署用例的UUID。

题:

  • A部分:如何确定UUID以确保不会与其他UUID冲突? 有官方的方法可以得到吗?
  • B部分:假设A是可能的,我如何确保UUID在iOS和Android设备上是唯一的?

看上面的报价,似乎取决于开发人员。 但是,这似乎是一种非可靠的解决方案。


如果问题1的B部分不可行,那么我担心会出现以下用例

两家公司为两个不同的应用程序定义了相同的UUID,并且用户都安装了它们。 用户进入其中一家公司的iBeacon之一附近(两个iBeacon都没有定义次要和主要价值,或者都具有相同的次要和次要价值)。

问题2:

  • iOS和Android如何应对? 这有可能吗?

这是一个128位的UUID。 编写一个五行的MacOS X程序,该程序创建并打印一个UUID并使用它。

客户向您抱怨与另一台设备具有相同的UUID的可能性不为零。 但是,在他或她设法抱怨之前五秒钟,一颗流星撞击他,另一颗撞击你,而你们俩都死了的可能性更大。

这就是UUID的工作方式。

UUID的长度为128位,可以保证在空间和时间上的唯一性。

查看通用唯一标识符(UUID)

iOS uuid代码(适用于Android的Google):

// Create a `NSUUID
NSUUID  *uuid = [NSUUID new];

// As a string:
NSString *uuidString = [uuid UUIDString];
NSLog(@"uuidString: %@", uuidString);

// As a bytes:
uuid_t uuidBytes;
[uuid getUUIDBytes:uuidBytes];

// as `NSData`:
NSData *uuidData = [NSData dataWithBytes:uuidBytes length:sizeof(uuid_t)];
NSLog(@"uuidData: %@", uuidData);

输出:

uuidString: 8F16F262-3E60-49F4-9D1B-FC4F4975B219
uuidBytes: 8F16F2623E6049F49D1BFC4F4975B219
uuidData: <8f16f262 3e6049f4 9d1bfc4f 4975b219>

获取ProximityUUID的唯一官方方法是使用(安全)随机UUID生成器生成一个。 从统计上讲,如果您使用一个随机的UUID生成器( 如此处所示) ,那么您会意外地选择与另一家公司相同的ProximityUUID是极不可能的。 这是正确的,因为有很多组合,正如@ gnasher729在回答中所说。 意外重叠的可能性非常低,以至于根本不值得担心。

就是说,没有什么可以阻止其他人故意使用您定义的相同ProximityUUID。 由于iBeacon传输以无加密的明文形式发送,因此任何在Android,Mac或Windows设备上使用Bluetooth LE扫描仪的人都可以通过无线方式从信标中读取ProximityUUID。

没有办法阻止这种情况。

Android和iOS应用程序仅在可接受的用例中使用iBeacons来解决此问题的方式。 如果您的用例不可接受,那么您必须寻找iBeacons以外的其他解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM