코코스용 now.gg 결제 모듈을 통해 코코스 플랫폼 게임 내에 인앱 구매를 적용하실 수 있습니다.
방법:
중요: 프로젝트의 최소 안드로이드 SDK 버전은 19보다 높아야 합니다.
코코스용 now.gg 결제 모듈은 다운로드 패키지(nowgg_sdk_cocos-1.2.6.2001.zip
)에 포함되어 있습니다.
방법:
now.gg 결제 모듈 임포트 후 프로젝트에 필요한 종속성을 추가합니다.
if(ANDROID)
에 다음 코드를 추가합니다.
list(APPEND GAME_HEADER proj.android/app/jni/nowggsdk/include/nowgg_sdk.h )
if(ANDROID)
에 다음 코드를 추가합니다.
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
파일에 아래를 추가합니다.
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를 초기화하실 수 있습니다.
아래와 같이 추가하려는 모든 productId
의 벡터를 생성하고 이를 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();
중요: INIT 성공 시에만 getProductDetails를 호출합니다.
구매가 성공적으로 완료되면 아래와 같이 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
폴더의 패키지에 포함되어 있습니다.
목차
목차
문서 Rev. 1.0