-
UUID
生成する度にユニークなID
-
UDID
端末ごとにユニークなID
iOSではiOS5以降でUDIDは非推奨APIとなり、iOS7以降ではAPI自体が削除されている。 「複数のアプリ間で共通して、端末を一意に識別可能な値」 はアプリ開発者には提供されない流れとなっている。
AndroidにおいてはUDIDに準じる値はいくつか取得可能であるが、それぞれに長所・短所がある。
このため、いずれのプラットフォームにおいても、端末を永続的に特定することに依存したアプリ設計は避け、生成したUUIDを一定期間(例えば、アプリがインストールされている間)保持する方式が推奨される。
CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
NSString *cfuuidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
- iOS2以降で利用可能
- C言語スタイルのAPI
- 永続化する場合はNSUserDefaults, Keychain, Pastboardなどに保存する
NSString *uuid = [[NSUUID UUID] UUIDString];
- 機能的にはCFUUIDと同等
- Objective-CスタイルのAPI
- iOS6以降で利用可能
NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
- 複数アプリで一貫した値を取得できる
- リセットしない限り一貫した値を取得できる
- iOS6以降で利用可能
- AdSupport.frameworkが必要
- 右記操作により、リセットされることもある
設定 > プライバシー > 広告 > Advertising Identifierをリセット
- 広告表示せずにadvertisingIdentifierを使用するとリジェクトされることがある
iOSの設定で
プライバシー > 広告 > 追跡型広告を制限
という項目があるが、これをONにしてもアプリからAdvertising Identifierが取得できなくなるわけではない。
この設定を尊重するかどうかはアプリ開発者に委ねられている。
http://bit.ly/1eMf1xq
NSString *idForVendor = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
- 同一アプリベンダー内で一貫した値を取得できる
- iOS6以降で利用可能
- アプリ再インストールによりリセットされる(同一ベンダーのアプリが他に無かった場合)
- 一部の端末で同一の値が返ってくる 参照
iOS5以降で非推奨のため説明割愛
Appleのドキュメントで保証されたAPIではないので説明割愛(今後利用できなくなる可能性があるため)
TelephonyManager.getDeviceId()
- 工場出荷状態にリセットしたとしても一貫した値を取得できる
- 電話以外のデバイスでは利用できない
- READ_PHONE_STATEパーミッションが必要(嫌がられやすい権限のひとつ)
- 一部の端末でバグが確認されている(0や*などを返す)
WiFiまたはBlueToothをOFFにしている場合は取得できないため非推奨
android.os.Build.SERIAL
- API>=9 (Android 2.3以上) で利用可能
Settings.Secure.ANDROID_ID
- バグのない端末では概ねUDIDとして機能する
- API8 (Android 2.2) では信頼できない
- root化されたAndroidでは値を任意に変更できる
- 一部のベンダーの端末で全て同じ値(9774d56d682e549c)が返ってくる
- 工場出荷状態にリセットしたらANDROID_IDもリセットされる
-
Android - Android/UIID.java