Unity Asset "Rate Game Popup"の使い方 (和訳)

Unity Asset作家Gleyさんによる有料アセットのDocumentationを和訳するシリーズです。今回は｢Rate Game Popup｣というアセットです。

https://assetstore.unity.com/packages/tools/integration/rate-game-popup-android-ios-139131

こちらのセットにも同梱されています。

https://assetstore.unity.com/packages/tools/integration/mobile-tools-complete-game-132284

# このアセットでできること
- ユーザーにレビュー投稿を促すことで、レビュー獲得できる。
- たった1行のコードでレビュー催促のポップアップを表示させることができる。
- ポップアップのUIは｢5つ星形式｣と｢Yes/No形式｣の2種類から選べる。
- 縦持ち(Portrait)･横持ち(Landscape)に自動対応。
- 詳細な設定はすべて専用のウィンドウから設定するので、コーディング技術は必要ない。
- レビュー催促ポップアップを最適なタイミングで表示させるために、下記の指標をトリガーとして使える：
  - アプリを起動した回数
  - カスタムイベントの起動時
  - アプリ起動中の経過時間
  - 初回アプリ起動時から経過した時間
- ポップアップを2回目以降に表示させるための遅延機能もある。そのトリガーとしても上記の指標が使える。
- AndroidとiOSに対応。どちらも同じコードのままビルドできる。

# 設定ウィンドウの操作
## 1. 設定ウィンドウを開く
1. このアセット "Rate Game Popup" をインポートする。
2. Window > Gley > Rate Game を開き、設定ウィンドウを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1313392/a61450a7-ecd2-76b4-cb07-c9ba2bc327d4.png)

## 2. アプリIDの入力 (Your App IDs:)
iOS/Android用のAppIDを入力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1313392/07feace7-d562-072b-eeb0-83bd55e7709d.png)

## 3. 表示文のカスタマイズ (Cutomize popup text:)
ポップアップの選択肢タイプを｢5つ星｣か｢Yes/No｣から選ぶ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1313392/fe04d4ad-7d28-ef47-50a5-70cb39e1b941.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1313392/5df30c8e-b6eb-31ec-2bc0-86e9145bcad1.png)

### 3-1. 5つ星形式の場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1313392/a803c0d5-32ba-6e8a-283b-fad7adea6668.png)

|項目名|説明|入力例|
|---|---|---|
|Main Popup Text|メッセージ内容|What do you think about this game? / アプリの使い心地はいかがですか？|
|Send Button|Sendボタンに表示するテキスト|Send / 送信|
|Min stars to open store|何個以上の星を押せばレビュー画面に遷移するか|3|
|Not now Button|Not nowボタンに表示するテキスト|Later / あとで回答する|
|Never Button|Neverボタンに表示するテキスト|Never / 二度と表示しない|
- アプリを好まない(星の数を1や2にする)ユーザーに対して、わざわざストアのレビューページに遷移させる必要はない。Min stars to open storeは3以上にすることを推奨する。
- Send Button, Not now Button, Never Buttonの各欄を空欄にした場合、そのボタンはポップアップUI上で非表示になる。

|ボタン名|押下後の挙動|
|---|---|
|Send|以後このポップアップは再表示されない|
|Not now|以後このポップアップは再表示される|
|Never|以後このポップアップは再表示されない|

### 3-2. Yes/No形式の場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1313392/0e0923a1-6368-2ece-cec7-51a2c3368630.png)

|項目名|説明|入力例|
|---|---|---|
|Main Popup Text|メッセージ内容|What do you think about this game? / アプリの使い心地はいかがですか？|
|Yes Button|Yesボタンに表示するテキスト|It's Great / 良い|
|No Button|Noボタンに表示するテキスト|Needs Work / 悪い|
|Later Button|Laterボタンに表示するテキスト|Ask Later / あとで回答する|

Yes Button, No Button, Later Buttonの各欄を空欄にした場合、そのボタンはポップアップUI上で非表示になる。

|ボタン名|押下後の挙動|
|---|---|
|Yes|以後このポップアップは再表示されない|
|No|以後このポップアップは再表示されない|
|Later|以後このポップアップは再表示される|

## 4. 出現頻度の設定 (Show options:)
### 4-1. 初回表示時の設定 (First Show:)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1313392/41ea4270-fb14-edf9-a0b8-a86a55b571a2.png)

