【Unity】iOS / Android でレビューを促す。(2018年10月版)

 f:id:eiki_okuma:20181022194328p:plain

 ちょっと目を離してる隙にどんどん仕様が変わっていくよ!!

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」は「審査」に近い意味合いになる。