ユーザーのiPhoneのUDIDを見つけることが可能かどうか疑問に思っていました。誰かが光を当てることはできますか?
注: 2013年5月1日以降、AppleはデバイスのUDIDにアクセスするアプリを受け入れなくなります 。
代わりに、これにアクセスするには、iOS 6以降の新しいメソッドidentifierForVendor
およびadvertisingIdentifier
を使用する必要があります。詳細については 関連記事はこちら をご覧ください。
古い方法(非推奨であり、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];
しかし、それらはすべて英数字であり、典型的なデバイスの一意の識別子は数字のみです。 thos 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を使用してテストビルドをインストールするとき、またはアドホック配布を使用してデバイスにアプリをインストールするときにも、値は変化する可能性があります。したがって、アプリがこのプロパティの値をどこかに保存する場合、識別子が変更される状況を適切に処理する必要があります。
しかし、さらに悪いことに、Appleは、MACアドレスを一意の識別子として使用する最後の手段も削除しているようです。 this AVGブログ 。
したがって、デバイスを一意に識別したい場合、今何をすべきか-例えば。ライセンス、設定、または他の目的のために??
最善の方法は、このようにすることです
NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
コメントはできませんが、他の人に警告したいと思います。 DZenBotの答えとして、すべてのメソッドが同じ結果をもたらすわけではありません。
代替1(NSUUIDクラス):
NSString *udid = [[NSUUID UUID] UUIDString];
代替2(UIDeviceクラス)(iOS 6.0以降で使用可能):
NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
代替1生成ランダムUUID while代替2変更しない固定UIDを指定します。
IOS5以降では、これを使用してUDIDを検索します
NSString * uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL); ...
デバイスの一意のIDを取得するのではなく、一意の識別番号を生成する方法を示していると思います。
[OpenUDID] libの使用方法 https://github.com/ylechelle/OpenUDID
とても簡単です。 Xcodeウィンドウに移動して[デバイス]を選択するか、オーガナイザーで見つけることができます。
http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid
UDIDはIOS 5.で非推奨です。iOS7では、Appleは、MACを照会してMACをIDスキームのベースとして使用するため、実際には -[UIDevice identifierForVendor] を使用するか、インストールごとのUUIDを作成する必要があります。誰かを助けます。