2014-09-01 86 views
1

如何创建相同的(唯一的)UUID,以及如何使用它来处理所有IOS设备。在我的代码中,UUID在不同的设备中有所不同。为IOS中的所有设备创建唯一的UUID?

我的代码获取UUID是。

NSString* uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; // IOS 6+ 
NSLog(@"UUId:: %@", uniqueIdentifier); 

感谢 Shabeer

+2

我认为“独特”这个词说的都是...... – Atomix 2014-09-01 17:34:38

+0

对于所有iOS设备,独特的UUID意味着什么?请提供更多信息。 – 2014-09-02 05:27:26

+0

基于UUID,我需要在两个设备应用程序之间进行一些事务。 – sabir 2014-09-02 05:28:56

回答

4

此方法将为每个设备创建一个唯一的字符串。 此处SGKeyChain是一个钥匙串包装。你可以自己写这个。

+ (NSString *) uniqueDeviceIdentifier 
{ 

NSString *deviceUUID = [[SGKeyChain defaultKeyChain] stringForKey:@"uniqueId"]; 

    if (!deviceUUID) { 

     if (!deviceUUID.length) { 

    NSString *deviceUUID = @""; 

    CFUUIDRef uuidRef = CFUUIDCreate(NULL); 

    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); 

    CFRelease(uuidRef); 

    deviceUUID = [NSString stringWithFormat:@"%@",[NSString stringWithString:(__bridge_transfer NSString *)uuidStringRef]]; 

[[SGKeyChain defaultKeyChain] setObject:deviceUUID forKey:@"uniqueId" accessibleAttribute:kSecAttrAccessibleAlways]; 

    } 
}  
    return deviceUUID; 
} 
+0

它更改为每个设备。 – sabir 2014-09-02 05:25:30

+0

此密钥需要保存在钥匙串中以永久保存,否则每次都会有不同的ID。 – 2014-09-02 07:55:09

+0

你是对的。与Atif。我已经做了必要的修改...... – 2014-09-02 09:52:56

1

至于得到一个唯一的ID,我很喜欢下面的代码:

[[NSProcessInfo processInfo] globallyUniqueString] 

这里使用了日期和设备ID做出了巨大的UNIQUEID每次。至于通过设备分享它,这是不可能的。每个设备都是独一无二的,所以你不能指望你的代码找出哪些设备属于谁。如果你想把它做到这一点,那么你可以去了解它的三种方式之一:

  1. 你可以有,你用(可能炒)名称作为UNIQUEID本地登录屏幕。这将使用硬编码扰码器,以便uniqueID对于每个名称是相同的,但对于每个用户不同。

  2. 您可以使用像Parse这样的后端服务器为每个人保存uniqueId。然后,您可以在设备上登录,UUID将在设备之间共享。最后,如果你只是想要一个随机的字符串(如463GH529-GJRH-FRH4-FH53-58FH3),你可以硬编码一个可以跨越每个设备使用的字符串,但是这会破坏UUID的目的,因为每个人将有同一个 - 不是很独特!

希望其中的一点对你有用。

+0

感谢您的重播。基于UUID我如何找到壁橱蓝牙设备.. – sabir 2014-09-02 07:09:02

+0

@sabir我没有多少工作与蓝牙,但我已经做了很多与iBeacons,所以希望这个概念是相同的。您检查每个蓝牙设备并将它们存储在一个阵列中。然后你逐一检查阵列,检查信号最强的那个(或者更好,可能有一个距离值,你可以用它来看哪一个更接近,但我不能保证它)。一旦拥有最强信号的设备,就可以简单地获取UUID并按照您喜欢的方式进行操作! – 2014-09-02 08:51:16