5

iOS SDK で iOS デバイス識別子を取得する方法はありますか? オーガナイザー - デバイスセクションの Xcode によって提示される識別子にアクセスしたいと思います。次のようなものです。

4

6 に答える 6

12

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;
}

しかし、レビュー中にアップルがそれにどのように対応するかはわかりません。

openUDIDsecureUDIDなどのサードパーティ ソリューションを使用することもできます。オープンで安全な UDID は非推奨です - ベンダー/広告には識別子を使用してください。


アップデート

もう1つの可能性は、一意のハッシュのベースとしてMACアドレスを使用することです。たとえば、ODIN1のコードを使用できます-ソースはこちら

iOS7 の時点で、MAC アドレスは使用できなくなりました。(それを読み取ることはできますが、常に同じダミー アドレス 02:00:00:00:00:00 になります)。

于 2012-12-20T12:46:16.397 に答える
7

アップルのドキュメントから:

さまざまなハードウェアの詳細に基づいて、各デバイスに固有の英数字の文字列。(読み取り専用) (iOS 5.0 では非推奨。代わりに、このクラスの identifierForVendor プロパティまたは ASIdentifierManager クラスの AdvertisingIdentifier プロパティを適宜使用するか、NSUUID クラスの UUID メソッドを使用して UUID を作成し、それをユーザーに書き込みます。デフォルトデータベース。)

于 2012-12-20T12:51:40.277 に答える
2
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"];
  }
}
于 2013-11-29T09:24:31.343 に答える
0
+ (NSString *)uuid
{
    NSString *uuidString = nil;
    CFUUIDRef uuid = CFUUIDCreate(NULL);
    if (uuid) {
        uuidString = (NSString *)CFUUIDCreateString(NULL, uuid);
        CFRelease(uuid);
    }
    return [uuidString autorelease];
}

シミュレーターでも 100% 動作します...

于 2013-04-04T13:23:44.960 に答える
0

次のように一意のデバイス識別子を見つけることができます

[[UIDevice currentDevice] uniqueIdentifier]
于 2012-12-20T12:59:20.820 に答える
-1

はいあります。

[[UIDevice currentDevice] uniqueIdentifier]

編集: ただし、これは iOS 5 では非推奨です。この識別子は、iOS 5 では使用できなくなりました。詳細については、この SO投稿をお読みください。

于 2012-12-20T12:45:06.323 に答える