この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
アプリレビュー機能を実装する際に使ったAssetについて使い方を備忘録的にまとめます。
はじめに
皆さんはスマートフォン向けアプリを探しているとき、どこに目が行くでしょうか?
私はまずアイコンを見て、タイトルを見て、それから星の数を見ます。
または、アイコンやタイトルに惹かれて詳細画面に進んだ後に、星の数をチェックします。
皆さんご存知の通り、星の数はアプリに対する評価の高さを意味します。
もちろん、AppStore・GooglePlayStore共に、ユーザーが自由にレビュー出来るシステムなので、不当な評価をされている可能性も無くはないのですが、それでも星の数はおおよそアプリの評価を表します。
評価の低いアプリをわざわざインストールしたいと思うユーザーはいないでしょうし、似たような機能のアプリがあれば評価の高い方を選びたくなるのがユーザー心理だと思います。
今回は、そんなアプリの評価を高めるため、ユーザーに対してレビューを依頼する機能をUnityの有料Assetを用いて実装する方法をご紹介します。
アプリレビュー機能を実装するためのAsset
https://assetstore.unity.com/packages/tools/integration/ratebox-ios-android-rate-review-popup-75190
今回ご紹介するAssetは、こちらの「RateBox」です。
2018年3月末現在の価格は$12.95、だいたい1400円ぐらいです。
Unityのバージョン5.0.0以降に対応しています。
このRateBoxは、iOSのバージョン10.3.3以上のiOS内蔵のレビュー機能に対応しています。
iOS10.3.3以上内蔵ウィンドウについて
RateBoxの話を進める前に、アプリのレビュー機能に関して気をつけなければならないことがあるのでお話しておきます。
iOSのバージョンが10.3.3以上の場合、AppleはiOSのSDKが提供するレビュー依頼用のウィンドウを表示することを義務付けています。
このウィンドウは、アプリから離れることなくウィンドウ上で星の数を選んでレビューを行うことが出来るもので、ユーザー的にも煩わしい遷移を行うことなく手軽にアプリの評価が行えるものになっています。
iOS10.3.3に対応するアプリなのに、このiOS内蔵のレビューウィンドウを使用しない場合、審査のリジェクト対象となる可能性があるため、RateBoxに備わっている機能を用いて対応することが望ましいでしょう。
RateBoxの使い方
無事Assetを購入し終えたら、Unityにインポートしましょう。
デフォルトではデモシーンやそれに伴うプレハブが付属してきますが、デモシーンを活用せずともドキュメントを読むことで大雑把な使い方は理解できるため、アプリ容量等を気にしている場合はインポートしなくても問題ありません。
以下、そのドキュメントや実装の経験談をもとに、簡単に使い方をまとめていこうと思います。
※今回は、アプリのレビュー誘導のためにオリジナルのウィンドウを表示させたいケースを想定して説明していきます
- 自作ウィンドウクラスの作成
あなたの好きなデザインのウィンドウを作成しましょう。
ウィンドウのプレハブを作成し、スクリプトをアタッチします。
スクリプトには必ずIAlertPlatformAdapter
インターフェースを継承させ、各種メソッドをオーバーライドする必要があります。
重要なのはIAlertPlatformAdapter.Show
とIAlertPlatformAdapter.Dismiss
で、前者はウィンドウを表示する時に呼ばれる関数、後者はウィンドウを閉じる時に呼ばれる関数です。ウィンドウを表示したり消したりする処理はここで行うといいでしょう。
もちろん、ウィンドウに設置した「レビューする」「後回し」「二度としない」などの各種ボタンを押したときのコールバックも記述してボタンにアタッチしましょう。 - 初期化
RateBox.Instance.Init
を、レビュー依頼を出したい画面より前に実行します。(アプリの起動時に行うのが良さそう)
第一引数にはレビューボタンを押したときに遷移させるURLを指定します。プラットフォームがiOSならAppStoreのレビューページ、AndroidならGooglePlayStoreのレビューページを指定します。
その他、第二引数以降は任意で以下のパラメータを渡します。- 第二引数:
RateBoxConditions
クラスのインスタンス - 第三引数:
RateBoxTextSettings
クラスのインスタンス - 第四引数:
RateBoxSettings
クラスのインスタンス
- 第二引数:
これらのクラスに関しては、次の項目で詳しく説明します。
- RateBoxの設定 RateBoxには、レビュー依頼ウィンドウを表示する際の条件などの設定を行うためのクラス
RateBoxConditions
、RateBoxTextSettings
、RateBoxSettings
が存在します。
RateBoxConditions
クラスはレビュー依頼ウィンドウを出す条件に関するプロパティを持ち、それぞれの設定項目は以下の通りです。MinSessionCount
RateBox.Instance.Initの呼ばれた回数がMinSessionCount
以上のときにレビュー依頼が表示されるようになります。MinCustomEventsCount
カスタムイベント(任意の条件)のカウンターの数がMinCustomEventsCount
以上のときにレビュー依頼が表示されるようになります。カウンターはRateBox.Instance.IncrementCustomCounter()
で増やすことが出来ます。(例:ミニゲームを1回クリアするごとにカウンターを1増やし、5回クリアした時点で表示する)DelayAfterInstallInSeconds
インストールされてからの秒数がDelayAfterInstallInSeconds
に指定した秒数以上のときに表示されるようになります。DelayAfterLaunchInSeconds
アプリを起動してからの秒数がDelayAfterLaunchInSeconds
に指定した秒数以上のときに表示されるようになります。PostponeCooldownInSeconds
一度レビュー依頼ウィンドウが表示されてから、次に表示可能になるまでの秒数です。デフォルトでは22時間(=79200秒)になっています。RequireInternetConnection
trueのとき、インターネット接続がされている状態でのみ表示します。
RateBoxTextSettings
クラスは以下のプロパティを持ちます。それぞれ意味はプロパティ名そのままで、渡した値がRateBox備え付けのUIに反映されます。Title
Message
RateButtonTitle
PostponeButtonTitle
RejectButtonTitle
ただし、 RejectButtonTitle
だけは重要で、これが空だと「二度と表示しない」ボタンを押した時のコールバックが機能しなくなってしまいます。自作ウィンドウで「二度と表示しない」ボタンを表示したい場合は、適当な文字列を渡すといいでしょう。
RateBoxSettings
クラスは、UseIOSReview
プロパティを持ちます。これがtrueのとき、RateBoxは端末のOSを参照し、iOS10.3.3以上の場合はiOS内蔵のレビュー依頼ウィンドウを表示します。その場合、自作のウィンドウを用意していてもiOS内蔵のウィンドウが優先的に表示されます。 ここで注意する必要があるのが、仮にこの設定を行っていても、ビルドに用いるXCodeのバージョンが8.3未満の場合、iOS10.3に対応していないためiOS内蔵のレビュー依頼ウィンドウが表示できない点です。 また、iOS内蔵のレビュー依頼ウィンドウはSKStoreReviewController
というiOSのSDKを使用しており、365日あたり3回までしかレビュー依頼ウィンドウが出せません。これは、Apple側の「ユーザーに執拗にレビューを求めるのは良いことではない」という考えに基づいた仕様です。 このため、iOS10.3.3以上の場合、RateBoxConditions
の条件を完全にクリアした状態でレビュー依頼ウィンドウを出そうとしても表示されないことがあります。従って、Appleは「ボタンを押したら必ずレビュー依頼ウィンドウが出る」など、ユーザーの動作に直結したレビュー依頼の出し方をすることは望ましくないと表明しています。(詳細はこちら)
4.レビュー依頼の表示
レビュー依頼を出したいタイミングで RateBox.Instance.Show()
を実行することで、RateBoxがレビュー依頼のウィンドウを表示してくれます。
引数も存在しますが、引数はRateBoxに備え付けのUIでレビュー依頼ウィンドウを出す際の各種テキストなので、自作ウィンドウの場合はウィンドウ側で文字列の制御をし、引数は渡さなくても大丈夫です。
また、RateBox.Instance.ForceShow()
という関数も存在し、こちらは RateBoxConditions
で設定した条件を無視して必ず表示させる関数です。使用の際は、前述のiOS10.3.3以上のSDKの制限に注意しましょう。
5.レビューのコールバック
残念ながら、レビュー依頼ウィンドウで「レビューする」を押した場合、実際に遷移先でレビューしたかどうかのコールバックは存在しません。
すなわち、少なくともRateBoxでは「レビューしてくれたらアイテムを差し上げます」タイプの実装は出来ないということです。
ただ、そもそも報酬を目当てにレビューさせることは各ストアの規約に違反する恐れがあるため、望ましいことではありません。
6.統計情報の削除
RateBoxConditions
で設定した条件の統計情報(カスタムイベントの回数など)は、 RateBoxStatistics
クラスに保持されています。
何らかの目的でこの統計情報をリセットしたい場合、 RateBox.Instance.ClearStatistics()
を実行します。
ちなみに、この統計情報はアプリのバージョンが更新されたり、アンインストールされたりすると削除されます。
このため、「二度と表示しない」を押したり、カスタムイベントを達成して表示されない状態になったユーザーに対して、アプリのアップデートをすることで再度レビュー依頼を出すことが出来ます。
さいごに
基本的な使い方は以上になります。
最後に、RateBoxのドキュメントに記載されているこの一文を載せておきます。
Call Show function when user is satisfied (level up, complete the stage, receive bonus, etc).
レビュー依頼は、適切なタイミングで表示しないとかえってアプリの評価を落とすことに繋がりかねません。
ユーザーがレビューをしたくなるタイミングを考え、アプリの構造・システムに応じて、最適なレビュー依頼を行えるように各種条件を使いこなしましょう。