我的应用程序与iOS5和iOS6兼容。
到现在为止,我在使用时都没有问题:

NSString DeviceID = [[UIDevice currentDevice] uniqueIdentifier];

现在使用iOS7,并且uniqueIdentifier不再起作用,我更改为:
NSString DeviceID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

问题是,这不适用于iOS5。

如何实现与iOS5的向后兼容性?

我尝试了这个,没有运气:
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000
    // iOS 6.0 or later
    NSString DeviceID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
#else
    // iOS 5.X or earlier
    NSString DeviceID = [[UIDevice currentDevice] uniqueIdentifier];
#endif

最佳答案

Apple的最佳和推荐选项是:

 NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

适用于5.0以上的所有设备。

对于5.0,您必须使用uniqueIdentifier。最好检查是否可用:
if (!NSClassFromString(@"ASIdentifierManager"))

结合使用将为您提供:
- (NSString *) advertisingIdentifier
{
    if (!NSClassFromString(@"ASIdentifierManager")) {
        SEL selector = NSSelectorFromString(@"uniqueIdentifier");
        if ([[UIDevice currentDevice] respondsToSelector:selector]) {
            return [[UIDevice currentDevice] performSelector:selector];
        }
        //or get macaddress here http://iosdevelopertips.com/device/determine-mac-address.html
    }
    return [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
}

关于关于唯一标识符的iOS7应用与iOS5向后兼容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18770100/

10-09 08:32