レーティングしてもらうために出すダイアログ。
定番は
iRate。
分かりやすい説明の
記事。
iRate.h
iRate.mm
の2ファイルを置くだけで良い。
設定内容として以下のようなコードを起動直後に行っておく。
[[iRate sharedInstance] setAppStoreID:APP_ID];
[[iRate sharedInstance] setUsesUntilPrompt:1]; //1回起動でプロンプト出す
[[iRate sharedInstance] setEventsUntilPrompt:1]; //1回イベント通過でプロンプト出す
[[iRate sharedInstance] setDaysUntilPrompt:2.f]; //「あとで」の場合、2日後に再度プロンプト出す
[[iRate sharedInstance] setMessageTitle:@"AppStoreレビュー"];
[[iRate sharedInstance] setMessage:@"このアプリをAppStoreでレビューしませんか?"];
[[iRate sharedInstance] setRateButtonLabel:@"いますぐレビューする"];
[[iRate sharedInstance] setRemindButtonLabel:@"あとで"];
[[iRate sharedInstance] setCancelButtonLabel:@"レビューしない"];
とある画面を一定回数通ったらダイアログを出す、をしたいときは
[[iRate sharedInstance] logEvent:NO];
というのを呼べばいい。設定した内容に応じて、ダイアログを出してくれる。
ただしこれも、開発中(APP_IDが存在しない)ときはダイアログが出ないので注意。(後述)
自分で明示的に呼び出すこともできて、
[[iRate sharedInstance] promptForRating];
とすれば良い。必ずダイアログが出る。
また、レーティング済みかどうかは
[[iRate sharedInstance] ratedAnyVersion];
で分かる。
ただしこれは実際にApp Storeに書き込んだかどうかではなく、アプリ内で保存している変数値でチェックしていることに注意。
- (void)setRatedThisVersion:(BOOL)rated
{
[[NSUserDefaults standardUserDefaults] setObject:(rated? self.applicationVersion: nil) forKey:iRateRatedVersionKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
さて、コンパイルに失敗する場合があるが、それはARCが有効になっていないからかも。
このページを参考にして対応しよう。
問題はAPP_ID。アプリを申請したときに出てくる固有のID。これはサブミット作業を進めておかないと取得されない。
実際には、APP_IDでなく、バンドルIDでもレビュー画面に飛べる。
だからAPP_IDがなくてもいいんだけど、ぶっつけ本番になるから確認したいところ。
多分、サブミット作業をバイナリアップロード前(情報登録)のところまで進めておけば、APP_IDが発行されるんで、それを入れておくところまでやっておこう。
APP_IDまで入れた状態で、しかしまだAppStoreにページが存在していない状態(URLは決定しているけどね)で、
[[iRate sharedInstance] logEvent:NO];
を呼び出すと、ログに以下の文章が出る。
iRate could not find this application on iTunes. If your app is not intended for App Store release then you must specify a custom ratingsURL. If this is the first release of your application then it's not a problem that it cannot be found on the store yet
つまり、ダイアログは表示されなかったけど、AppStoreにページがないだけだから安心して、ということだ。
提出前のチェックとしては、このメッセージを信じて実装完了としよう。
PR