【追記あり・保存版】Instagramの審査の流れ、手順、必要なものまとめ

【2018年4月5日 追記】
本日、2018年4月5日にInstagramから以下の発表がありました。

> To continuously improve Instagram users' privacy and security, we are accelerating the deprecation of Instagram API Platform, making the following changes effective immediately. We understand that this may affect your business or services, and we appreciate your support in keeping our platform secure.  
> These capabilities will be disabled immediately (previously set for July 31, 2018 or December 11, 2018 deprecation). The following will be deprecated according to the timeline we shared previously:
> 
> Public Content - all remaining capabilities to read public media on a user's behalf on December 11, 2018
> Basic - to read a user’s own profile info and media in early 2020
> For your reference, information on the [new Instagram Graph API](https://developers.facebook.com/products/instagram/).
>
> [https://www.instagram.com/developer/](https://www.instagram.com/developer/)：トップページより引用

このQiitaに書かれているInstagram APIの利用は**ただちに**利用できなくなります。
今後はInstagram Graph APIを利用するように、と記載があります。

◆Instagram Graph API
[https://www.instagram.com/developer/](https://www.instagram.com/developer/)
※Instagram Graph APIは（一部）日本語でドキュメントが記載されていました。

今後はInstagramアカウントだけではなく、Facebookアカウント（厳密にはFacebookページ）に紐付く形になるようです。

今後はこのような突然のAPI配信の発表がないことを祈ります…。

---
2015年10月17日からInstagram APIを利用するアプリケーションを作成する場合、Instagamの審査が必要になりました。

> Instagram Platform and documentation update. Apps created on or after Nov 17, 2015 will start in Sandbox Mode and function on newly updated API rate-limits and behaviors. Prior to going Live, and being able to be used by people other than the developers of the app, these apps will have to go through a new review process. Please read the API documentation or the Change Log for more details.
> 
> Any app created before Nov 17, 2015 will continue to function until June 2016. After June 2016, the app will automatically be moved to Sandbox Mode if it wasn't approved through the review process. The previous version of our documentation is still available here.

https://www.instagram.com/developer/ へアクセスするとこの表示が出てきます。

要約としては **「Instagramのプラットフォームを更新したよ。InstagramのAPIを利用する場合はまず審査に出してね。2015年10月17日よりも前に登録したアプリケーションについては2016年の5月中に再度申請してね。審査に通らなかったもの、審査に出さなかったものについてはSandboxモードで動作するから気をつけてね！」** とのこと。

ということで、これからInstagram APIを使って何かアプリケーションをリリースする場合にはInstagramの審査が必要になりました。

期限である2016年6月が近づいてきているので、審査から審査完了までの流れをまとめてみたいと思います。

## Instagramの審査完了までの流れ
審査から審査完了までのおおまかな流れとしては以下の通りです。

1. **アプリケーションの情報を登録**
2. **Sandbox環境でのアプリケーション作成・動作確認**
3. **一通りの機能の実装ができたら、Instagramへ審査依頼**
4. **審査後、無事に通過したら、リリースへ**

今まではアプリの概要などを記載するだけで問題ありませんでしたが、実際に作ってみてからでないと審査を通せない、というのがかなりつらいですね。

では、流れに沿って詳しくみていきたいと思います。


### 1. アプリケーションの情報を登録
まずはアプリケーションの情報を登録する必要があります。

Instagramにログインした状態でこちらにアクセスします。

https://www.instagram.com/developer/clients/manage/

この画面の「**Registar a New Client**」を選択。

<img width="50%" src="https://qiita-image-store.s3.amazonaws.com/0/40009/cf53ee87-1472-9360-3ec6-e6d1bccfd30e.jpeg">

すると、入力フォームが出てくるので、諸々入力します。

- **Application Name**：アプリケーションの名前。ただし、"instagram","IG","insta"や"gram"がアプリ名に入っているとダメ。
- **Description**：アプリケーションの詳細
- **Company Name**：会社名
- **Website URL**：サイトのURL
- **Valid redirect URIs**：リダイレクトのURI。アプリケーションで認証後にリダイレクトするURIの指定。
- **Privacy Policy URL**：プライバシーポリシーのURL
- **Contact email**：連絡先のメールアドレス

なお、これらはあとで修正することも可能です。
プロトタイプのようなものではアプリケーション名が決まっていないこともありますからね。


### 2. Sandbox環境でのアプリケーション作成・動作確認
さて、次はSandbox環境でアプリケーションの作成・動作確認を行います。

アプリケーションで使用する「**Client ID**」「**Client Secret**」はアプリケーションの登録後に発行されるので、こちらを使います。

また、Sandbox環境では一部機能が制限がされています。

https://www.instagram.com/developer/sandbox/

- **Sandbox環境でログインできるアカウントは10アカウントまで**
- **認証したアカウント自身の最新の20件のメディアの取得が可能。また、それを取得できるのは認証した10アカウントのみ**
- **APIのRATE LIMITの数を制限**

上記のような制限がありますが、全てのAPIが解放されているという利点もあります。
後述しますが、本来は全てのAPIを使用する場合には審査が必要なのですが、Sandbox環境ということで審査不要で使用可能です。

なお、Sandbox環境で認証するアカウントの登録はアプリケーションの「**Sandbox**」のタブでアカウント名を登録します。

<img width="50%" src="https://qiita-image-store.s3.amazonaws.com/0/40009/07ec764f-1073-19d9-dc79-a181822aec92.jpeg">

これは相互認証となっていて、登録したアカウントでも認証する必要があります。
デベロッパーのトップページの上部にある「**Sandbox Invites**」に招待が来ているので、ここで認証するとSandboxアカウントとして利用することが可能になります。

https://www.instagram.com/developer/clients/sandbox_invites/

もちろん、アカウントの管理者のみでも問題ないですが、1人では動作確認が難しい場合もあるので、いろんな人に協力してもらうと楽になるかと思います。


### 3. 一通りの機能の実装ができたら、Instagramへ審査を依頼
実装を進めて、ある程度形になったら、Instagramへ申請しましょう。
審査は「**Permissions**」タブから申請することができます。

<img width="50%" src="https://qiita-image-store.s3.amazonaws.com/0/40009/15a103de-a0a0-d6b2-ab6f-40225a014791.jpeg">

まず最初に**"Which use case best describes your Instagram integration?"**という選択式の質問が表示されます。
いくつかケースが表示されますので、それに該当するものを選択してください。

回答によっては審査が不要な場合（Sandbox環境で使用して欲しい等）があります。
該当するものを選択してください。

審査が必要なケースの場合には**"How does your app use the Instagram API?"**の質問に対して詳細を記載する必要があります。

答える必要があるものは2つ、**"API use case"**と**"Video Screencast URL"**です。

**"API use case"**はAPIを利用するケース、アプリケーションで何をするか、なぜInstagramのAPIを使う必要があるかという質問になります。

もう1つが**"Video Screencast URL"**です。
これは**アプリケーションのデモ動画**のURLを入れるところになります。

Instagramの審査にはなんと動画審査が必須となりました。
登録したアプリケーションの機能(利用するAPIを使う部分)全てが録画されているものを提出することが必須となっています。きちんとした動画ではなく、アプリケーションを使っているところをスマホで撮影した動画でも問題ないと思います。

URLはYoutubeなどの決まりはなく、使っているところの動画が確認できればいいので、DropboxやGoogleDriveなどのサービスでも問題ないと思いますが、動画ファイルをアップしたURLは避けた方がいいと思います。

そして、上記とは別にPermissionごとの許可申請を行う必要があります。

Instagramは機能ごとにPermission、利用許可区分を分けています。
そして、そのPermissionごとに審査が必要となります。

- **basic**：基本となる機能。ログインしたアカウントのプロフィール情報、メディアを取得することが可能
- **comments**：コメントを投稿またはコメントの削除の許可
- **follower_list**：ユーザーのフォロワーの一覧の読み込み許可
- **likes**：メディアに対してのLikeやLike解除の許可
- **public_content**：全てのコンテンツ(フォロー、フォロワー関係なく)の読み込み許可
- **relationships**：アカウントのフォロー、アンフォローの許可

申請する際にはどうしてそのPermissionの許可が必要なのかを記載する必要があります。
(当然ながら)全て英語で記載する必要があります。

なお、作成しているアプリケーションの仕様や要件によっては使用しないものも出てくると思います。
その場合は、該当する部分の審査は行わずに、必要なものだけを申請すれば問題ないです。

詳しいことは以下のURL"Permission Review"に記載されています。

https://www.instagram.com/developer/review/


### 4. 審査後、無事に通過したら、リリース
Instagramの審査は1、2日程度で結果が出ました（自分の場合は）。
特に審査完了のメールは届かないので、直接管理画面へ見に行くしかないです。

審査が終了していたら、"Permissions"のタブ内で審査を結果が表示されているはずです。
審査が通ったものについては"Approved"、逆に審査が通らなかったものについては"Declined"と表記されています。

申請した全ての項目がクリア（Approved）になった時のみ、SandboxモードからLiveモード（本番環境）へ切り替えることができます。

審査が通らなかった場合にのみ、どうして審査が通らなかったかのフィードバック（「Feedback from your last submission」）が表示されますので、それを基に修正を行ったり、アプリの仕様や要件などを変更する必要があります。

なお、審査は何度でも申請することができます。


Instagramの審査は厳しい方だと(個人的には)思います。

まずはInstagramのポリシーをきちんと理解するところが始まりだと思います。
こういうアプリがあったらいいなー、と開発を優先して作っても、審査が通らなければ意味がありません。

https://www.instagram.com/about/legal/terms/api/


Instagramは全世界で使われているサービスで、個人的にもすごく好きなサービスです。
面白いサードパーティーアプリケーション、サービスがどんどん出てきたらいいな、と個人的には思っています。
（そうなったら、審査基準も緩和してくれたらいいな…とも思っています）


### 余談：審査を通さなくても問題ないケース
一部ケースでは審査を通す必要がないものもあります。
これについては以下のURLの"**Invalid use cases**"で紹介しています。

https://www.instagram.com/developer/authorization/

ただし、これについてはサポート対象外としているようなので、注意が必要です。

#### Widget Installs（ウィジェット）
ウェブサイトにウィジェットとして貼っているものについては審査を通す必要はない、という風にアナウンスしています。
ただ表示するだけなので、このためには審査を通す必要はなく、Sandbox環境での動作で表示をしなさい、ということですね。Sandbox環境のため、アカウントの最新20件のメディアが表示されるだけになります。

#### One-off Projects（1回限りのプロジェクト）
1回限りのプロジェクトに対しては審査は不要。Sandbox環境での動作になりますが、その範疇での動作で問題なければ、審査は不要ということです。
ただし、これについてはInstagramのポリシーが基になっていて、長く、多くの人に使ってもらえるようなものを推奨しています。複数のプロジェクトが関わっているものや複数のプラットフォーム上で動作するもの、ウィジェットなど多方面で使用されることを想定したものを作ってね、ということですね。

#### Content Display for Personal Website（個人のサイトでの表示）
ただ単に個人などのサイトでInstagramの写真を掲載するのであれば、審査は不要。
これも上記同様にSandbox環境での動作で表示を行うことを推奨しています。
ただし、Sandbox環境なので対象アカウントの最新20件までのメディア表示となります。

また、上記以外にもユースケースについても言及しています。

https://www.instagram.com/developer/authorization/