iOS SDK で iOS デバイス識別子を取得する方法はありますか? オーガナイザー - デバイスセクションの Xcode によって提示される識別子にアクセスしたいと思います。次のようなものです。
6 に答える
iOS 6 でも UDID にアクセスできるようですが、iOS 5.0 以降は廃止されているため、使用しないでください (とにかく、それについて警告が表示されます)。
[UIDevice currentDevice].uniqueIdentifier
一意の識別子が必要な場合は、次を使用する必要があります。
[UIDevice currentDevice].identifierForVendor
または、何らかの広告に関連している場合:
// from AdSupport.framework
[ASIdentifierManager sharedManager].advertisingIdentifier
ただし、これらの 2 つの新しいプロパティは iOS >= 6.0 でのみ使用できます。また、advertisingIdentifier も実際には一意ではありません (それから多くの重複が発生しています)。
iOS < 6 もサポートしたくない場合は、次のようなことができると思います。
UIDevice *device = [UIDevice currentDevice];
NSString *ident = nil;
if ([device respondsToSelector:SEL(identifierForVendor)]) {
ident = [device.identifierForVendor UUIDString];
} else {
ident = device.uniqueIdentifier;
}
しかし、レビュー中にアップルがそれにどのように対応するかはわかりません。
openUDIDやsecureUDIDなどのサードパーティ ソリューションを使用することもできます。オープンで安全な UDID は非推奨です - ベンダー/広告には識別子を使用してください。
アップデート
もう1つの可能性は、一意のハッシュのベースとしてMACアドレスを使用することです。たとえば、ODIN1のコードを使用できます-ソースはこちら
iOS7 の時点で、MAC アドレスは使用できなくなりました。(それを読み取ることはできますが、常に同じダミー アドレス 02:00:00:00:00:00 になります)。
アップルのドキュメントから:
さまざまなハードウェアの詳細に基づいて、各デバイスに固有の英数字の文字列。(読み取り専用) (iOS 5.0 では非推奨。代わりに、このクラスの identifierForVendor プロパティまたは ASIdentifierManager クラスの AdvertisingIdentifier プロパティを適宜使用するか、NSUUID クラスの UUID メソッドを使用して UUID を作成し、それをユーザーに書き込みます。デフォルトデータベース。)
NSString* identifier = nil;
if( [UIDevice instancesRespondToSelector:@selector(identifierForVendor)] ) {
// iOS 6+
identifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
} else {
// before iOS 6, so just generate an identifier and store it
identifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identiferForVendor"];
if( !identifier ) {
CFUUIDRef uuid = CFUUIDCreate(NULL);
identifier = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
[[NSUserDefaults standardUserDefaults] setObject:identifier forKey:@"identifierForVendor"];
}
}
+ (NSString *)uuid
{
NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
uuidString = (NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
}
return [uuidString autorelease];
}
シミュレーターでも 100% 動作します...
次のように一意のデバイス識別子を見つけることができます
[[UIDevice currentDevice] uniqueIdentifier]
はいあります。
[[UIDevice currentDevice] uniqueIdentifier]
編集: ただし、これは iOS 5 では非推奨です。この識別子は、iOS 5 では使用できなくなりました。詳細については、この SO投稿をお読みください。