cocos2dxでiOSアプリ内レビューを実装した際のメモです。
※星を選択するとコメントもかけます。
実装
DE_BridgeCenter.mm
// アプリ内レビューする際のクッションページ
void DE_BridgeCenter::showReviewAlert(){
// クッション用のポップアップ文言ローカライズ
std::string _title = LanguageManager::getInstance()->getString("ios_review_popup_title");
NSString *title = [NSString stringWithUTF8String:_title.c_str()];
std::string _message = LanguageManager::getInstance()->getString("ios_review_popup_body");
NSString *message = [NSString stringWithUTF8String:_message.c_str()];
std::string _btn_cancel_mes = LanguageManager::getInstance()->getString("ios_review_popup_btn_cancel");
NSString *btn_cancel_mes = [NSString stringWithUTF8String:_btn_cancel_mes.c_str()];
std::string _btn_ok_mes = LanguageManager::getInstance()->getString("ios_review_popup_btn_ok");
NSString *btn_ok_mes = [NSString stringWithUTF8String:_btn_ok_mes.c_str()];
UIAlertController *alert = [UIAlertController alertControllerWithTitle: title
message: message
preferredStyle: UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle: btn_cancel_mes
style: UIAlertActionStyleCancel
handler: nil];
[alert addAction: cancelAction];
UIAlertAction *reviewAction = [UIAlertAction actionWithTitle: btn_ok_mes
style: UIAlertActionStyleDefault
handler: ^(UIAlertAction *action) {
goReviewAlert();
}];
[alert addAction: reviewAction];
// 親ViewContoller検索
UIViewController *baseView = [UIApplication sharedApplication].keyWindow.rootViewController;
while (baseView.presentedViewController != nil && !baseView.presentedViewController.isBeingDismissed) {
baseView = baseView.presentedViewController;
}
[baseView presentViewController:alert animated:YES completion:nil];
}
// アプリ内レビュー表示
void DE_BridgeCenter::goReviewAlert(){
float iOSVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (iOSVersion >= 10.3f) {
// iOS version 10.3以上はアプリ内レビューへ
if([SKStoreReviewController class]){
[SKStoreReviewController requestReview];
}
}
else {
// ストアへ誘導...iOS11からはSKStoreReviewControllerを推奨しているようなのであれですが。。
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:[NSString stringWithUTF8String:URL_REVIEW_APP]]];
}
}
あとは、cocos2dxのClassからshowReviewAlert()
を呼び出せば完成!
リクエストが成功しない場合の対処や、表示頻度の設定、適宜お願いします。。!(泣)
なぜかレビューポップアップが発火されない場合
- ネットワークにつながっていない
- ユーザーのスマホの設定による(iOS11以降?「設定」 > 「iTunes StoreとApp Store」 > 「App内評価とレビュー」で設定可
- レビューの表示制限にひっかかっている(1年に3回までしか表示できない?)
- iOSのバージョンが古い
- TestFlightで配信している (僕の環境では表示されるが、星を選択し「送信」ボタンがdisableになっており送信できないように制限されておりました。本番公開後はちゃんと押せるにようなってました)
実際実装してのよかった事
- いままで3ヶ月に1回程度でレビュー1件程度だったものが、実装後すぐにつき1ヶ月で2件。6倍!!?(※もちろんアプリなど条件によります。)
- レビューをつけるユーザーはだいたい、すでについているレビューを参考に星をつけてしまう傾向があるため、もともと総評が★2とかでも、先入観がないため高評価をつけてもらえる可能性がある!!?(その逆の可能性もありますが。)
- やっぱ画面遷移せずにレビューつけれるのは、ストレス少なくていい!
参考にさせて頂いた記事 (大変参考なりました!
また、Unityや、swift,objc版などの参考記事はあったのですが、cocos2dxでも使えるものがなかったので、
メモさせて頂きました。
swift版
https://qiita.com/asashin227/items/f0c44821020af6ee846d
https://qiita.com/yamataku29/items/afedb457e2fe7e20438c
objective-c版
Unity版
レビューが発火されない原因調査
https://apptopi.jp/2018/01/07/ios11-in-app-review/
https://qiita.com/s_higeru/items/db9ddb09d6adbac2da67
http://crossbridge-lab.hatenablog.com/entry/2017/06/14/113255