fetch_uuid

【iOS】UUIDの取得の最適化

LINEで送る
Pocket

久しぶりの更新となってしまいました。

今回は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]


参考: ASIdentifierManager

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


4位: CoreFoundation(allocator: SystemDefault)


実験結果


誰かのお役に立てば。

LINEで送る
Pocket

Dalt

translimit, Inc. Application Engineer. Twitter: @daiki1003 Facebok: Daiki Asahi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です