2012-12-20 46 views
5

iOS SDKでiOSデバイス識別子を取得する方法はありますか? 私はOrganizerでのXcodeによって提示された識別子にアクセスしたいと思います - デバイスセクション、のようなもの:はい、あり21xb1fxef5x2052xec31x3xd3x48ex5e437xe593iOSデバイス識別子を取得する

+0

としてなぜあなたはその識別子を取得したいん一意のデバイス識別子を見つけることができます? –

+2

デバイスを一意に識別する必要があります – aumanets

答えて

7

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

-1

を。

[[UIDevice currentDevice] uniqueIdentifier] 

EDIT:この識別子は、詳細についてはiOSの5読むthis SOポストにもはや使用する必要がありますが、これはiOSの5で廃止され 。

+3

これはiOS 5では非推奨です。これを使用するアプリケーションはApp Storeには使用できません。 –

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をサポートするためにwan't場合は、そのような何かを行うことができたとします。

UIDevice *device = [UIDevice currentDevice]; 
NSString *ident = nil; 
if ([device respondsToSelector:SEL(identifierForVendor)]) { 
    ident = [device.identifierForVendor UUIDString]; 
} else { 
    ident = device.uniqueIdentifier; 
} 

が、私はAppleが審査時にそれに反応するかどうかはわかりません。

openUDIDまたは secureUDID のようなサードパーティのソリューションを使用することもできます。オープンで安全なUDIDは非推奨 - ベンダー/広告の識別子を使用します。


更新

もう一つの可能​​性は、たとえば、あなたが ODIN1からコードを使用することができ、ユニークなハッシュのためのベースとしてMACアドレスを使用することです - MACアドレスがノーであるiOS7のとおり source is here

より長い利用可能。 (1つは読むことができますが、常に同じダミーアドレス02:00:00:00:00:00になります)。 Apple Documentationから

+0

このプロパティはiOS 5.0で廃止されました – aumanets

+0

ええ、申し訳ありませんが、最初はidentifierForVendorの代わりにuniqueIdentifierを書いていましたが、とにかく、uniqueIdentifierを使用すべきではないと書かれていて、 ) – lupatus

+0

SecureUDIDはCrashlyticsではサポートされていません。彼らは次のように書いています: "代わりにAppleのiOS 6ベンダーと広告識別子を使用することをお勧めします。" –

0

あなたは

[[UIDevice currentDevice] uniqueIdentifier] 
0
+ (NSString *)uuid 
{ 
    NSString *uuidString = nil; 
    CFUUIDRef uuid = CFUUIDCreate(NULL); 
    if (uuid) { 
     uuidString = (NSString *)CFUUIDCreateString(NULL, uuid); 
     CFRelease(uuid); 
    } 
    return [uuidString autorelease]; 
} 

それはあまりにも、シミュレータ上では100%を、作品...

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"]; 
    } 
} 
関連する問題