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