Instagram Graph APIの審査を申請して承認されるまでのまとめ

Instagram Graph APIの審査で幾多のリジェクトを乗り越えてやっと承認されたので、それをまとめてみました。

Instagram Graph APIは、管理しているInstagramプロアカウント(ビジネスまたはクリエイター)のプロフィールや投稿している写真・動画を取得したりコメントを返信したりができるAPIです。

ドキュメント:InstagramグラフAPI - Instagramプラットフォーム

このAPIを使うには、Facebookによるアプリレビューを受ける必要があるのですが、承認されるまでかなりつまづいたのでその試行錯誤をまとめました。

なおこの記事は、次を想定しています。

  • Facebookアプリ作成済み
  • 開発者アカウント取得済み
  • プラットフォームはウェブサイト
  • パーミッションはinstagram_basicmanage_pagesでの申請

また執筆中にAPIのバージョンアップ(6.0から7.0へ)があり、レビュー自体に影響はないと思いますが、念の為記載しておきます。

申請までの道のり

Facebookアプリには開発モードとライブモードがあり、ライブモードがいわゆる本番です。Instagram Graph APIを使う場合、このライブモードへ正常に切り替えるためにアプリレビューの申請が必要です。

ドキュメント:アプリ開発 ライブモード

申請までの大まかな手順は次の通りです。

  1. アプリの開発を終わらせる
  2. Facebookログインボタンを実装する
  3. アプリ設定のベーシックの必須項目を埋める
  4. アプリレビューのアクセス許可と機能を選択・使用目的を記述し、レビューリクエストを送信する

開発モード(=開発中)でAPIへアクセスするだけであれば、アプリレビューは不要です。アプリダッシュボードで役割のあるアカウントであればアクセスのみが可能という以外に、大きな制限はありません(一部のAPIにはあり)。

ドキュメント:アプリのセキュリティ - アプリ開発

大きな制限がないがゆえに、トークンさえ取得できていれば開発モードのまま本番運用もできてしまうのですが、「アプリレビューが必要だよ」とドキュメントに書かれているのできちんと申請しましょう。

アプリの開発を終わらせる

まずはアプリの開発は終わらせましょう……ができれば理想ですが、UIなどが実装途中でも申請はできるようです。

とはいえ、どのように使っているかを説明するためのスクリーンキャストの撮影に困ると思いますので、ある程度実装は進めたほうが良いでしょう。

Facebookログインボタンを実装する

申請時に「Facebookログインを実装しているかどうか」の選択肢があります。これは、例えばサーバーサイドアプリであればFacebookログインは不要なため、実装していない理由を記載できるようになっています。

しかし、Instagram Graph APIを使う場合、アプリレビューにてFacebookログインを用いたパーミッションの確認が必須です。instagram_basicのように、エンドユーザーが使う必要のないパーミッションで、「サーバーサイドでAPIへ問い合わせ → 返ってきた値をDBへストア → クライアントサイドの表示はこのDBのデータ使用する」といった場合でもサーバーサイドアプリとは認められず、「Facebookログインができませんでした」という理由でリジェクトされます。

というわけで、アプリ審査のレビュワー(以下レビュワー)にFacebookログインをさせて、正しいパーミッションが指定されているかを確認してもらうために、Facebookログインボタンを実装します。

ここではパーミッションのスコープを指定した状態でログインさえできればいいので、Facebookログインのドキュメントにある「A. ログインボタンでログインする」の「プラグイン設定ツール」から取得したコードを使えば良いでしょう。

ドキュメント:JavaScript SDKを使用したウェブ向けのFacebookログイン

大きさや見た目などを選択して、コードを取得ボタンでコードが表示されます。

Step1ではFacebookアプリが複数あれば、申請するアプリをリストから選択してください。また解析は不要なので、チェックマークをオフにしました。(環境によってはこのStep 1がなく、次の2から始まっている場合があります)

Step2のJavaScriptをHTMLのbody要素の直後へ貼り付けます。

Step3のHTMLは、見た目の設定を変更せずに取得した場合、次のようなコードが生成されます(属性がわかりやすいように改行を追加)。

<div
  class="fb-login-button"
  data-size="large"
  data-button-type="continue_with"
  data-layout="default"
  data-auto-logout-link="false"
  data-use-continue-as="false"
  data-width=""
></div>

このコードをFacebookログインボタンを表示したい場所へ貼り付け、data-scope属性を追加、値はinstagram_basicshow_pages_listを指定し次のようなHTMLに変更します。

<div
  class="fb-login-button"
  data-size="large"
  data-button-type="continue_with"
  data-layout="default"
  data-auto-logout-link="false"
  data-use-continue-as="false"
  data-width=""
  data-scope="instagram_basic,show_pages_list"
></div>

実装できたらログインを試してみて、次のようにInstagramビジネスアカウントとFacebookページのパーミッションを要求されればOKです。

ここでは要求されることを確認するだけなので、ダッシュボードの役割に入っているアカウントであれば、InstagramビジネスアカウントやFacebookページを持っていなくとも問題ありません。

またFacebookログインはHTTPSでのアクセスを強制されるため、ウェブサーバーで有効にしておきましょう。

アプリ設定のベーシックの必須項目を埋める

アプリ設定→ベーシックのうち、次の項目を入力します。入力する内容はラベルそのままのため、説明は省きます。

  • アプリアイコン
  • プライバシーポリシーのURL
  • カテゴリ
  • ビジネス目的で使用
  • プラットフォーム(ウェブサイト)

