iBeacon:定义UUID

时间:2015-11-24 15:46:11

标签: ios ibeacon ibeacon-android

在开发人员 Apple 的官方iBeacon guide中声明

  

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

问题:

  • A部分:如何定义UUID,我相信它不会与其他任何人发生冲突?是否有正式的方法来获得一个?
  • B部分:假设A是可能的,我如何确保UUID在iOS和Android设备上是唯一的?

看看上面的引用,这似乎取决于开发人员。然而,感觉就像一个非强大的解决方案。

如果问题1的B部分无法实现,那么我担心会发生以下用例

  

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

问题2:

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

3 个答案:

答案 0 :(得分:4)

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

客户会向您抱怨与其他设备具有相同的UUID的可能性非零。然而,一个流星袭击他的可能性更大,而另一个流星袭击你,你们两个都死了,在他或她设法抱怨之前五秒钟。

那是UUID的工作方式。

答案 1 :(得分:1)

  

UUID长128位,可以保证      空间和时间的独特性。

请参阅A Universally Unique IDentifier (UUID)

iOS uuid代码(Google for Android):

// 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>

答案 2 :(得分:0)

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

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

没有办法阻止这一点。

Android和iOS应用程序通过仅使用iBeacons处理可接受的用例来解决这个问题。如果您的用例不可接受,那么您必须寻找iBeacons提供的其他解决方案。