2012-02-22 6 views
8

私はすべてのアプリケーションで[[UIDevice currentDevice] uniqueIdentifier]を使用しています。AppleはuniqueIdentifierの使用をもう許可していません。 ユーザーがアプリを削除してもう一度インストールしても、私はそのユーザーを認識するために使用できるuniqueIdentifierの代わりに何かを使う必要があります。方法[[UIDevice currentDevice] uniqueIdentifier]はもう許可されません。代わりが必要です

おかげ

+3

重複の可能性 - [UIDevice UNIQUEIDENTIFIER推奨されない - 今何をすべきか?](http://stackoverflow.com/q/6993325/194544) – beryllium

答えて

12

documentationは、このセクションで何をするかをお勧めします。

特別な考慮事項
はUNIQUEIDENTIFIERプロパティを使用しないでください。あなたのアプリケーションに固有の一意の識別子を作成するには、 CFUUIDCreate関数を呼び出してUUIDを作成し、NSUserDefaultsクラスを使用して defaultsデータベースに書き込みます。

アプリを削除した後に一意の識別子が残っていることを確認するには、NSUserDefaultsではなくkeychainに保存する必要があります。キーチェーンを使用すると、keychain access groupsを使用して同じデバイス上のすべてのアプリで同じ一意のIDを共有することもできます。この方法では、デバイスがなくなった後にユーザーを誤って追跡できなくなり、バックアップから復元する新しいiDeviceで利用できるようになります。

+ (NSString*)deviceModel 
{ 
    static NSString *device_model = nil; 

    if (device_model != nil) 
     return device_model; 

    struct utsname systemInfo; 
    uname(&systemInfo); 
    NSString *str = @(systemInfo.machine); 

    return device_model; 
} 
+0

あなたは私がに追加することを意味デバイスのキーチェーンUUIDを削除してアプリを削除し、再度インストールすると値を取得して再度使用しますか? – user784625

+0

はい、キーチェーンアイテムは永続的です(デバイスが消去されずに新しいデバイスとして設定されている限り)。また、アクセスグループを使用すると、他のアプリケーションが同じキーチェーン値にアクセスできるようにすることができます。 – Joe

+0

もう1つの質問、私はMACアドレスisteadを使用することができますし、まだ私のアプリをリンゴによって承認される? – user784625

3

アップデート:あなたを介して受信することができ

+ (NSString *)uniqueDeviceIdentifier 
{ 
    NSString *device_id = nil; 

    if ([[self deviceModel] isEqualToString:@"Simulator iOS"]) { 
     // static id for simulator 
     device_id = @"== your random id =="; 
    } 
    else if (CurrentIOSVersion >= 6.f) { 
     // iOS 6 and later 
     device_id = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
    } 
    else { 
     // iOS 5 and prior 
     SEL udidSelector = NSSelectorFromString(@"uniqueIdentifier"); 
     if ([[UIDevice currentDevice] respondsToSelector:udidSelector]) { 
      device_id = [[UIDevice currentDevice] performSelector:udidSelector]; 
     } 
    } 
    NSLog(@">>>>>> device_id: %@", device_id); 
    return device_id; 
} 

デバイスのモデル。

アプリがクラッシュしないように修正しました。

systemId = [[NSUUID UUID] UUIDstring];

http://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUUID_Class/Reference/Reference.html#//apple_ref/occ/instm/NSUUID/UUIDString

+0

このコードの問題は、iOS 6以降で呼び出されるたびに別の値が返されることです。 'uniqueIdentifier'の代わりになるためには、永続化する必要があります。 – kamprath

0

digipeopleのハックで:iOSの7と前のため

関連する問題