【问题标题】:using a unique identifier of iPhone or iOS device使用 iPhone 或 iOS 设备的唯一标识符
【发布时间】:2011-11-13 21:33:12
【问题描述】:

我正在制作一个订单预订应用程序。我需要从 iPhone/iOS 设备向服务器发送一个唯一密钥。

我可以使用 iPhone 的 GUID 吗?即 [UIDevice uniqueIdentifier] 合法吗?苹果会通过法律途径接受吗?

用于唯一标识 iPhone 或 iOS 设备的最佳属性是什么? 如果不是,那么唯一标识设备的另一种方法是什么。

实际上我需要预订参考号。由应用程序生成。必须是唯一的。

【问题讨论】:

  • 您从何处获得此 GUID?什么 API?
  • 我不完全确定您所说的“合法吗”..
  • 我建议您识别用户而不是设备。用户可以更换设备。 ;-)
  • 我需要预订参考号。由 app 生成。必须是唯一的。那我该怎么做呢

标签: iphone ios


【解决方案1】:

Apple 已宣布将于 2013 年 5 月开始拒绝使用 UDID 跟踪用户行为的应用程序

这是 UDID 的替代方法:

您可以创建一个 UIApplication 、 UIDevice 或您喜欢的类别(ARC 示例)

@interface UIApplication (utilities)
- (NSString*)getUUID;
@end

@implementation UIApplication (utilities)

- (NSString*)getUUID {

    NSUserDefaults *standardUserDefault = [NSUserDefaults standardUserDefaults];

    static NSString *uuid = nil;

    // try to get the NSUserDefault identifier if exist
    if (uuid == nil) {

        uuid = [standardUserDefault objectForKey:@"UniversalUniqueIdentifier"];
    }

    // if there is not NSUserDefault identifier generate one and store it
    if (uuid == nil) {

        uuid = UUID ();
        [standardUserDefault setObject:uuid forKey:@"UniversalUniqueIdentifier"];
        [standardUserDefault synchronize];
    }

    return uuid;
}

@end

UUID()就是这个函数

NSString* UUID () {

    CFUUIDRef uuidRef = CFUUIDCreate(NULL);
    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef);
    CFRelease(uuidRef);
    return (__bridge NSString *)uuidStringRef;
}

这会生成一个存储在 NSUserDefault 中的唯一标识符,以便在应用程序需要时重复使用 - 此标识符将与应用程序安装相关,而不是设备,但可用于跟踪订阅的设备数量APN 服务等...

之后就可以这样使用了:

    NSString *uuid = [[UIApplication sharedApplication] getUUID];

【讨论】:

    【解决方案2】:

    我知道没有 GUID,你的意思是 [UIDevice uniqueIdentifier]?您可以使用它,但它在 iOS 5 中已被弃用,因此您最好想出一些其他方法来识别您的设备。

    【讨论】:

    • 是的,使用该 ID 做任何事情都是个坏主意。坦率地说,我认为 Apple 不应该包含它。
    • 您当然不应该将设备 ID 用作图书参考编号!而是生成一个 GUID,您可以在 stackoverflow 中搜索它。
    【解决方案3】:

    创建 UUID:包含 UUID 的字符串。以 ASCII 表示的 UUID 的标准格式是用连字符分隔的字符串,例如 68753A44-4D6F-1226-9C60-0050E4C00067。

    + (NSString *)newUUID
    {
        CFUUIDRef theUUID = CFUUIDCreate(NULL);
        CFStringRef string = CFUUIDCreateString(NULL, theUUID);
        CFRelease(theUUID);
        return (NSString *)string;
    }
    

    【讨论】:

    • 这可以由 [UIDevice uniqueIdentifier] 生成。这将是唯一的,但苹果不会接受使用设备 ID
    【解决方案4】:

    我不会参考 NDA 下的内容,但请尝试一下 solution,正如作者所宣传的那样“它会根据设备的 mac 地址和捆绑标识符生成唯一标识符。”但是请注意,越狱设备可能会更改其 MAC 地址 AFAIK。

    【讨论】:

      【解决方案5】:

      iOS 6 出现了 identifierForVendor,它可以跨来自同一供应商的多个应用程序使用,尽管它可以识别设备,但您可以将它与 iCloud 的键值存储结合使用,例如跨设备识别用户。

      Ole Begemann 在他的博客上很好地解释了这一切:http://oleb.net/blog/2012/09/udid-apis-in-ios-6/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-05
        • 1970-01-01
        • 2013-10-07
        • 2019-04-25
        • 1970-01-01
        • 2013-09-19
        • 2021-02-20
        相关资源
        最近更新 更多