【Unity】[iOS] RequestStoreReview で評価を促す

iPhone

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

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




開発環境

  • Unity 2019.4.18f1
  • Xcode 12.4
  • iOS 14.4

UnityでiOSアプリの評価をリクエストする実装

Unityにはすでにストアのレビューを促すためのAPIが備わっています。以下に評価をリクエストするためのスクリプトをまとめます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if !UNITY_IOS
using Google.Play.Review;
#endif
using System;
using UnityEngine.Events;

public class RateManager : MonoBehaviour
{

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

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    public void StartRate()
    {
        if (Application.platform == RuntimePlatform.Android) {
            // Android
            StartCoroutine(ShowReviewCoroutine());
        } else if (Application.platform == RuntimePlatform.IPhonePlayer) {
            // IPhonePlayer
#if UNITY_IOS
            UnityEngine.iOS.Device.RequestStoreReview();
            _onViewedEvent.Invoke();
#endif
        } else {
            Debug.Log("Request Store Review is not supported");
            _onViewedEvent.Invoke();
        }
        
    }

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

長々とかいてありますが、UnityEngine.iOS.Device.RequestStoreReview()単純に呼び出すだけでOKです。

なぜ、_onViewedEvent.Invoke();でにコールバックしているかというと、AndroidとiOSを共通のオブジェクトで管理したかったからです。

iOSはダイアログ表示がUIの更新と非同期で行われるため、ダイアログ表示中もバックで表示更新は続きます。

一方、Androidはレビューダイアログ表示中はアプリのUI更新が止まってしまい、更新中の画で止まると見た目がよくないです。

こういった兼ね合いで表示更新を同期するためにコールバックを用意しています。詳細はAndroidの説明をまとめたこちらの記事を参照いただければと思います。

実機での動作確認

UnityEngine.iOS.Device.RequestStoreReview()をコールしたタイミングで以下のような評価をリクエストするダイアログが表示されます。

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

ただし、XcodeからRunした場合は★を付けられるだけで評価を送信できないので注意してください。

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

後でを選択されると、ある程度時間をおいてから再度ダイアログを表示するようにしてみました。

使ってみた感想

簡単に実装できるのですが、使い勝手が悪い点もあります。

評価されたかどうかが確認できない

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

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

定期的にUnityEngine.iOS.Device.RequestStoreReview()を実行することで、未評価であればダイアログを表示、評価済みであればダイアログが表示されないという振る舞いになります。

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

表示させるタイミングの管理

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

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

おわりに

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

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

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

コメント