はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】「Google Play In-app Review」を使ってAndroidでiOSのようにゲーム内レビューを実装する

はじめに

2020年8月あたりにIn-app ReviewというAPIがAndroidに実装され、ゲーム内にレビューのポップアッグができるようになったようです。
android-developers.googleblog.com

またUnity公式がこちらのAPIをUnityで使えるようにできるパッケージを用意してくれているので、今回はそちらの使い方を紹介したいと思います。
developer.android.com

パッケージ導入

まずはPackage ManagerからExternal Dependency Manager for Unityをインストールします。

f:id:hanaaaaaachiru:20210119231852p:plain
パッケージ


無事インストールできると、Package ManaganrにGoogleのパッケージがたくさん追加されているはずです。

その中からGoogle Play In-app Reviewを見つけインストールを行えば準備は完了です。

f:id:hanaaaaaachiru:20210119233217p:plain
Google Play In-app Review

コード

iOSのときは一行でOKでしたが,こちらはユーザー情報の取得と,エラー処理を少し書く必要があります。

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

public static class ReviewClient
{
#if UNITY_ANDROID && !UNITY_EDITOR
        private static ReviewManager _reviewManager;

        static ReviewClient()
        {
            _reviewManager = new ReviewManager();
        }
#endif

    public static IEnumerator RequestPlayReviewInfo(Action<PlayReviewInfo> onCompleted)
    {
        // ユーザー情報を取得する()
#if UNITY_ANDROID && !UNITY_EDITOR
            var requestFlowOperation = _reviewManager.RequestReviewFlow();
            yield return requestFlowOperation;
            if (requestFlowOperation.Error != ReviewErrorCode.NoError) yield break;
            var playerReviewInfo = requestFlowOperation.GetResult();
            onCompleted?.Invoke(playerReviewInfo);
#else
        Debug.Log("Request PlayerReviewInfo.");
        onCompleted?.Invoke(null);
        yield break;
#endif
    }

    public static IEnumerator Review(PlayReviewInfo info)
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        var launchFlowOperation = _reviewManager.LaunchReviewFlow(info);
        yield return launchFlowOperation;
        if (launchFlowOperation.Error != ReviewErrorCode.NoError) yield break;
#else
        Debug.Log("Execute Review.");
        yield break;
#endif
    }
}

このようなコードを配置した後、以下のように使います。

public class ReviewTest : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(ReviewClient.RequestPlayReviewInfo(info => StartCoroutine(ReviewClient.Review(info))));
    }
}

※今回はコルーチンで行いましたが、TaskUniTaskを使えばもう少しスマートに書けるはずです。

注意すること

PlayReviewInfoオブジェクトは一定期間のみ有効です。キャッシュするのはあまり得策とは言えないでしょう。(短い時間ならOKかも?)

また今回のレビュー機能はGoogle Playからダウンロードしたアプリのみでしか機能しません。

ですので、ただビルドしたものをスマホに入れても動かないことに注意してください。