FlutterアプリをPlayストアに登録してみた

リリースビルドも出来たので、ついにPlayストアに登録です。
まずはクローズドα版をリリースしてみます。

なお、この情報は2020/05/01現在のものであり、将来にわたって内容を保証するものではありません。
(GoogleさんがUI変えたりステップ変えたら該当しなくなっちゃいますよってこと^^;)

# Playストアの「リリース」の考え方
まずこれを少し説明します。
「リリース」＝本番公開、と思っていると、多分混乱するので。

## 1.リリースの種類

「リリース」には、いくつか種類があります。

|トラック|リリースの種類|内容|審査の有無|
|:--|:--|:--|:--|
|製品版|製品版|いわゆる本番への公開。すべてのAndroidユーザーが(端末の使用条件などに合致していれば)プレイストアからダウンロードして利用できる。|有り|
|オープン|ベータ版|ベータプログラムに参加するAndroidユーザーが、テスターとして利用できる。テスターには上限人数が設定できる。課金などは通常通り行われる|有り|
|クローズド|アルファ版|テスターに登録されたユーザーのみが、専用のオプトインURLからアプリをダウンロードして利用できる。|有り|
|内部テスト版|内部テスト版|社内のチームなどで共有する用。|無し※1|
|内部テスト版|内部アプリ共有|社内のチームなどで共有する用。「内部テスト版」との違いは、「Debugビルド」がアップロード可能/バージョンコードを上げなくても再アップ可能/アップロードしたApkが「ライブラリ」として管理できない/共有リンクが60日で切れる。|無し|

なので、「製品版を公開」というリリースがあれば、「クローズドアルファ版を公開」というリリースがあります。

オープントラックやクローズドトラック、そして内部テスト版リリースは、オプトインURLを共有して「テスターにオプトイン」してもらった後、Playストアからダウンロードして使って貰います。(テスターに該当するユーザーのみストアアプリに表示されます)

各トラックから、製品版リリースを作成することが出来ますが、「内部テスト版」は「アルファ版として公開」が次のステップになります。また「内部アプリ共有」からは他のトラックに公開することは出来ません。

そしてクローズドトラックには、「アルファ版」以外にも作ることが出来るようです。
テスターの種類を分けたいときとか、でしょうか？

※1 審査無しと書いてありますが、実際にはテスター向けのオプトアウトURLが発行されるまで時間かかります。他のトラックと体感的に変わりませんでした。チーム内は基本的に「内部アプリ共有」を使った方が早いでしょう。「内部テスト版」は、会社のそれ以上の層とか品質管理チームなどに見てもらうののバージョン管理用、と思っておくと良いでしょう。社内のファイル共有サーバーに全アプリファイルを置いてバージョン管理しておく必要がなくなるわけですね。ただし上げられるのがreleaseビルドだけなので、デバッグには使えませんが・・・

## 2.公開の手順

後で詳しくやりますが、ざっと流れを書いておきます。

- リリースを公開したいトラックを選ぶ
- そのトラックで[リリース]を作成する
- ApkまたはApp Bundleをアップロードする
  - この時署名済みの情報で、アップロード鍵が登録される
- [リリース]を**公開**する

ここの説明では、「リリース」と「公開」の意味が違ってくるので、よく注意してください。


# Playストアコンソールにアプリを登録
まずはアプリを登録しないと話になりません。

が、あっちこっちのページに移動しながらの登録になるので、初めてだとかなり戸惑いそうです。

## 1.Playストアコンソールへのログイン
Playストアコンソールへは、こちらからログインします。
https://play.google.com/apps/publish/?hl=ja

Googleアカウントか、G Suiteアカウントがあればそのまま入れます。

## 2.アプリの作成

- 左側のメニュー[すべてのアプリ]から、[アプリの作成]をクリック

![playconsole_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/ff3f82c7-9bc6-73bc-75a3-4e3a713c166f.png)

- ストアで表示されるアプリ名を入力
- ストアの掲載情報を入力
    - タイトル、簡単な説明、詳しい説明をテキストで入力
        - 関連ワードを並べただけのようなのは後でリジェクトされる可能性があります
