Cocos支付模块

借助now.gg的Cocos支付模块,您可以为Cocos平台上的游戏实现应用内购买。

集成now.gg支付,请按如下步骤:

  1. 下载并导入Cocos支付模块。
  2. 添加需要的依赖项。
  3. 在您的工程里实现now.gg支付。

注意:工程的最低Android SDK 版本不得低于19。

下载并导入模块

now.gg的Cocos支付模块已经包含在下载包内 (nowgg_sdk_cocos-1.2.6.2001.zip).

要在您的Cocos工程中添加now.gg支付模块:

  1. 下载包 中包含了最新的Cocos now.gg 支付模块。
  2. 下载之后,将支付模块导入到您的工程中,需执行以下操作:
    • 将下载包中 nowggsdk 目录复制到 proj.android > app > jni, 如下图所示。
      cocos_nowgg
    • 将下载包中的 libs 目录复制到 proj.android >app 目录下,如下图所示。
      cocos_nowgg

添加依赖项:

导入now.gg支付模块后,您现在应该将所需要的依赖项添加到您的工程中。

  1. 找到位于工程根目录中的 CMakeLists.txt 文件。
    • 将以下代码添加到CMakeLists.txt文件中的 if(ANDROID) 部分:
      list(APPEND GAME_HEADER
            proj.android/app/jni/nowggsdk/include/nowgg_sdk.h
            )
      
    • 接下来,将以下代码添加到CMakeLists.txt文件中的 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)
    • 最后,将以下代码添加到位于 proj.android 目录下的 gradle.properties 文件中:
      android.useAndroidX=true
      
  2. 在下载包中的 cocosSDKsample > classes 中找到 HelloWorldScene.h
    • 引入 now.gg_sdk.h
      #include "../proj.android/app/jni/nowggsdk/include/nowgg_sdk.h" 
      
    • 继承 public nowgg::NowGGSDKListener
      class HelloWorld : public cocos2d::Scene, public nowgg::NowGGSDKListener
      
  3. 现在,在 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 中添加上述虚函数的定义。

  4. proj.android > app 目录中,找到 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支付。

1. 检查now.gg IAP是否可用

要检查now.gg IAP服务在您的设备上是否可用,请执行以下操作:

bool isIAPAvailable = NowGGSDK::isNowGGIapAvailable();

注意:

  • 使用 onInitialized 回调函数接收与now.gg IAP 服务可用性相关的响应。
  • 如果设备上有可用的now.gg IAP服务,将返回成功的布尔值。
  • 当设备上的IAP服务可用时,您才能继续now.gg IAP的实现。

2. 实现now.gg IAP

  1. 添加产品Id和初始化SDK

    此步骤将允许您在应用/游戏中使用产品ID来添加应用内购买的产品,并初始化SDK。

    创建一个包含所有想要添加的 productIds 的向量,并传递给init函数,如下所示:

    void nowGGIAPInit()
     {
     bool isIAPAvailable = NowGGSDK::isNowGGIapAvailable();
     if (isIAPAvailable)
     {
     vector<string> productIds {"coin1", "coin2", "coin3"};
    
     NowGGSDK::init("PAYMENT_ID", productIds);
     }
     }
    • 在示例中,我们为”PAYMENT_ID”添加了三个 IAP 产品,它们的productIds为”coin1″,”coin2″和”coin3″。
    • 同样地,如果您在nowStudio中添加了其它产品(具有相应的产品ID),您也可以根据您的实现将它们添加进来。

    注意:

    • PAYMENT_ID 是您应用的唯一标识符。
    • 您在 nowStudio 添加的每个应用程序都会生成一个唯一的 PAYMENT_ID
      • 在nowStudio中的应用详情(App Details)章节可以找到相应的 PAYMENT_ID。- 更多信息
  2. 获取产品详情

    成功初始化后,您可以在应用程序中获取产品详情。要获取产品详情(SkuDetails)请使用函数 getProductDetails 函数,如下所示:

    vector<SkuDetails*> skuDetails =  NowGGSDK::getProductDetails();

    注意:只有在INIT 成功后,您才能调用 getProductDetails 函数。

  3. 发起购买

    当您获取产品详情之后,可以通过产品ID调用 purchase() 函数以发起购买,如下所示:

    NowGGSDK::purchase(<product id of the product>, "inapp");
    

    注意:

    • ProductId 是您在nowStudio中为特定应用(App Id)定义的 应用内购买产品 的唯一标识符。
    • 产品价格从您在 nowStudio 中创建的 价格模板 中获取的。
    • 目前,我们仅支持 ‘inapp’ 的产品类型。订阅产品即将推出。
  4. 将购买的产品分配给用户

    购买成功后,您将使用如下所示的 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 类:位于下载包中的 CocosSDKSample >Classes 目录。它包含了一个示例代码,用于将购买数据和签名发送到后端服务器。
  • Server.py:单独位于下载包中。它包含了运行本地服务器和执行后端验证的示例Python代码。

本地验证

我们在示例工程中提供了一个示例实现,用于在本地验证购买,您可以使用提供的示例来编写自己的实现。

在示例实现中:

  • 您可以参考 PurchaseVerification 类中的 VerifyPurchaseLocally 函数。

示例工程

我们还在 下载包 中提供了一个示例工程。您可以参考此工程来了解使用now.gg支付的IAP流程。

示例工程包含在 cocosSDKSample 目录中。

×
文本已复制到剪贴板
copyLinkText
有疑问?请通过以下方式联系我们: dev-support@now.gg