iosとandroidで異なるのでサーバー連携するときには注意。
情報が新しくなる可能性もありなので、使うときに今がどうなっているのか最新情報も調べる必要あり。
iOS
UDID(iOS5から非推奨)
理由:通信を偽装して別のUDIDに成りすますことは非常に容易
UDIDを端末の識別子として認証等に利用することは、アプリ内IDの乗っ取り・個人情報漏洩などの脆弱性に繋がるため。しかも一度流出したUDIDを変更する術がない。MACアドレス(iOS8から非推奨)
理由:LANレベルでの固有識別を目的としたものであるため(デバイスで一意なので、初期化とかできない、例えば中古端末で別ユーザーが使うケースとか識別できない)- identifierForVendor(IDFV)(現在は、広告識別子として利用することは禁止)
- 36文字で固定。
- 英数字(大文字)とハイフンのみで構成。
- フォーマット:{8}-{4}-{4}-{4}-{12}
- 例: 3K0XXXXX-83XX-HEXX-KIXX-29KH83XXXXXX
IDFVの取得方法(swift4)let idfv = UIDevice.current.identifierForVendor?.uuidString
- AdvertisingIdentifier(広告事業者向けデバイス識別子)
identifierForVendorとの違い- 端末毎に固有の値が生成される
- ユーザーによって利用をオプトアウトできる
- ユーザーの操作によって値がリセットされる
Android
一意の識別子に関するベスト プラクティス
「一般的なユースケースと使用すべき識別子」とかも非常に参考になる。
- ハードウェア ID(SSAID(Android ID)や IMEI)
->NGAndroid 10(API レベル 29)以降、再設定不可能なデバイス ID にアプリがアクセスするには、デバイス オーナー アプリやプロファイル オーナー アプリであるか、特別な携帯通信会社パーミッションを持っているか、READ_PRIVILEGED_PHONE_STATE 特権パーミッションを持っている必要があります。
- 広告ID(Google Advertising ID (AAID))
ユーザー プロファイル作成や広告のユースケースでは広告 ID だけを使用する。
インスタンス ID または非公開環境に保存した GUID
不正決済防止と電話機能のユースケースを除き、他のすべてのユースケースでは、可能な限りインスタンス ID または非公開環境に保存した GUID を使用する。
インスタンス ID については、FirebaseInstanceId API リファレンスみて
GUIDは、以下でいける(グローバルに一意)var uniqueID = UUID.randomUUID().toString()
- API(DRM API、SafetyNet API)
プライバシーに関するリスクを最小限に抑えるため、ユースケースに適した API を使用する。 価値の高いコンテンツの保護には DRM API を、不正行為防止には SafetyNet API を使用します。
参考
- iOS/Androidで端末を識別するIDまとめ
#情報が古くなってしまっています。
コメント