I was wondering if it was possible to find out the UDID of the user's iPhone. Can someone shed some light?
10 に答える
注: Apple は、2013 年 5 月 1 日以降、デバイスの UDID にアクセスするアプリを受け入れなくなります。
代わりに、新しいメソッドidentifierForVendor
を使用しadvertisingIdentifier
、iOS 6 以降でこれにアクセスする必要があります。詳しくはこちらの関連記事をご覧ください。
古い方法 (非推奨であり、App Store で拒否される可能性があります)
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
iOS7 以降、このuniqueIdentifier
プロパティは利用できなくなりました。
参照を参照してUIDevice
ください。
一部の人が言ったように、iOS5 ではこれは廃止されました。
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
Appleには、デバイスのUUID (Universally Unique Identifier)を取得するための 3 つの API が用意されています。
代替案 1 (NSUUID クラス):
NSString *udid = [[NSUUID UUID] UUIDString];
代替 2 (UIDevice クラス):
NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
代替案 3 (ASIdentifierManager クラス、AdSupport フレームワークが必要):
NSUUID *UUID = [[ASIdentifierManager sharedManager] advertisingIdentifier];
NSString *udid = [UUID UUIDString];
ただし、それらはすべて英数字であり、典型的なデバイスの一意の識別子は数字のみです。つまり、これら 3 つの API は役に立たず、古い [[UIDevice currentDevice] uniqueIdentifier] は iOS6 でも機能しますが、どのくらいの期間使用できますか?
「非推奨」の警告が気になる場合は、次を追加してください。
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
それが役に立てば幸い!
IOS5 以降では、これを使用して UDID を見つけます。
NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
}
NSLog(@"UDID: [%@]", uuidString);
identifierForVendor はデバイスに対して一意ではなく、最終的に変更される可能性があることに言及する価値があるかもしれません。
Apple はidentifierForVendorについて次のように述べています。
このプロパティの値は、同じデバイスで実行されている同じベンダーのアプリでも同じです。異なるベンダーから提供された同じデバイス上のアプリと、ベンダーに関係なく異なるデバイス上のアプリでは、異なる値が返されます。
値が nil の場合は、しばらく待ってから再度値を取得してください。これは、たとえば、デバイスが再起動された後、ユーザーがデバイスのロックを解除する前に発生します。
アプリ (または同じベンダーの別のアプリ) が iOS デバイスにインストールされている間、このプロパティの値は変わりません。ユーザーがデバイスからそのベンダーのアプリをすべて削除し、その後それらの 1 つ以上を再インストールすると、値が変わります。この値は、Xcode を使用してテスト ビルドをインストールするとき、またはアドホック ディストリビューションを使用してデバイスにアプリをインストールするときにも変更される可能性があります。したがって、アプリがこのプロパティの値をどこかに保存する場合は、識別子が変更された状況を適切に処理する必要があります。
しかし、さらに悪いことに、この AVG ブログによると、Apple は MAC アドレスを一意の識別子として使用するという最後の手段も削除しているようです。
デバイスを一意に識別したい場合、今何をすべきか - 例えば. ライセンス、設定、またはその他の目的のため??
IOS5 以降では、これを使用して UDID を見つけます。
NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL); ...
デバイスの一意の ID を取得するのではなく、一意の識別番号を生成する方法を示していると思います。
最善の方法は、このようにすることです
NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
とても簡単です。Xcode ウィンドウに移動して [デバイス] を選択するか、オーガナイザーで見つけることができます。
http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid
[OpenUDID] lib https://github.com/ylechelle/OpenUDIDを使用してみませんか?