2013-04-13 23 views
10

iphone/ipadデバイスのUDIDを変更しないままにしたいと思っています。生涯一意のIDを作成する別の方法

私はgoogleとstack-overflowの周りを検索していますが、解決策はありません。

また、OpenUDIDとCFUUIDを使用することをお勧めしますが、ユーザーがアプリを削除して再インストールすると、CFUUIDが異なることがあります。しかし、私は最初に生成されるアプリケーションごとに同じUDIDを使用したいので、アプリケーションごとにデバイスごとに変更されないでください。

+0

アプリケーションのIDをデバイスIDに追加してハッシュそのコード私はiThingsで固定デバイスIDを取得する方法を知らない。 –

答えて

8

ためのiOSのアップグレードの

とアプリの再インストール上の値を保持していない新しいドキュメントidentifierForVendorあたりとしてEDIT 2。私はthis linkで答えを見た。これは、他の方法で役立つかもしれません。システムリセットを行ってもUDIDだけが保持されることに注意してください。おそらくこの回答は、システムリセット時にも生涯UDIDを求めている開発者にとっては限界になります。これ以外にも、答えが役に立つと思われます。

summary hereもご覧ください。


identifierForVendorこのプロパティの値は、同じデバイス上で実行されている 同じベンダーから来たアプリケーションについても同様である。UIDevice Class Reference.

から入手可能です。

[[UIDevice currentDevice] identifierForVendor].UUIDString 

注:iOSの6.0以降利用可能。 UIDevice Class Reference

の新しいリリースごととして

EDIT 1アプリケーション(または同じベンダーから別の アプリ)をiOSデバイスにインストールされている間、このプロパティの値は同じままです。 という値は、ユーザが デバイスからそのベンダーのすべてのアプリケーションを削除した後、1つまたは複数のデバイスを再インストールすると変更されます。したがって、 アプリがこのプロパティの値をどこにでも格納する場合、 は識別子が変更される状況を適切に処理する必要があります。私はあなたがthis popular link

1で見たいのですが


EDIT

)MAC + CFBundleIdentifierのMD5

[[UIDevice currentDevice] uniqueDeviceIdentifier] 

これはアプリごとに同じままになりますそれぞれ異なるアプリ。アプリを削除して再インストールすると、アプリごとに同じになります。MAC

[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier] 

2)MD5これは、同じデバイスからのすべてのアプリケーションのために同じままです。アプリを削除して再インストールすると、端末ごとに同じになります。

EDIT 3

注:UNIQUEIDENTIFIERはiOS7から使用できなくなったとして、iOSの7のこのソリューションはもはや有益ではありません。

+0

: - そのデバイスのそのアプリのidentifierForVendorの値は変更されません。 –

+1

identifierForVendorの値は、そのperticular Vender + App + Deviceで変更されることはありません。 –

+0

アップルのドキュメントワード:「同じデバイス上で実行されている同じベンダーのアプリケーションでは、このプロパティの値は同じです。異なるベンダの同じデバイスのアプリケーションと、異なるデバイスデバイスをベンダーに関係なく使用できます。 –

0

初めてAPIとしてCFUUIDRef APIを使用してUUIDを生成し、キーチェーンに格納します。

+0

ユーザーがiosを更新したり、新しいiosをインストールしたりすると、キーチェーンデータが削除されるかどうかを確認します。 –

+0

生涯にわたって作成された一意のIDを保存したいですか? –

+0

@sunilz私は知っている、あなたの質問を読んだ。私の答えはここにあります。私はあなたの問題が何であるか分かりません。 –

2

UDIDとUUIDの違いに注意することが重要です。

UDID「一意のデバイスID」はハードウェア固有のものです。特定のデバイスで決して変更されることはありません。このため、プライバシーの問題となり、Appleはこれを使用しようとしているアプリをブロックしています。その結果、アップルはオプトアウト可能な「デバイスID」ハッシュを生成しました。特に、広告の使用に適しています。この新しいIDハッシュはIFAと呼ばれ、iOS 6.0以降で利用可能です。

UUID「ユニバーサルユニークID」は、ハードウェアに固有のものではありません。これは、デバイスを識別するために使用されるハッシュです。特に絶対値ではない。たとえば、PhoneGapはデバイスのプロパティに基づいてUUIDを生成します。これはdevice.uuidを実行したときに得られるものです。アプリを削除して再インストールすると、新しいIDハッシュが取得されます。 UUIDはAppleによってブロックされていません。

iOS < 6.0のバックアップとしてOpenUDIDを使用して、IFAを使用することをお勧めします。

ここでは、私たちが使用するコードを示します。 IFAが利用できない場合は、OpenUDIDを取得してください。 [OpenUDIDをインストールする必要があります。詳しくは、https://github.com/ylechelle/OpenUDIDを参照してください。]

NSString* uuid = nil; 
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) { 
    // IOS 6 new Unique Identifier implementation, IFA 
    uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
} else { 
    // Before iOS6 (or if IFA disabled) you shoud use a custom implementation for uuid 
    // Here I use OpenUDID (you have to import it into your project) 
    // https://github.com/ylechelle/OpenUDID 
    NSString* openUDID = [OpenUDID value]; 
    uuid = [OpenUDID value]; 
} 
+0

ご返信ありがとうございます。しかし、私は質問がある場合は、アプリケーションを削除し、再インストール、デバイスをオフにする、更新または新しいiosをインストールするOpenUDIDは以前と同じままになる? –

+0

プロジェクトサイトでOpenUDIDの詳細を読むことができます。しかし、それは、デバイス上の複数のアプリケーションによって共有される普遍的なユニークな文字列です。たとえば、Gmail、Chrome、DropboxではOpenUDIDを使用しています(わかりませんが、アプリ名を使用するだけです)。ダウンロードした最初のアプリケーションでは、GmailはOpenUDIDを強力に設定します。 2番目と3番目のアプリケーションは同じOpenUDID文字列を読み込みます。しかし、Gmailを削除すると、OpenUDID文字列が失われる代わりに、それを使用する他のアプリによって維持されます。 (削除するには、すべてのアプリが削除されている必要があります)。 – Federico

関連する問題