[iOS,Android]端末識別子

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)
    ->NG

    Android 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 を使用します。

参考

コメント

タイトルとURLをコピーしました