使用now.gg的Cocos登录模块,您可以在Cocos平台为您的应用/游戏实现now.gg登录。
要集成now.gg登录:
注意:您工程的最低Android SDK版本不能低于19。
now.gg的Cocos登录模块包含在下载包中(nowgg_sdk_cocos-1.2.6.2001.zip
)。
添加now.gg登录到您的cocos工程中:
导入登录模块后,应将所需的依赖项添加到工程中。
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.h
类中添加以下虚拟函数:
private: virtual void onLoginSuccess(string email, string token, string hostUrl) override; virtual void onLoginFailed(int code, string errorMsg) 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登录,可以使用以下两个流程之一:
通过这个流程,您可以实现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>"); }
通过这个流程,您可以实现now.gg登录并获取详细的用户和会话信息。
这是一个更安全的流程,它使用授权码(code)来生成 token
和 refresh_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)。
我们建议使用后端服务器来获取已登录用户的个人资料。但如果您的应用程序没有后端服务器,那么您可以使用以下章节来获取用户个人资料。
您可以查看我们的 示例实现,使用“设备上的”(’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
。使用高级登录流程:
一旦您有了授权码(code),将其发送到您的应用程序后端服务器,并使用 生成令牌API 以同now.gg服务器交换授权码取得 token
和 refresh_token
。
token
调用now.gg API(用户信息和会话信息)。refresh_token
以在令牌过期时获取新的 token
。现在您有了令牌,可以使用它来获取用户和会话信息。
如果 token
已过期,您可以通过 refresh_token
使用 生成令牌 API来生成它。
我们还在 下载包 中提供了一个示例工程。您可以参考这个工程来了解now.gg的登录流程。
该示例工程可以在 cocosSDKSample
目录找到。