Expoで作成したアプリをGoogle Playに申請するまで（2019/11~12時点）

[App Store版の記事](https://qiita.com/mildsummer/items/e98b1b8e4ea7f72b9899)と同様に、Expoで作成した最低限のアプリをGoogle Playに申請する流れに関してまとめます。

今回私が作成し申請したアプリは[こちら](https://play.google.com/store/apps/details?id=qr.attendance.manager.nodokayamamoto.com)のFirebaseとカメラを使用したアプリです。

# Google Play Developper登録

Google Playにアプリを公開するには、GoogleアカウントとGoogle Play Developerとしての登録が必要です。

Google Play Developer
https://developer.android.com/distribute/console

こちらの「ログイン」ボタンから新規登録して支払い情報を入力してください。
App Storeと違う点は年額ではなく最初に$25かかるだけであるというのと、デベロッパー登録のみに関しては審査がないというところです。

# Google Play Consoleで新規アプリを作成

デベロッパー登録が完了したら、[Google Play Console](https://play.google.com/apps/publish/)を開き、「アプリの作成」ボタン→言語・アプリ名を入力してアプリ情報を作成します。

<img width="1435" alt="googleplay.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514229/f8350807-561d-cfff-e381-7b38baf082f4.png">

# app.jsonを編集

まずは[ドキュメント](https://docs.expo.io/versions/latest/workflow/configuration/)を参考にしながら、app.jsonに必要な情報を追加します。

`icon`や`splash`はiOSと共通

```json:app.json(部分)
    "icon": "./assets/icon.png",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#00c2ad"
    },
```

Android向けにアイコンなどを追加します。

```json:app.json(部分)
    "android": {
      "package": "[パッケージ名]",
      "adaptiveIcon": {
        "backgroundColor": "#00c2ad",
        "foregroundImage": "./assets/adaptiveicon.png"
      },
      "permissions": [
        "CAMERA",
        "READ_EXTERNAL_STORAGE",
        "WRITE_EXTERNAL_STORAGE"
      ]
    },
    "notification": {
      "icon": "./assets/notificationicon.png",
      "color": "#00c2ad"
    },
```

パッケージ名はiOSのbundleIdentifierと同じように、ドメインを使って世界的に固有のものを使用します。

[アダプティブアイコン](https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive?hl=ja)はAndroid独自のアイコン規格で、ランチャー側でマスク形状を変えたりアニメーションなどをつけることができるものです。
アダプティブアイコンがサポートされている端末においてはこれを設定していないアプリはアイコンの周りに白い余白が出てしまいます（[参考](https://backport.net/blog/2018/02/17/adaptive_icon/)）。
前面の画像（foregroundImage）と後景の画像（backgroundColor（デフォルトは白） あるいは backgroundImage）で構成され、
Expoの設定ではforegroundImageに1024x1024pxの透明pngファイル、背景色（backgroundColor）あるいはbackgroundImageに1024x1024pxのpngファイルを指定すればOKです。私が作成したforegroundImageは以下の画像ですが、このように中央に要素を配置するようなデザインの場合、様々な形状に合わせるためにある程度余白を取っておく必要があります。

![adaptiveicon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514229/fd7b9765-b7b7-c8ef-01ac-60ec4ce08c59.png)

Expoではデフォルトでは全ての権限への許可が設定されていて、そのままだとインストールする際に必要以上の権限をユーザーに求めてしまうことになりますので、`permissions`に必要な分だけ記載しましょう。
今回私が申請したアプリはカメラとFirebase（内部的にAsyncStorageを使用）を使用するので、`CAMERA`、`READ_EXTERNAL_STORAGE`および`WRITE_EXTERNAL_STORAGE`を許可しています。

通知アイコンについては[こちらの記事](https://qiita.com/mildsummer/items/9dbfac3bf2ef857ca74f#android%E3%81%AEnotification%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%99%E3%82%8B)を参考にしてください。

# ビルドする

app.jsonに必要な設定を追加したら、Android Studioをインストールした上で、Android向けにビルドします。

```console
$ expo build:android
```

最初にビルドする際は、このように証明書（keystore）を新しく生成するか既存のものを使うかどうかの選択肢が出てきます。

```
[exp] No currently active or previous builds for this project.

Would you like to upload a keystore or have us generate one for you?
If you don't know what this means, let us handle it! :)

  1) Let Expo handle the process!
  2) I want to upload my own keystore!
```

通常は1)でそのままExpoに任せてしまって大丈夫です。ただし、後々アップデートする際には同じkeystoreが必要なので、(これも同じ環境で開発する場合は通常意識しなくても大丈夫ですが)keystoreを安全な場所にバックアップして置くことが推奨されています。

```
$ expo fetch:android:keystore
```

上記のコマンドを使うと、keystoreの情報が表示され、ディレクトリに.jksファイルが生成されます。
これをpublicなリポジトリにアップしたりしないよう注意して保存しましょう。

ビルドが完了し、apkファイルへのリンクが表示されたらダウンロードし完了です。

# アプリ情報を入力する

[Google Play Console](https://play.google.com/apps/publish/)を開き、アプリ情報を入力します。

<img width="296" alt="googleplay.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514229/e50a91f1-cfe4-54c8-a2c6-a085f7738d7b.png">

右側メニューのチェックマークが付いている部分を順に入力していきます。

まずは「ストアの掲載情報」で基本的な情報を埋めていきましょう。
タイトルや説明文などのほか、最低限以下のものが必要です。

* アイコン→ 512x512pxのPNG画像（Google Playで表示されます）
* スクリーンショット→ 1辺の長さ320px~3840pxのJPGまたはPNG画像 **少なくとも2種類**
* [フィーチャーグラフィック](https://developer.android.com/distribute/best-practices/launch/feature-graphic?hl=ja)（ストアで大きめに表示されるバナー）→ 横1024 x 縦500のJPGまたはPNG画像（↓スクショを使って適当に作っておきました）
![featuregraphic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514229/8e6a1f32-2889-00d5-6f2e-0fe598f686da.png)
* プライバシーポリシー→ 今回はURLを送信しないというチェックがありますが、Expoでは必須（[広告IDを送信しているため](https://forums.expo.io/t/how-to-stop-transmitting-android-advertising-id/13838/12)）

プライバシーポリシーは気になりますが、[App Store版の記事](https://qiita.com/mildsummer/items/e98b1b8e4ea7f72b9899#app-store-connect%E3%81%A7%E5%BF%85%E8%A6%81%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E6%83%85%E5%A0%B1%E3%82%84%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%E3%81%AA%E3%81%A9%E3%82%92%E5%85%A5%E5%8A%9B)と同じくそれほど厳しい感じではない気がします（もちろんそれなりのサービスを運用するのであれば別ですが）。

「価格と配布」で価格、配布する国、同意事項などを入力します。ここで広告を含むかどうかを選択したら、「アプリのコンテンツ」でターゲット年齢層を入力することができます。

残るは「コンテンツのレーティング」と「アプリのリリース」ですが、「コンテンツのレーティング」でアンケートに回答するにはapkファイルをアップロードする必要があります。
「アプリのリリース」で任意のトラック（そのまま公開する場合は製品版）から「管理」→「リリースを作成」し、ドロップエリアにapkファイルをドラッグ&ドロップしてアップロードします。

<img width="1124" alt="googleplay.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514229/614e886d-86b3-c7c6-8f05-c08ee512a51c.png">

アップロードが完了し、「コンテンツのレーティング」で全ての質問に答えたら、全ての必要な情報が入力できたことになります。
その後先ほど作成したリリース画面から確認→公開へ進めばアプリの申請が完了します。

# 審査

申請が完了すると、ダッシュボードには公開中と表示されますが、しばらくすると以下のように審査中と表示されるようになります。

<img width="500" alt="googleplay.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514229/bad03f53-e711-d409-3c34-b104e99fec18.png">

今までにExpoで作成したアプリをアップデートを含め３回申請しましたが、問題ない場合でも審査の完了には数時間から数日と幅があるような気がします。
そして無事に審査が完了したら、このようにIARCのレーティングを知らせるメールでもって伝えられます。
<img width="870" alt="googleplay.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514229/62e3e45d-fab4-84b6-f831-1051ae20cb36.png">

公開されたアプリはGoogle Play Consoleのダッシュボード→「GOOGLE PLAYで表示」で確認できます。

以上、Google PlayでのExpoアプリ申請の大まかな流れでした。
App Storeでの申請のようにアップロード作業などが縛られていないのと、最低限用意するスクリーンショットが少ないため比較的簡単に感じるのではないでしょうか。