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 バージョンと独立して使用しないのですか?

CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);

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

CFRelease(uuidRef);

そしてもちろんuuidString、キーチェーンで計算されたことを覚えていますか (アプリケーションの削除の場合)?

キーチェーンの使い方はこちら

于 2013-09-12T19:30:15.633 に答える