エンジニア

アプリ内レビューをCocos2d-xに導入してみる

投稿日:2022年10月25日 更新日:

ユニバーサルゲーム事業部でクライアントエンジニアを担当している上原です。
今回はCocos2d-xで作成したアプリにアプリ内レビューを導入する際の基本的な実装内容や注意点などを紹介します。

アプリ内レビューとは?

アプリ内レビューはアプリから離れずストアの評価をつけることのできる機能です。
ストアごとにAPIが提供されており、任意のタイミングで呼び出してレビューを促すことができます。
Google PlayはGoogle Play In-App Review API、 App StoreはSKStoreReviewControllerを使用して実装します。

実装方法

Step.1 ネイティブコードを書く

APIはCocos2d-x上で呼ぶことができないため、それぞれのOS側でコードを書いていきます。

Android側

public class ReviewHelper {
    public static void reviewAlert()
    {
        final ReviewManager manager = ReviewManagerFactory.create(Cocos2dxActivity.getContext());
        Task<ReviewInfo> request = manager.requestReviewFlow();
        request.addOnCompleteListener(new OnCompleteListener<ReviewInfo>() {
            @Override
            public void onComplete(@NonNull Task<ReviewInfo> task) {
                if (task.isSuccessful()) {
                    ReviewInfo reviewInfo = task.getResult();
                    Task<Void> flow = manager.launchReviewFlow(Cocos2dxHelper.getActivity(), reviewInfo);
                    flow.addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task1) {
                            //動作確認用
                            Toast.makeText(Cocos2dxActivity.getContext(), "レビュー終了", Toast.LENGTH_SHORT).show();
                        }
                    });
                } else {
                    // レビューAPI失敗
                }
            }
        });
    }
}

iOS側
Cocos2d-xと連携を取るためiOS側の実装にはObjective-C++を使用しています。

void ReviewHelper::appReviewAlert()
{
    if (@available(iOS 14.0, *))
    {
        //iOS14以降
        UIWindowScene *scene = [UIApplication sharedApplication].keyWindow.windowScene;
        [SKStoreReviewController requestReviewInScene:scene];
    }
    else if (@available(iOS 10.3, *))
    {
        //iOS10.3以降
        [SKStoreReviewController requestReview];
    }
}

Step.2 JavaをC++へ連携する処理を書く

先ほど書いたAndroid側の関数はそのまま使うことができません。
Cocos2d-xにおけるJNI(その2)を参考にネイティブコードと連携する処理を書いていきます。

extern "C" {
    void ReviewHelper::appReviewAlert()
    {
        JniMethodInfo methodInfo;

        if (!JniHelper::getStaticMethodInfo(methodInfo, "com/example/testApp/ReviewHelper", "reviewAlert", "()V"))
        {
            return;
        }
        // Javaのプログラムを呼び出す
        methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID);

        // 解放処理
        methodInfo.env->DeleteLocalRef(methodInfo.classID);
    }
}

Step.3 Cocos2d-x側で呼び出す

最後にレビューを促したいタイミングで呼び出します。

ReviewHelper::appReviewAlert();

動作確認

iOSの場合はXcodeで実行するだけでリリース後に近しい挙動を確認できますが、Androidの場合は実行しただけではアプリ内レビューのUIが表示されません。
UIを表示するには内部アプリ共有か内部テストトラックを使用する必要があります。
今回は内部アプリ共有を使用してAndroidでのアプリ内レビューの動作確認を行いました。

内部アプリ共有の注意点

内部アプリ共有はGoogle Play Consoleのアップロードページでビルドをテスターに共有するだけですが、いくつか注意点があります。

  • 端末のアカウントが動作確認をするアプリの認定テスターに登録されている必要がある
  • 共有するビルドはデバッグビルドの必要がある
  • 端末のGoogle Playの内部アプリ共有の設定をオンにする必要がある

上記のいずれかを忘れて動作確認できないことがあるため、内部アプリ共有をする際はご注意ください。

まとめ

今回はアプリ内レビューを導入する際の基本的な実装内容や注意点などを紹介しました。
アプリ内レビューは実装や動作確認においていくつかハマる部分があるため、この記事がスムーズな実装の一助になれれば幸いです。

本記事では省きましたがストアごとに表示される回数や表示の制約があるため、導入の際は公式ドキュメントの確認をお願いします。

採用情報

ワンダープラネットでは、一緒に働く仲間を幅広い職種で募集しております。

-エンジニア
-, ,

© WonderPlanet Inc.