为IOS中的所有设备创建唯一UUID?

为IOS中的所有设备创建唯一UUID?,ios,objective-c,ios7,uuid,Ios,Objective C,Ios7,Uuid,如何创建相同(唯一)的UUID以及如何将其用于所有IOS设备。在我的代码中,UUID在不同的设备中是不同的 我得到UUID的代码是 NSString* uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; // IOS 6+ NSLog(@"UUId:: %@", uniqueIdentifier); 谢谢 Shabeer至于获取唯一ID,我非常喜欢以下代码: [[NSProcessI

如何创建相同(唯一)的UUID以及如何将其用于所有IOS设备。在我的代码中,UUID在不同的设备中是不同的

我得到UUID的代码是

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

至于获取唯一ID,我非常喜欢以下代码:

[[NSProcessInfo processInfo] globallyUniqueString]
每次都会使用日期和设备ID生成一个很好的唯一ID。至于通过设备共享,这是不可能的。每个设备都是唯一的,因此您不能期望您的代码找出谁的设备属于谁。如果您确实希望它这样做,那么您可以采用以下三种方法之一:

  • 您可以在本地登录屏幕上使用名称(可能是加扰的名称)作为唯一标识。这将使用硬编码的扰码器,以便每个名称的uniqueID相同,但每个用户的uniqueID不同

  • 您可以使用Parse之类的后端服务器为每个人保存一个唯一的ID。然后,您可以登录到设备上,UUID将在设备之间共享

  • 最后,如果您只是想要一个看起来随机的字符串(如463GH529-GJRH-FRH4-FH53-58FH3),您可以硬编码一个可以在每个设备上使用的字符串,但这会破坏UUID的用途,因为每个人都有相同的字符串-不是很独特


  • 希望其中一点对你有用

    至于获取唯一ID,我非常喜欢以下代码:

    [[NSProcessInfo processInfo] globallyUniqueString]
    
    每次都会使用日期和设备ID生成一个很好的唯一ID。至于通过设备共享,这是不可能的。每个设备都是唯一的,因此您不能期望您的代码找出谁的设备属于谁。如果您确实希望它这样做,那么您可以采用以下三种方法之一:

  • 您可以在本地登录屏幕上使用名称(可能是加扰的名称)作为唯一标识。这将使用硬编码的扰码器,以便每个名称的uniqueID相同,但每个用户的uniqueID不同

  • 您可以使用Parse之类的后端服务器为每个人保存一个唯一的ID。然后,您可以登录到设备上,UUID将在设备之间共享

  • 最后,如果您只是想要一个看起来随机的字符串(如463GH529-GJRH-FRH4-FH53-58FH3),您可以硬编码一个可以在每个设备上使用的字符串,但这会破坏UUID的用途,因为每个人都有相同的字符串-不是很独特


  • 希望其中一点对你有用

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

    + (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;
    }
    

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

    + (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;
    }
    

    我认为“唯一”一词说明了一切……对于所有iOS设备来说,唯一UUID是什么意思?请提供更多信息。基于UUID,我需要在两个设备应用程序之间进行一些事务处理。我认为“唯一”一词说明了一切……对于所有iOS设备,唯一UUID是什么意思?请提供更多信息。基于UUID,我需要在两个设备应用程序之间执行一些事务。此密钥需要保存在keychain中才能永久保存,否则每次的id都会不同。此密钥需要保存在keychain中才能永久保存,否则每次的id都会不同。@sabir我工作不多使用蓝牙,但我已经用iBeacons做了很多工作,所以希望这个概念是一样的。检查每个蓝牙设备并将其存储在阵列中。然后逐个检查阵列并检查信号最强的阵列(或者更好,可能有一个距离值,您可以使用它来查看哪个阵列更近,尽管我不能保证)。一旦你有了信号最强的设备,简单地获取UUID并用它做你喜欢的事情@sabir我在蓝牙方面做得不多,但我在iBeacons方面做了很多,所以希望这个概念是一样的。检查每个蓝牙设备并将其存储在阵列中。然后逐个检查阵列并检查信号最强的阵列(或者更好,可能有一个距离值,您可以使用它来查看哪个阵列更近,尽管我不能保证)。一旦你有了信号最强的设备,简单地获取UUID并用它做你喜欢的事情!