- 画像および映像を登録
  - 必須なのは以下の画像
     - 高解像度アイコン(512x512)
     - スクリーンショット(最低2枚)
          - 1080x1920とかじゃないとはじかれるので注意
     - フィーチャー グラフィック(1024x500)
         - Googleが広告してくれる？時用の画像らしいです
- アプリのタイプを選択
  - アプリ or ゲームの二択
- アプリのカテゴリを選択
  - リストから選択
- 連絡先情報
  - メールアドレスが必須。Playストア上で公開されるアドレスです。

いったんここまでで、[未公開版を保存]をクリックします。
そうしないと、他の情報はセットできません。

## 3.タグをセット

[タグを管理]から、関連有りそうなタグをリストから5つまで選べます。
あんまりたくさんないですね・・・

## 4.Apkをアップロードする

え、もう？と思った？そうなんです。もう必要なんです。

### (1)製品版以外の任意のトラックでリリースを作成する

え、もう？？と思った？そうなんです。もう必要なんです(大事なことなのでry)。
だってApkをアップロードするには、リリース管理から、なんだもの。

- 左側のメニュー[アプリのリリース]をクリック
- (例)クローズドアルファ版の[管理]をクリック
  - [リリースを作成]をクリック
     ![playconsole_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/615bf451-eab1-bd28-4c3e-4f82ea0a5afc.png)

- Googleアプリ署名を使う場合は、そのまま[次へ]をクリック
  - オプトアウトしても良いが、その場合のUIが酷くて迷うし、証明書の紛失対策のためにも、ここは使用するに指定しておいた方が無難。

- ApkまたはApp Bundleをアップロードする
  - debugビルド(debugable=true)、またはデバッグ証明書で署名されたものではアップロードできません 

- [保存]をクリック
- [確認]をクリック
  - 警告があれば、一応クリックして確認して下さい。
 
## 5.レーティングを設定する

- 左側のメニュー[コンテンツのレーティング]をクリック
- 内容を読んで、[次へ]をクリック
- レーティング報告を受けるメールアドレスを入力
- アプリのカテゴリを選択
  - アプリ登録画面で選んだのとは違うので注意
- 暴力表現について等、アンケートに1つずつ回答する
  - 正直に入力する。例えば殺人事件の謎解きなどは暴力表現に当たると判断される可能性も有る
- [アンケートを保存]をクリック
- [レーティングを算定]をクリック
- [レーティングを適用]をクリック

## 6.アプリのコンテンツを設定する

- 左側のメニュー[アプリのコンテンツ]をクリック
- **プライバシーポリシー**は、必要があれば設定する
  - 何もユーザー情報を取得しておらず、13歳以上がターゲットの場合は無くても可能
  - ログインにメールアドレスなどを取得する場合はあった方が無難
- **広告**の[開始]をクリックして設定する
- **アプリのアクセス権**の[開始]をクリックして設定する
- **ターゲット ユーザーおよびコンテンツ**の[開始]をクリックして設定する

## 7.価格と配布を設定する

- 左側のメニュー[価格と配布]をクリック
- 有料か無料かを選ぶ
  - 無料にしたアプリは後から有料に出来ません
- 公開する国を選ぶ
  - 多言語対応していないならオフにするのもありですが、諸外国在住の日本人の方を弾いてしまいます
- 同意事項の各項目を読み、同意する場合はチェックする
  - **コンテンツ ガイドライン**と**米国輸出法**は必須です
- [未公開版を保存]をクリック

これでようやく、アプリの[リリース]の作成に戻れます。

# リリースを公開する

先ほど作成したリリースを見に行くと、「公開されていないXX版のリリースがあります」となっているはずですので、それを公開状態にします。

- [リリースを編集]をクリック
- [確認]をクリック
- 内部テストの場合:[内部テストとして段階的な公開を開始]をクリック

# テスターを登録する

任意のメールアドレスをテスターに登録し、[保存]する。
※オープン/クローズドトラックのテストを終了するときは、テスターを削除する


お疲れ様でした。これで公開準備が完了しました。
あとはGoogleさんの処理を待ちます。

