now.gg決済モジュール(Cocos専用)を使用することで、Cocosプラットフォーム上のゲーム内でアプリ内課金を実装することができます。
now.gg決済を統合する方法:
※プロジェクトのAndroid SDKの最低バージョンはバージョン19以下であってはなりません。
Cocos専用決済モジュールはダウンロードパッケージ(nowgg_sdk_cocos-1.2.6.2001.zip
)に含まれています。
now.gg決済モジュールをCocosプロジェクトに追加する方法:
now.gg決済モジュールがインポートされたら、必要な依存関係をプロジェクトに追加します。
if(ANDROID)
セクションに以下のコードを追加します:
list(APPEND GAME_HEADER proj.android/app/jni/nowggsdk/include/nowgg_sdk.h )
if(ANDROID)
セクションに以下のコードを追加します。これでnowggsdkがプロジェクトに追加されます:
add_library(nowggsdk STATIC IMPORTED) set_target_properties(nowggsdk PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/proj.android/app/jni/nowggsdk/${ANDROID_ABI}/libnowggsdk.a) target_link_libraries(${APP_NAME} nowggsdk)
gradle.properties
fileに以下の行を追加します:
android.useAndroidX=true
HelloWorldScene.h
クラスを見つけます。
#include "../proj.android/app/jni/nowggsdk/include/nowgg_sdk.h"
class HelloWorld : public cocos2d::Scene, public nowgg::NowGGSDKListener
HelloWorldScene
クラスに以下の仮想関数を追加します:
private:
virtual void onInitialized(bool success) override;
virtual void onPurchaseUpdated(const vector<nowgg::Product*> p) override;
virtual void onPurchaseCancelled(int code, string msg) override;
virtual void onPurchaseConsumed(string token) override;
※上記の仮想関数の定義をHelloWorldScene.cpp
に追加してください。
build.gradle
ファイルに以下の依存関係を追加します。
dependencies { implementation (files("libs/billingclient.aar")) implementation (files("libs/nowggsdk.aar")) implementation 'androidx.appcompat:appcompat:1.4.1' api 'com.google.code.gson:gson:2.8.6' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0' implementation 'com.squareup.retrofit2:converter-scalars:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' }
モジュールがインポートされ、依存関係が追加されたら、自身のアプリ/ゲームにnow.gg決済を実装します。
now.gg IAPサービスがデバイス上で利用可能かどうかを確認する方法:
bool isIAPAvailable = NowGGSDK::isNowGGIapAvailable(); 注意:
onInitialized
コールバック関数を使用して受け取ります。このステップでは、アプリ/ゲーム内でプロダクトIDを使用してアプリ内課金プロダクトを追加し、SDKを初期化します。
以下のように、追加したいすべてのプロダクトIDのベクトルを作成し、init関数に渡します:
void nowGGIAPInit() { bool isIAPAvailable = NowGGSDK::isNowGGIapAvailable(); if (isIAPAvailable) { vector<string> productIds {"coin1", "coin2", "coin3"}; NowGGSDK::init("PAYMENT_ID", productIds); } }
注意:
初期化に成功したら、アプリでプロダクトの詳細を取得できます。プロダクトの詳細(SkuDetails
)を取得するには、以下のようにgetProductDetails
関数を使用します:
vector<SkuDetails*> skuDetails = NowGGSDK::getProductDetails();
※getProductDetails
関数は、INIT
成功後にのみ呼び出すようにしてください。
購入が成功した後、以下のように、consume()
関数を使用して、購入済みのプロダクトをユーザーに割り当てることができます:
NowGGSDK::consume(<purchaseToken associated with a purchased product>);
注意:
PurchaseToken
を受け取ります。onPurchaseConsumed
コールバックが呼び出されます。now.gg決済では、アプリ内課金の認証にパブリックキーを利用し、購入の真正性を証明することができます。ユーザーにプロダクトを割り当てる前に、すべての購入を認証することをお勧めします。
購入の検証は、ローカルで行うことも、バックエンドサーバーを使用して行うことも可能です。ただし、購入の検証にはバックエンドサーバーを使用することをお勧めします。
以下のコードセグメントは、バックエンドサーバーを使用した購入の検証を示しています。詳細はサンプルプロジェクトを参照してください。
void VerifyValidSignatureOnBackendServer(std::string originalJson, std::string signature) { __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyValidSignatureOnBackendServer called with signature %s \n", signature.c_str()); cocos2d::network::HttpRequest* request = new cocos2d::network::HttpRequest(); request->setUrl("<your cloud url here>); request->setRequestType(cocos2d::network::HttpRequest::Type::POST); std::vector<std::string> headers; headers.push_back("Content-Type, application/x-www-form-urlencoded"); request->setHeaders(headers); request->setResponseCallback([](network::HttpClient* sender, network::HttpResponse* response) { if (!response->isSucceed()) { __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyValidSignatureOnBackendServer failed \n"); return; } __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyValidSignatureOnBackendServer success \n"); std::vector<char>* buffer = response->getResponseData(); char* json = (char*)malloc(buffer->size() + 1); std::string s2(buffer->begin(), buffer->end()); strcpy(json, s2.c_str()); __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyValidSignatureOnBackendServer response: %s \n", json); }); string data = "data=" + originalJson + "&signature=" + url_encode(signature); __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyValidSignatureOnBackendServer data:%s \n", data.c_str()); request->setRequestData(data.c_str(), strlen(data.c_str())); cocos2d::network::HttpClient::getInstance()->send(request); request->release(); }
ダウンロードパッケージには、バックエンドサーバーを使用して購入を検証するためのサンプル実装が含まれており、自身の実装を書き込むために使用することができます。
サンプル実装には以下が含まれています:
サンプルプロジェクトの中に、ローカルで購入を検証するためのサンプル実装が用意されています。これを使用して実装を書き込むことができます。
サンプル実装において:
PurchaseVerification
クラスのVerifyPurchaseLocally
関数を参照してください。ダウンロードパッケージにはサンプルプロジェクトも含まれています。now.gg決済を使用したIAPのフローを理解するために、このプロジェクトを参照することができます。
サンプルプロジェクトはパッケージのcocosSDKSample
ディレクトリに含まれています。
目次
目次
ドキュメント改訂版 1.0