重複の可能性:
iPhone アプリの一意の識別子
デバイスのシリアル番号を一意の識別子として使用して、デバイスがライセンスされているかどうかを識別することを目的とした IOS アプリケーションを構築しています。しかし、これによると、一意の識別子は iOS 5 で廃止されました。
デバイスを一意に識別するために使用できる識別子は他にありますか?
重複の可能性:
iPhone アプリの一意の識別子
デバイスのシリアル番号を一意の識別子として使用して、デバイスがライセンスされているかどうかを識別することを目的とした IOS アプリケーションを構築しています。しかし、これによると、一意の識別子は iOS 5 で廃止されました。
デバイスを一意に識別するために使用できる識別子は他にありますか?
これは私がしていることであり、Apple の提案でもあります
uniqueIdentifier プロパティは使用しないでください。アプリ固有の一意の識別子を作成するには、CFUUIDCreate 関数を呼び出して UUID を作成し、NSUserDefaults クラスを使用してデフォルト データベースに書き込みます。
- (NSString *)getUUID {
NSString *string = [[NSUserDefaults standardUserDefaults] objectForKey:@"deviceUUID"];
if (string == nil) {
CFUUIDRef uuid;
CFStringRef uuidStr;
uuid = CFUUIDCreate(NULL);
uuidStr = CFUUIDCreateString(NULL, uuid);
string = [NSString stringWithFormat:@"%@", uuidStr];
[[NSUserDefaults standardUserDefaults] setObject:string forKey:@"deviceUUID"];
[[NSUserDefaults standardUserDefaults] synchronize];
CFRelease(uuidStr);
CFRelease(uuid);
}
return string;
}
これは、同じルールが適用される Web で普及している Cookie アプローチで解決する傾向があります。基本的に、アプリは Cookie の存在を確認する必要があります。そこにない場合は、サーバーに要求してローカルに永続化します。次に、リクエストごとに識別子を送信します。新しいデバイスごとに十分に異なる識別子を生成するのは、サーバーの仕事です。
このようにして、必要以上にユーザーについて知ることなく、個々のユーザーを追跡できます。
私はこれを使用します:
//create a 30 digits random alphanumeric string
NSString *symbols = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
NSMutableString *randStr = [NSMutableString stringWithCapacity: 30];
for (int i=0; i<30; i++)
[randStr appendFormat: @"%C", [symbols characterAtIndex: rand()%[symbols length]]];
NSLog(@"Pseudo UUID = %@", randStr);
重複を取得する可能性はごくわずかです。
UDID を使用してサーバーを送信できます。以下のように各デバイスの一意のIDであり、これをサーバーに送信します。
NSString *udid=[[UIDevice currentDevice]uniqueIdentifier];