10

我的应用程序与 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
4

3 回答 3

6

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];
}
于 2013-09-12T17:03:01.983 回答
1

为什么不使用CFUUIDRefiOS 版本并独立于 iOS 版本?

CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);

self.uuidString = (NSString *)CFUUIDCreateString(NULL,uuidRef);

CFRelease(uuidRef);

当然还记得uuidString在钥匙串中计算(在应用程序删除的情况下)?

这里写了如何使用钥匙串

于 2013-09-12T19:30:15.633 回答
0

作为静态宏的硬替换,您可以尝试动态 if 语句来检查它。

UIDevice 有一个名为“systemVersion”的属性,你可以检查一下

于 2013-09-23T07:48:25.100 回答