🍏

【Apple Search Ads】Campaign Management APIのユーザー作成手順

2022/01/24に公開

これは何?

「Apple Search Ads」のCampaign Management API ユーザー作成の手順です。
※ この記事では「Apple Search Ads」は「ASA」と略します。

コンテキスト

ASA Campaign Management APIのVersion4では、Version3までの証明書を使った認証方法が使用出来ません。代わりにOAuth2.0 アクセストークンを使用する必要があります。

利用手順は

  • ASAダッシュボードからAPIユーザーを招待して追加
  • APIユーザー側で公開鍵を登録して認証用IDを発行
  • JSON Web Token を生成
  • アクセストークンをリクエスト
  • トークンを使ってアクセス

といった流れになります。
なお、現在のASAダッシュボードでは、旧方式の作成済み証明書のダウンロードは可能ですが、新規作成は出来ない様です。

APIユーザーの追加

まず管理権限のあるASAアカウントでダッシュボードへログイン。

と進みます。

ユーザを招待する

招待される側(APIユーザー)用にAppleIDが必須となるので事前に用意しておきましょう。

  • APIを利用するユーザー名情報
  • Apple ID

を入力します。

ユーザーアクセスとロールを選択

ユーザーのアクセス権限とロールを選択します。

今回の様なAPI利用であれば、以下の3つの中から適切なものを選択する形になると思います。

  • APIアカウントマネージャー(読み書き)

    • 読み取りおよび書き込み権限
    • アカウント内のレポートの表示とすべてのキャンペーンの管理、API接続の管理が可能
  • APIアカウント読み取り専用

    • 読み取り専用権限
    • アカウント内の全てのキャンペーンのレポートおよびデータの表示が可能
  • 制限付きアクセス

    • 特定キャンペーンのみに絞って権限(読み取りor読み書き)を選択可能

アクセスとロールを決定したら、「招待の送信」ボタンを押下し、招待メールを送信します。

招待を承認する

招待メール内に記載された招待リンクを開きます。

この時、

  • 招待を受けた側のユーザーのAppleIDでログイン

する必要があるので注意。(自分はこれで少しハマりました。。。)

ログイン後

  • メールに記載されている招待コードを入力してアクティベート
  • ASAダッシュボードにログイン
    (ここでも招待を受けた側のAppleIDでログインしている事を要確認)

という流れになります。

なお、以下以降の手順は、招待を受けた側アカウントでの作業となります。

鍵の作成する

まず、秘密鍵を生成します。

openssl ecparam -genkey -name prime256v1 -noout -out asa-api-private-key.pem

そして、公開鍵を書き出し

openssl ec -in asa-api-ks-private-key.pem -pubout -out asa-api-public-key.pem

書き出した公開鍵の中身をコピーします。

less asa-api-public-key.pem | pbcopy

公開鍵を登録

  • ASAダッシュボードの「アカウント設定」を開きます

  • 「API」タブを選択

  • 表示される「Public Key」欄に先程書き出した公開鍵の中身を貼り付けます

  • 「Generate API Client」ボタンを押下

  • 無事完了すると、以下が発行されます

    • clientId
    • teamId
    • keyId

    ※ 各IDは実装時に必要になるので控えておく

アクセストークンのリクエスト

以上で、APIを利用するための事前準備は完了です。

これまでの手順で作成した

  • 秘密鍵ファイル
    asa-api-private-key.pem
  • clientId
    SEARCHADS.0000000-00000-0000-000-00000
  • teamId
    SEARCHADS.0000000-00000-0000-000-00000
  • keyId
    xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx

を使って、JSON web token (JWT) を生成し、アクセストークンをリクエスト → 取得したアクセストークンでAPIをコールする...という流れになります。

実装方法はまた別記事にまとめたいと思います🙏

参考

Discussion