次のようなことができます (これが返す識別子はデバイスにバインドされておらず、ユーザーがアプリを削除して再インストールすると変更されることに注意してください):
NSString* uniqueIdentifier = nil;
if( [UIDevice instancesRespondToSelector:@selector(identifierForVendor)] ) {
// iOS 6+
uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
} else {
// before iOS 6, so just generate an identifier and store it
uniqueIdentifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identiferForVendor"];
if( !uniqueIdentifier ) {
CFUUIDRef uuid = CFUUIDCreate(NULL);
uniqueIdentifier = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
[[NSUserDefaults standardUserDefaults] setObject:uniqueIdentifier forKey:@"identifierForVendor"];
}
}
これにより、iOS-6 より前の識別子が生成され、デフォルトで保存されるため、通常は同じ識別子になります。と同様の方法で識別子を使用する必要があるキーチェーン グループと一連のアプリがある場合はidentifierForVendor
、ユーザーのデフォルトの代わりにキーチェーンに格納できます。