Cocos登录

使用now.gg的Cocos登录模块,您可以在Cocos平台为您的应用/游戏实现now.gg登录。

要集成now.gg登录:

  1. 为cocos下载和导入now.gg的登录模块。
  2. 添加所需的依赖项。
  3. 部署now.gg登录插件到您的工程。

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

下载并导入模块

now.gg的Cocos登录模块包含在下载包中(nowgg_sdk_cocos-1.2.6.2001.zip)。

添加now.gg登录到您的cocos工程中:

  1. 下载包 含有Cocos登录模块的最新版本。
  2. 下载该软件包后,请将登录模块导入到工程中。请执行以下操作:
    • 把下载包的 nowggsdk 目录复制到您的 proj.android > app > jni 目录,如下所示。
      cocos_nowgg
    • libs 目录从下载包复制到您的 proj.android > app 目录,如下所示。
      cocos_nowgg

添加依赖项

导入登录模块后,应将所需的依赖项添加到工程中。

  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.h 类中添加以下虚拟函数:
    private:
         virtual void onLoginSuccess(string email, string token, string hostUrl) override;
         virtual void onLoginFailed(int code, string errorMsg) 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登录。

要初始化now.gg登录,可以使用以下两个流程之一:

1. 基本登录流程

通过这个流程,您可以实现now.gg登录并获取用户的基本个人资料。

要启动流程,请使用 client_id 调用登录函数,如下所示:

NowGGSDK::login(<client id from nowgg Studio>);

注意:now.gg登录的相关响应可以使用 OnLoginSuccess and OnLoginFailed 回调函数接收,您在之前已将它们添加到 HelloWorldScene.h

登录成功

在用户成功登录后,您可以在 OnLoginSuccess 回调函数中获取请求的令牌(token)和用户的电子邮件。

void HelloWorld::onLoginSuccess(string email, string token, string hostUrl) {
     __android_log_print(ANDROID_LOG_DEBUG, "TAG", "HelloWorld::onLoginSuccess called : %s : %s \n", email.c_str(), token.c_str());
      VerifyToken(token, "<client-id from nowgg Studio>");
 }

2. 高级登录流程

通过这个流程,您可以实现now.gg登录并获取详细的用户和会话信息。

这是一个更安全的流程,它使用授权码(code)来生成 tokenrefresh_token

使用 client_id 和授权码作为附加参数来调用 NowGGSDK 类的登录函数,如下所示:

NowGGSDK::login(<client id from NowGG Studio>, “code”);
登录成功

在用户成功登录后,您将在 OnLoginSuccess 回调函数中,从 token 参数中获取请求的授权码,以及用户的电子邮件。如下所示:

void HelloWorld::onLoginSuccess(string email, string token, string hostUrl) {
    __android_log_print(ANDROID_LOG_DEBUG, "TAG", "HelloWorld::onLoginSuccess called : %s : %s \n", email.c_str(), token.c_str());
    }

登录失败

本节列出了登录失败的场景。同时适用于基本登录流程高级登录流程

如果登录失败,您将在 OnLoginFailed 回调函数中收到错误码和错误消息。您可以根据接收到的错误消息进一步调查此错误。

没有nowGG账户存在

如果登录失败并出现错误“No nowGG account present”,您可以调用 NowGGSDK 类的 addNowGGAccount 函数在运行时添加帐户,如下所示。

void HelloWorld::onLoginFailed(int code, string errorMsg) {
     __android_log_print(ANDROID_LOG_DEBUG, "TAG", "HelloWorld::onLoginFailed called : %d : %s \n", code, errorMsg.c_str());
     NowGGSDK::addNowGGAccount();
 }

使用个人资料 | 基本登录流程

成功登录后,您现在获得了 token。您可以使用此令牌来获取用户个人资料(User Profile Information)。

我们建议使用后端服务器来获取已登录用户的个人资料。但如果您的应用程序没有后端服务器,那么您可以使用以下章节来获取用户个人资料。

重要信息

  • 不要使用用户的电子邮件地址或用户ID来与您应用程序的后端服务器通信。
  • 而应将用户的ID token发送到您的后端服务器,并在服务器上验证该令牌。

获取个人资料

您可以查看我们的 示例实现,使用“设备上的”(’on-device’)API调用获取已登录用户的个人资料。

例如,要获取用户个人资料,包括登录用户的userId,您可以调用 VerifyToken 函数。您将收到用户的解码数据作为响应。

下面的代码演示了这个实现:

void HelloWorld::VerifyToken(string token, string client_id) {
     __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyToken called : %s \n", token.c_str());

     cocos2d::network::HttpRequest * request = new cocos2d::network::HttpRequest();
     request - > setUrl("https://now.gg/accounts/oauth2/v1/verify-token");
     std::vector < std::string > headers;
     headers.push_back("Content-Type:application/x-www-form-urlencoded");
     request - > setHeaders(headers);
     request - > setRequestType(cocos2d::network::HttpRequest::Type::POST);
     request - > setResponseCallback([ & , this](network::HttpClient * sender, network::HttpResponse * response) {
         if (!response - > isSucceed()) {
             __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyToken failed \n");
             return;
         }
         __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyToken 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", "VerifyToken response: %s \n", json);
     });

     string data = "token_type=id_token&token=" + token + "&client_id=<your client-id>";
     __android_log_print(ANDROID_LOG_DEBUG, "TAG", "VerifyToken data:%s \n", data.c_str());
     request - > setRequestData(data.c_str(), strlen(data.c_str()));
     cocos2d::network::HttpClient::getInstance() - > send(request);
     request - > release();
 }

当获取了用户详情后,您应该将这些信息保存在应用程序的数据库中,并在下次用户启动应用程序时使用保存的信息跳过登录流程。

注意:

  • 建议您不要使用电子邮件来识别用户,应使用 userId
  • 如果您的应用程序有后端服务器,您可以调用 验证令牌API,并从响应中的已解码用户数据取得userId。

获取用户和会话信息 | 高级登录流程

使用高级登录流程:

  • 您的应用程序通过向您的后端服务器发送授权码(code)以在客户端获得授权。
  • 您的应用程序后端服务器然后与now.gg服务器交换授权码以获取自己的令牌和refresh_token。
    • 这使得您的应用程序后端服务器能够在用户离线时对now.gg服务器进行API调用。

注意:

  • 此更安全的登录验证流程只适用于具有后端服务器的应用程序
  • 如果您的应用程序没有后端服务器,您可以继续使用 基本登录流程

1. 生成令牌和刷新令牌

一旦您有了授权码(code),将其发送到您的应用程序后端服务器,并使用 生成令牌API 以同now.gg服务器交换授权码取得 token 和 refresh_token

  • 使用 token 调用now.gg API(用户信息和会话信息)。
  • 存储 refresh_token 以在令牌过期时获取新的 token

2. 使用令牌获取用户和会话信息

现在您有了令牌,可以使用它来获取用户和会话信息。

  • 要获取用户信息,您可以使用 UserInfo API。
  • 要获取会话信息,您可以使用 SessionInfo API。

3. 刷新令牌

如果 token 已过期,您可以通过 refresh_token 使用 生成令牌 API来生成它。

示例工程

我们还在 下载包 中提供了一个示例工程。您可以参考这个工程来了解now.gg的登录流程。

该示例工程可以在 cocosSDKSample 目录找到。

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