アプリレビューのアクセス許可と機能を選択・使用目的を記述し、レビューリクエストを送信する

ドキュメント:アプリレビュー - Facebookログイン

アプリレビュー→アクセス許可と機能へアクセスし、instagram_basicmanage_pagesの「リクエスト」をクリックして追加します。クリックするとラベルが「次へ」と変わりますので、2つとも選択したら「次へ」をクリックしてリクエスト画面へ移動しましょう。

いきなりmanage_pagesが出てきましたが、これはinstagram_basicと一緒に申請が必要なパーミッションです。

申請の言語について

各項目のラベルなど日本語で表示されているため、最初の3回ぐらいまでは日本語で申請し、結果も日本語で返ってきていました(ただしテンプレ回答ですが…)。しかしうまく伝わっているか不安だったため、途中から機械翻訳を使って英語での申請に切り替えました(レビュワーが機械翻訳するのと変わらないのでは?と思いますが、意図せぬ翻訳を未然に防ぐため)。

「認証情報を提供する」の項目

「認証情報を提供する」では、アクセスしてもらうURLやアクセス制限がかかっていればその認証情報など、Facebookログインボタンが表示されレビュワーがFacebookログインできるように手順を記載します。アプリ設定で入力したURLへアクセスするようになっているため、異なるURLのテスト環境へアクセスしてもらう場合は、必ずその旨を書いておきましょう。

もしFacebookログインボタンへたどり着く手順が複雑であれば、スクリーンキャストを撮影・編集して「スクリーンキャストの何秒からみて」と付け加えておくとよいでしょう。この申請ではスクリーンキャストを添付できませんが、instagram_basicの申請で添付できるものにその手順を入れておけば見てもらえるようです。

ここで注意が必要なのは、レビュワーは手順を進められなくなると簡単にリジェクトする、ということです。 例えば、何かのタイミングでFacebookログインボタンが表示されなかった場合、気を利かせてブラウザをリロードはしてくれません(もしかすると、そういうことをしてくれないレビュワーだったのかもしれませんが)。 対策としては、正常な状態の画面をスクリーンキャストに入れておき、異常があった場合の対処方法をきちんと記載しましょう(例えばブラウザリロードする、Facebookからログアウトするなど)。

初めての人に教えるぐらい、ていねいに書くことがポイントです。

また、Facsebookログインの認証情報は提供不要です。どうやらレビュワーは、開発モードのFacebookアプリに限り、Instagramビジネスアカウントの接続などを確認できる特別なアカウントをもっているようです。 下手に開発ツールのテストユーザーを伝えると、instagram_basicのパーミッションが確認できずリジェクトされます。

「自身のFacebookアカウントの認証情報は提供するな」とされているし、複アカも禁止されているし、ドキュメントにも書かれいないし、どうすればええの?とダイレクトサポートに質問してようやくたどり着きました。

Facebookログインプロセスで選択する、InstagramビジネスアカウントとFacebookページは記載しておきましょう。

「instagram_basicの使用目的」の項目

「instagram_basicの使用目的」では、最低限次のような項目を記載します。

  • アプリのどの機能がinstagram_basicの許可を必要としているか
  • instagram_basicが許可されると、どのように機能したり、アプリの機能をどのように強化したりするのか
  • instagram_basicが許可されると、エンドユーザーの体験を向上させるか

詳しくはアプリレビューの詳細に書かれていますので、参照してください。

レビューのサンプルでは案外細かく書かれていたため、例えば「サーバーアプリから5分毎にGraph APIへアクセスし〜」といった感じで、文字数(URLなど含めた英文)でおおよそ2,500文字程度を記載しました。

またスクリーンキャストを添付できるので、言葉では説明が難しいものはスクリーンキャストで説明するのもありです。特にサーバーサイドは目に見えないので、簡単な図でもあれば理解してもらいやすいかと思います。サンプルを見るとわかりますが、解説を付け加える必要がるので、動画編集に慣れていないと結構時間がかかります。

「manage_pagesの使用目的」の項目

「manage_pagesの使用目的」では、「instagram_basicの申請に必要だから申請しています」的な注釈を冒頭へ記載して、instagram_basicと同じ内容の文章をコピペ、スクリーンキャストも同じものを選択しました。

審査を申請する

すべての項目を埋めると、右下の「審査を申請する」ボタンがアクティブになりますので、クリックして「プラットフォームオンボーディング規約」に同意して進めましょう。

審査の時間について

ドキュメントには5営業日と書かれていますが、最速で7時間後、大体は翌日に結果がわかる感じでした。おおよそ夕方あたりから24時ぐらいまでに返信があるため、時差の関係でレビュワーのコアタイムがこの時間帯になるのだと考えられます。

リジェクトについて

リジェクトされて提示される理由は基本的にテンプレ回答で、公開されているドキュメントのURLを提示される場合がほとんどです。リジェクトされる理由もドキュメント化されているので、念の為に目を通しておくと良いでしょう。

ドキュメント:App Review Rejection Results Guide

わからないことはレビューチームとやりとりできる「ダイレクトサポート」を活用してください。

審査の結果、承認された場合

アプリダッシュボードの「アプリレビュー → リクエスト」のリクエスト履歴の詳細から、「フィードバックを確認」の項目に申請したパーミッションが「承認済み」の項目として表示されます。

また、「アプリレビュー → 自分のアクセス許可と機能」の承認済みのアイテムとして、instagram_basicmanage_pagesが追加されます。

参考記事

ありがとうございます。