久しぶりの更新となってしまいました。
今回はiOSのUUIDの取得について書きます。
端末で一意なIDを取得したい、と思った時に使うこのUUID。
ちょっと調べるだけでいくつもやり方が出てきます。
一体どれが良いのか、調べてみたので書いてみます。
結論
一意性の高い順番で書いていきます。
・1位: [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString]
・2位: [[UIDevice currentDevice].identifierForVendor UUIDString]
・3位: [[NSProcessInfo processInfo] globallyUniqueString]
・4位: [[NSUUID UUID] UUIDString]
・4位: CoreFoundation(allocator: Default[ = nil ] )
・4位: CoreFoundation(allocator: SystemDefault)
となりました。
1位: [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString]
NSUserDefaultに保存されているわけではないので
アプリを削除しようとも何回呼ぼうとも一意です。
ただし注意点もあります。
【追記あり】ASIdentifierManager の advertisingIdentifier を使っているとリジェクトされる問題
にもある通り、用途によってはリジェクトされるリスクもあるそうです。
2位: [[UIDevice currentDevice].identifierForVendor UUIDString]
参考: UIDevice
こちらもアプリを削除しようとも、何回呼ぼうとも一意です。
そして、注目すべき点は同一ベンダーで一意のIDを返す点です。
同一ベンダーの判定はアプリのベンダーのドメイン部分を見ている様です。
が、注意点もあります。
同一ベンダーのアプリを全て削除すると変わる
というものです。
調べてみましたが、変わる様子はなく。。。
しばらく時間を置く必要があるのでしょうか?
3位: [[NSProcessInfo processInfo] globallyUniqueString]
参考: NSProcessInfo
ここからは呼ばれる度に値が変わります。
ですが、プロセスが同じであれば一部同じ箇所もある事を加味し3位としました。
また、他のUUIDより桁数は多いです。
4位: [[NSUUID UUID] UUIDString]
参考: NSUUID
こちらが一番オーソドックスな取得法のようですね。
ですが、呼び出しごとに変わるのでNSUserDefaultやファイルとして保存する必要がありそうです。
4位: CoreFoundation(allocator: Default[ = nil ] )
参考: CFUUID Reference
// CoreFoundation(allocator: Default[ = nil ] ) CFUUIDRef ref = CFUUIDCreate(kCFAllocatorDefault); NSString* uuid1 = (NSString*)CFUUIDCreateString(kCFAllocatorDefault, ref); NSLog(@"uuid1: %@", uuid1); CFRelease(ref);
4位: CoreFoundation(allocator: SystemDefault)
// CoreFoundation(allocator: SystemDefault) CFUUIDRef ref2 = CFUUIDCreate(kCFAllocatorSystemDefault); NSString* uuid2 = (NSString*)CFUUIDCreateString(kCFAllocatorSystemDefault, ref2); NSLog(@"uuid2: %@", uuid2); CFRelease(ref2);
実験結果
初回起動時 uuid1: D3E65F07-E・・・AB212 uuid2: 0B23BD70-0・・・DE5D9 uuid3: 3BF2CF0F-B・・・DA725-401-0000003F4F91573A uuid4: EC851F9A-C・・・AFEEE uuid5: 9B40281C-A・・・D90D9 uuid6: 1C6AAEA0-6・・・83B81
同一起動で再呼び出し uuid1: 5BADAF2F-1・・・8A68C uuid2: 78562967-B・・・19F7A uuid3: 51DE6D4C-4・・・5DD51-401-0000003F7341938D uuid4: EC851F9A-C・・・AFEEE uuid5: 9B40281C-A・・・D90D9 uuid6: 95E04F6C-C・・・2F4CE
再起動 uuid1: 1AC35B91-8・・・B1E32 uuid2: 8412AB1A-C・・・401C4 uuid3: C1890C58-1・・・DE72E-407-0000003FBD876CCE uuid4: EC851F9A-C・・・AFEEE uuid5: 9B40281C-A・・・D90D9 uuid6: 09E8CBD8-D・・・ED286
アプリ削除 uuid1: 0331D547-7・・・088C3 uuid2: 7BB80816-5・・・D67A0 uuid3: 4FC060A3-F・・・C2377-416-00000040268B24DC uuid4: EC851F9A-C・・・AFEEE uuid5: 9B40281C-A・・・D90D9 uuid6: 5823B616-7・・・E100B
誰かのお役に立てば。
コメント