2022-01-22

Apple Search Ads で取得したレポートの id がユニークではなかった

値が合わなくて困っていたら id に重複があった。

undefined

2022/03/25 追記

Apple の広告の構造は キャンペーン > 広告グループ > 広告 である。(キャンペーン ID、広告グループ ID、クリエイティブ ID)ではユニークにならないが、(キャンペーン ID、広告グループ ID、広告 ID)にすればユニークになる。

↓の広告単位のレポートを使えば良い。
Get Ad-Level Reports | Apple Developer Documentation


Apple Search Ads の API を使うことで掲載している広告の情報が取得できる。管理画面から見える値と API から落とした値が異なるという問題が起きた。

Apple Developer Documentation

結論

  • Creative Sets には Default Image Ad と Default Text Ad がある
  • これらの ID は -1
  • (キャンペーン、グループ、クリエイティブの ID) が Primary Key だと思っていると値が合わなくなる

取得したレポートをデータベースに移すと値が合わない

各クリエイティブごとのインプレッションやインストール数を取得するのには以下の API が使える。

Apple Developer Documentation

Apple の広告は キャンペーン > グループ > クリエイティブ という構造になっているため、各クリエイティブの情報にはそのクリエイティブが属しているグループやキャンペーンの id や名前の情報もついてくる。

自分の想像では

  • キャンペーンは(キャンペーン ID) で識別できる
  • グループは(キャンペーン ID、 グループ ID)で識別できる
  • クリエイティブは(キャンペーン ID、 グループ ID、クリエイティブ ID)で識別できる

と思っていた。しかし、取得したデータをデータベースに入れてキャンペーンごとの値を出してみると値が明らかに少なかった。

ユニークだと思ったらそうじゃなかった

クリエイティブごとに見てみると、「Default Image Ad」のデータが存在していなかった。API から落とした生データを眺めると、「Default Image Ad」と「Default Text Ad」の ID がともに -1 であることに気がついた。identifier になってないよ!!!

データベースのテーブルを作るときに、データの更新処理が面倒だからと Primary key が重複したときの挙動を上書きにしてしまっていた。そのせいで意図しないキーの重複に気が付けなかった。横着するんじゃなかったよ……

というわけで、「Default ~」の ID には名前を入れることで、クリエイティブを(キャンペーン ID、 グループ ID、クリエイティブ ID)で識別できるようになった。よかった。

感想

コード数行を省略しようとした結果、値ズレの調査で逆に時間をとられた。反省。