ちょっと目を離してる隙にどんどん仕様が変わっていくよ!!
iOS
if ( !UnityEngine.iOS.Device.RequestStoreReview() ) { yield return Ask(); // レビューするかどうか聞く if ( answer == 0 ) { string url = "itms-apps://itunes.apple.com/jp/app/idXXXXXXXX?mt=8&action=write-review"; Application.OpenURL(url); } }
「XXXXXXXX」はアプリごとに変える部分。(AppStoreのURLより)
iOSは10.3から専用のネイティブダイアログが強制されるようになったが、全ての端末が10.3以上であるとは限らないので、 RequestStoreReview() で分岐する必要がある。このネイティブダイアログは「レビューしてください!→☆☆☆☆☆ OK/キャンセル」というものなので、これが使える場合はレビューするかどうか聞く必要はない。
false が返ってくる場合は未対応端末なので、アプリ側でレビューするかどうかを聞く。
RequestStoreReview()の諸注意
- 呼び出した後、出てくるかどうかは OS 側で調整する。例えば、前回「いいえ」を押した場合はしばらく出てこなくなる。この設定はユーザ側も変えられる。
- 故に会話中にダイアログを出したい場合、文言に気をつけないと不自然になる。
- 戻り値は「レビューしたかどうか」には関係ない。
- Apple 側の想定としては、ゲームの合間に適当に何回も呼んでね! という感じだと思われる。
Android
yield return Ask(); // レビューするかどうか聞く if ( answer == 0 ) { Application.OpenURL( "market://details?id=XXXXXXXX" ); }
Android はシンプルに URL を開くだけ。「XXXXXXXX」はアプリごとに変える部分。(パッケージのID - com.illucalab.ham など)
まとめると
#if UNITY_IOS if ( !UnityEngine.iOS.Device.RequestStoreReview() ) #endif { yield return Ask(); // レビューするかどうか聞く if ( answer == 0 ) { #if UNITY_IOS string url = "itms-apps://itunes.apple.com/jp/app/idXXXXXXXX?mt=8&action=write-review"; #else string url = "market://details?id=XXXXXXXX"; #endif Application.OpenURL(url); } }
文言について
- 前述の通り、iOS は前後の文言に気をつけること。というか会話や説明の合間に出すことを推奨されていない。多分。
- iOS は「☆5にして!」という文言はガイドライン違反。Android はOK。
- 両 OS 共「レートしたかどうか」を取得することはできない。
- 英語では「Rate this game!」という表現になるので、UI で英語を使いたい場合は注意。「Review」は「審査」に近い意味合いになる。