woshidan's blog

あいとゆうきとITと、とっておきの話。

iOSのidentifierForVendorとadvertisingIdentifierについて

お仕事で調べる必要があったのでメモ。

identifierForVendor

https://developer.apple.com/reference/uikit/uidevice/1620059-identifierforvendor?language=objc

  • アプリのベンダー(開発元)ごとにデバイスが一意に見えるように発行されるアルファベットと数字からなる文字列
  • もう少し具体的に言うと、アプリのベンダーを識別するためにvendor IDというものを発行していて、vendor IDに対して一意
    • vendor IDは基本的にApple Play Storeに登録された情報をもとに決まる
    • Play Storeに登録されていないアプリ(B to Bなど)の場合はBundle IDをもとに決定するが、iOS6以前とiOS7以降で異なる
      • iOS6: bundle IDの区切りの先頭2つ(1つしかない場合はBundle ID全体)
      • iOS7: bundle IDの最後以外の要素(1つしかない場合はBundle ID全体)
  • nilになるような場合
    • しばらく待ってから再び値を取得し直す
    • どういう事例があるかと言うと、ユーザーがアンロックしているのに、デバイスが再起動しているとき(ユーザーがアンロックしている状態で起動したとき?)
  • 同じベンダーのアプリを全部アンインストールしてから再インストールすると値が変わる
    • 同じベンダーのアプリが1つでも残っていたら値が変わらない

ASIdentifierManager

https://developer.apple.com/reference/adsupport/asidentifiermanager

  • 広告を提供する専用のIDへのアクセスを提供
  • これはユーザーが広告トラッキングを制限しているかどうかを示すフラグ
  • このクラスは広告を提供するシステムを実装する開発者によって利用されることを想定
    • 一般のアプリ開発者は、彼らが開発する広告用SDKとのリンクのためであっても、このクラスに直接メッセージを送る必要はない
  • 広告IDの取得方法
    • ASIdentifierManagerクラスのsharedインスタンスを取得
    • 広告トラッキングが制限されているかどうかをisAdvertisingTrackingEnabledで指定
    • 広告IDをadvertisingIdentifierプロパティを通して取得する(注意: 広告トラッキングが制限されている場合、この値は00000000-0000-0000-0000-000000000000(In iOS 10.0 and later))

advertisingIdentifier

https://developer.apple.com/reference/adsupport/asidentifiermanager/1614151-advertisingidentifier

  • アルファベットの文字列でデバイス毎に一意になるように発行される数字の列
  • UIDeviceから取得できるidfvとは異なり、この値はすべてのベンダーのアプリ内で同一の値を返す
  • このIDは変化するかもしれないので、キャッシュしてはいけない
    • たとえば、ユーザーがデバイス(との連携?)を消したなどで
  • 広告トラッキングが制限されている場合、iOS10.0かそれ以降ですべて0の文字列になっている
  • 値がnilの場合
    • この値は再取得される
    • これが起きる理由としてはユーザーがアンロックしているのに、デバイスが再起動しているとき(ユーザーがアンロックしている状態で起動したとき?) (IFDVと同様)

isAdvertisingTrackingEnabled

https://developer.apple.com/reference/adsupport/asidentifiermanager/1614148-isadvertisingtrackingenabled

  • ユーザーが広告トラッキングを制限しているかどうかを示す値
  • このプロパティの値を広告トラッキングを行う前に確認すること
    • もしこの値がFALSEであるならば、広告IDは次の限られた目的にしか使えない
      • 帯域制限
      • 属性
      • コンバージョンイベント
      • ユニークユーザー数の推定
      • 不正な広告の検出
      • デバッグ
        • iOS10以降だとユニークユーザー数の推定にも使えないような?