
ちょっと目を離してる隙にどんどん仕様が変わっていくよ!!
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 側の想定としては、ゲームの合間に適当に何回も呼んでね! という感じだと思われる。
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」は「審査」に近い意味合いになる。