# 公開完了を待つ
公開が完了するまで、しばらく待ちます。
※内部テスト版であっても、何かやっているようで、少々時間がかかります。

ダッシュボードのページで「公開待ち」となっているのが消えるのを待ちます。
公開中になると、「テスターの管理」のところに、**オプトイン URL**が表示されます。(数時間かかる可能性も有るとのことなので、PCの前でじっと待つのはナンセンスかと。一晩寝て起きたら、ちょうど良かったですw)
このリンクを、先ほどテスターに登録したメールアドレスに送るなどして共有し、オプトインして貰います。

# テスターがオプトインしてインストールする方法

オプトインURLをクリックすると、オプトインするかどうかのページが表示されるので、[オプトインする]をクリックします。

その後、Playストアアプリを起動すると、**マイアプリ＆ゲーム**ページのタブの一番右に、**ベータ版**というのが増えています。

|![playstore_beta.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/d85964de-ccba-4fce-2af8-2b172072bbec.png)|
|:--|

そこに、テスター参加できるアプリが表示されているので、インストールしてテストして貰います。
なお、デバッグ版などがインストール済みだと、上書きインストールできないので、必ずアンインストールします。

# トラックのアップデート

## 1.同一トラック内でのアップデート
内部アプリ共有以外の[リリース]は、Apkを更新したいときには、**バージョンコードを上げる必要があります**

すなわち・・・

クローズドアルファ版のversionCode=1を公開後、不具合を修正したので更新したい。
→versionCode>1にしたApkが必要。

## 2.異なるトラックでのリリース

異なるトラックでも、**同じversionCodeのApkを登録出来ません**

すなわち・・・

クローズドアルファ版のversionCode=1を公開後、問題なかったので、そのまま、オープンベータ版で公開したい
→オープンベータ版には、versionCode>1のApkが必要。

とにかく、AndroidでApkをリリースに再登録するなら、**versionCodeは上げなきゃだめ**というのを覚えておく必要があります。

なお、内部テスト版/クローズド/オープンの各トラックも、製品版トラックと同様、アプリのアップデートがあると(=versionCodeを上げたビルドがあると)、更新通知が届きます。

## 3.Flutterでのバージョン付け

`pubspec.yaml`で行っています。

```yaml:pubspec.yaml
version: 1.0.0+1
```

その上にコメントが書いてあるので要約すると、OS別に以下の箇所に設定されるようです。

|OS|build-name(1.0.0など)|build-number(+NのNの部分)|
|:--|:--|:--|
|Android|versionName|versoinCode|
|iOS|CFBundleShortVersionString|CFBundleVersion|

コマンドラインから付けることも出来ます。

```console
$ flutter build apk --build-name=1.0.1 --build-number=2
```

こうすると、`pubspec.yaml`の値を上書きしてくれます。

# 製品版を公開する

オープン/クローズドトラックからは、[製品版としてリリース]ボタンがあるので、直ぐに製品版を公開できます。この場合は、Apkの再登録をしないで公開できます。

内部テスト版は、[アルファ版としてリリース]のみが可能です。その先は、通常のクローズドトラックと同様の扱いになります。

# アプリは削除出来ない

一度どこかのトラックで「公開」してしまったアプリは、Playコンソールから削除出来ません。
「公開停止中」にすることは出来ますが、その後も削除は出来ず「すべてのアプリ」には残り続けます。

私もテストで作成したアプリがいくつか残ってしまっています^^;

公開停止にするには、左側のメニューの[ストアでの表示]-[価格と配布]から、「非公開」に設定して保存するだけです。



# 感想

Googleさんの開発者登録をしてから、気付いたら10年近く経っていました。
アプリを個人で公開するのはこれが初めてです。遅すぎ?^^;
とはいえ、Flutterの勉強がてら作ったものなので、UIは酷いしはっきり言ってターゲット層が狭いし、まず使って貰えないだろうと思います・・・

ソースコードを公開することも考えたのですが、Githubリリースページにrelease.apkが上がっちゃってるので、ちょっと別の手段を考えないとですねえ・・・

# 参考サイト

Flutterのバージョン付け情報の参考になりました
https://backport.net/blog/2019/09/01/flutter_android_app_version/