【Unity】[Android] ReviewManager で評価を促す

Android

UnityのAndroidアプリで ReviewManager を使用した評価ダイアログをアプリ実行中に表示する手順についてご紹介します。

どんないいアプリであっても、自分からストアへアクセスして評価をする人は少ないと思います。ストアでよりよい評価を受け、コンバーション率を上げることはより多くの利用者を増やせることにつながります。




開発環境

  • Unity 2019.4.18f1
  • Android 10

パッケージの導入手順

UnityにはAndroidのストア評価を要求するためのパッケージがすでに準備されています。まず、パッケージマネージャーを開いてパッケージを導入します。

以下のようにWindows-Package Managerを選択します。

パッケージマネージャーの起動

多くのパッケージがあり、一覧をダウンロードするのに時間がかかるようで、リストが表示されるにはしばらく時間がかかります。

表示されたら上部のプルダウンでMy Registriesを選択してGoogle Play In-app Reviewを選択します。

Google Play In-app Review( ReviewManager )のインストール

Installを選択するとインストールが開始します。以下のようにチェックが付けばInstall完了です。

Google Play In-app Review( ReviewManager )のインストール完了

評価リクエストするスクリプト実装

評価リクエストを表示するコード例を以下にまとめます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Google.Play.Review;
using System;
using UnityEngine.Events;

public class RateManager : MonoBehaviour
{

    [Serializable] public class OnViewedEvent : UnityEvent { }
    [SerializeField] OnViewedEvent _onViewedEvent = default;

    public void StartRate()
    {
        if (Application.platform == RuntimePlatform.Android) {
            // Android
            StartCoroutine(ShowReviewCoroutine());
        } else {
            Debug.Log("Request Store Review is not supported");
            _onViewedEvent.Invoke();
        }
    }

    IEnumerator ShowReviewCoroutine()
    {
        // https://developer.android.com/guide/playcore/in-app-review/unity
        var reviewManager = new ReviewManager();
        var requestFlowOperation = reviewManager.RequestReviewFlow();
        yield return requestFlowOperation;
        if (requestFlowOperation.Error != ReviewErrorCode.NoError) {
            // エラーの場合はここで止まる.
            _onViewedEvent.Invoke();
            yield break;
        }
        var playReviewInfo = requestFlowOperation.GetResult();
        var launchFlowOperation = reviewManager.LaunchReviewFlow(playReviewInfo);
        yield return launchFlowOperation;
        playReviewInfo = null; // Reset the object
        if (launchFlowOperation.Error != ReviewErrorCode.NoError) {
            // エラーの場合はここで止まる.
            _onViewedEvent.Invoke();
            yield break;
        }
        _onViewedEvent.Invoke();
    }

    public void AddViewedCb(UnityAction cb)
    {
        _onViewedEvent.RemoveAllListeners();
        _onViewedEvent.AddListener(cb);
    }
}

ShowReviewCoroutine()がリクエストを要求する処理になります。リクエストの表示は別スレッドで処理されるのでIEnumeratorが付いています。

最初にAddViewedCb()でコールバックを登録し、StartRate()を実行してください。レビューが終わったら登録済みのコールバックが実行されます。

なぜこのような作りにしたかというと、レビュー入力画面が表示されている間はアプリのUI更新が止まってしまうからです。なので、StartRate()を実行した後メインスレッドで画面遷移の描画などを行っていると、描画途中で止まってしまい、乱れた画が表示されてしまう可能性があります。

それを避けるために、メインスレッドはコールバックが呼ばれるまで待機して、レビューが終わったらUIの描画を再開することをお勧めします。

実機で動作確認するための準備

実機での動作確認する前にいくつか注意点があります。

UnityからBuild & Run での実行ではレビュー画面が表示されません。表示するためには実際にストアからダウンロードしたものを試す必要があります。

では、製品版としてリリースしないと動作が試せないのか?というとそういうことはありません。

内部テストとしてリリースすることで、限られたメンバのみ通常と同じようにストアからインストールして評価することができます。

内部テストリリース

内部テストはGoogle Play Console の以下メニューから行います。

新しいリリースを作成を選択すると、アプリのリリース画面になります。リリース名やリリースノートなど通常のリリースと変わりませんので、同じようにバイナリをアップロードして進めます。

テスターの追加

内部テストリリースを評価するためのテスターを追加します。内部テストのテスター数タブからメーリングリストの作成を選択します。

以下のようにリスト作成画面になります。メールアドレスの追加にアドレスを入れてEnterを押すとしたのリストにアドレスが追加されます。

追加されたら変更を保存して、リストをチェックすることで、メンバ追加は完了です。このリストに追加されたアカウントであれば、下のリンクをコピーからアプリをダウンロードできるストアに飛ぶことができます。

これで内部テストを製品版と同じようにリリースしてリリース作業は完了です。ストアに反映されるまでに少しタイムラグがありますので、注意してください。

USBデバッグをOFFする

私の場合、なぜか開発者向けオプションのUSBデバッグがONだと正しく動きませんでした。

機種依存の可能性もありますがUSBデバッグOFFにしておくことをお勧めします。(かなりハマりましたが、)

実機での動作確認

内部テストとしてリリースされたアプリをストアからインストールして動作確認します。実行すると以下のような評価をリクエストするダイアログが表示されます。

ユーザーは星を付けて評価します。評価を送信した後、任意でレビューを追加することもできます。

APIをコールするだけで表示できるので、手軽ですが、何も前触れなく唐突に表示されるの失礼なので私の場合は以下のように一段表示を置くようにしました。

使ってみた感想

非常に便利ですが、以下のような機能があるとありがたいです。

評価済みかどうかを確認する機能

ユーザーが評価を実施したのかしていないのかの状態を取得することができません。

もし評価されていれば評価ダイアログは出力したくないですし、評価されていなければまた評価ダイアログを表示するようにしたいところです。

定期的に評価リクエストを実行することで、未評価であればダイアログを表示、評価済みであればダイアログが表示されないという振る舞いになります。

しかし、評価をお願いする文言表示ををアプリで独自に実装していて、そのUIを表示すべきかいなかを判断するために、評価済みかどうかは知りたいところです。

表示させるタイミングを管理する機能

ダイアログを表示させる間隔を二日に一回、三日に一回といった決まった時間間隔にしたり、アプリ起動何回に一回といった起動回数間隔にしたりするとき、それらの管理はアプリで行わなければなりません。

こういう機能がプラットフォーム側にあると便利ですが。。。(調べてないのであるのかもしれません)

おわりに

手軽にアプリ評価を促せる便利な機能ですが、何も考えずにダイアログだけ表示させるとぶっきらぼうで不親切な印象になってしまいます。

アプリ独自のUIを組み合わせてユーザーが気持ちよく評価できるようなひと手間があるとよいかなと思いました。

また、表示間隔の管理や文言の管理などを行う機能をまとめてオブジェクト化しておくと他のアプリでも使いまわせて便利だと思います。

コメント

  1. […] […]

  2. キリン より:

    https://qiita.com/mogmet/items/459b8160b86a4ffd46fb

    「現在、ユーザー アカウントがアプリをレビューしていない。」が動く要件の一つらしいですよ

    私はうまくセット出来ずに悩んでおりますが。

タイトルとURLをコピーしました