|項目名|説明|
|---|---|
|Use Sessions Count|ユーザーがn回アプリを開いたら、ポップアップを表示する|
|Use Custom Events|カスタムイベントがn回発生したら、ポップアップを表示する|
|Use In Game Time|ユーザーがn分間アプリを開いていたら、ポップアップを表示する|
|Use Real Time|アプリを初めて起動した時刻からn時間後に、ポップアップを表示する|
- カスタムイベントの作り方：コード中に"RateGame.Instance.IncreaseCustomEvents();"とマークしておく。そうすることで、そこの処理を通過した回数をカウントしてくれる。
- 必ずしも上記のトリガーを設定する必要はない。全て有効化してもいいし、全て無効化してもいいし、いくつかを組み合わせて使ってもいい。トリガーに設定した**すべての条件が達成された時**に初めて、ポップアップが表示されるようになっている。
- 上記のスクショの例では、｢ユーザーが2回以上アプリを起動し、3回以上カスタムイベントを達成し、20分以上アプリをプレイし、アプリの初回起動時から24時間以上経過したとき、初めてポップアップが表示される｣という設定内容になっている。

### 4-2. 遅延時の設定 (Postponed:)
このセクションでは、初回ポップアップ時にLaterボタンが押された時のために、ポップアップを再度表示させるタイミングを設定することができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1313392/8cc1f950-826b-e79f-8e55-3e07c974ac3a.png)
Postponedの設定は、First Showで設定したトリガーとは違っても構わない。
上記のスクショの例では、｢ユーザーが4回以上アプリを起動し、15分以上アプリをプレイした時に、次回のポップアップが表示される｣という設定内容になっている。この場合、カスタムイベントの回数と初回起動時からの経過時間は、もはや関係なくなる。

# Script作成
## 1. ポップアップを表示させる
### 1-1. 基本形
```C#
// レビュー催促のポップアップを表示させるメソッド：
// 設定ウィンドウで設定しておいた条件が全て達成された時にだけ呼び出される。
RateGame.Instance.ShowRatePopup();
```
### 1-2. コールバックつきver.
```C#
// レビュー催促のポップアップを表示させるメソッド（コールバックつき）：
RateGame.Instance.ShowRatePopup(PopupClosedMethod);


// ユーザーがレビュー催促のポップアップを閉じた時に呼ばれるコールバック：
private void PopupClosedMethod()
{
    Debug.Log("Popup Closed -> Resume Game");
}
```
### 1-3. コールバックつき（現在の回答状況も取得する）ver.
```C#
// レビュー催促のポップアップを表示させるメソッド（コールバックつき）：
RateGame.Instance.ShowRatePopupWithCallback(PopupClosedMethod);


// ユーザーがレビュー催促のポップアップを閉じた時に呼ばれるコールバック：
private void PopupClosedMethod(GleyRateGame.PopupOptions result) {
    Debug.Log("Popup Closed-> ButtonPresed: " + result + " -> Resume Game");
}
```
|resultの取りうる値|現在の回答状況|
|---|---|
|Rated|ユーザーはゲームを評価済み。|
|NotNow|ユーザーは｢あとで回答する｣ボタンを押下済み。|
|Never|ユーザーは｢二度と表示しない｣ボタンを押下済み。|

## 2. 条件達成に関わらず強制的にポップアップを表示させる

### 2-1. 基本形

```C#
// レビュー催促のポップアップを表示させるメソッド（強制的）：
// 設定ウィンドウで設定しておいた条件が全て達成されていなくても、とにかくポップアップを表示させる。
RateGame.Instance.ForceShowRatePopup();
```

### 2-2. コールバックつきver.
```C#
// レビュー催促のポップアップを表示させるメソッド（強制的･コールバックつき）：
// 設定ウィンドウで設定しておいた条件が全て達成されていなくても、とにかくポップアップを表示させる。
RateGame.Instance.ForceShowRatePopupWithCallback(PopupClosedMethod);


// ユーザーがレビュー催促のポップアップを閉じた時に呼ばれるコールバック：
private void PopupClosedMethod(GleyRateGame.PopupOptions result) {
    Debug.Log("Popup Closed-> ButtonPresed: " + result + " -> Resume Game");
}
```

## 3. その他の便利なメソッド
### 3-1. カスタムイベントのカウンター
```C#
// レビュー催促のポップアップを表示させるトリガーとして、カスタムイベントの回数をカウントしてくれるメソッド：
RateGame.Instance.IncreaseCustomEvents();
```
### 3-2. 条件が全て達成されたかどうかを返す
```C#
// 設定ウィンドウで設定しておいた条件が全て達成されているかどうかを返すメソッド：
// trueなら達成済み、falseなら未達成。
RateGame.Instance.CanShowRate();
```
# 参考
https://gleygames.com/documentation/Gley-RateGamePopup-Documentation.pdf