借助now.gg的Cocos支付模块,您可以为Cocos平台上的游戏实现应用内购买。
集成now.gg支付,请按如下步骤:
注意:工程的最低Android SDK 版本不得低于19。
now.gg的Cocos支付模块已经包含在下载包内 (nowgg_sdk_cocos-1.2.6.2001.zip
).
要在您的Cocos工程中添加now.gg支付模块:
导入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
文件中:
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
回调函数接收与now.gg IAP 服务可用性相关的响应。此步骤将允许您在应用/游戏中使用产品ID来添加应用内购买的产品,并初始化SDK。
创建一个包含所有想要添加的 productIds
的向量,并传递给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
目录中。