코코스용 now.gg 로그인 모듈을 통해 코코스 내에서 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 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 로그인 SDK와 관련된 응답은 HelloWorldScene.h
추가된 OnLoginSuccess
및 OnLoginFailed
콜백 함수를 사용하여 처리하실 수 있습니다.
유저가 성공적으로 로그인하면 OnLoginSuccess
콜백 함수를 통해 유저 이메일과 함께 요청된 토큰을 받게 됩니다.
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 로그인을 적용하고 보다 자세한 유저 및 세션 정보를 가져오실 수 있습니다.
이는 인증 코드를 사용하여 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
콜백 함수에서 오류 코드와 오류 메시지를 받게 되며 이후 받은 오류 메시지를 기반으로 해당 오류를 처리하실 수 있습니다.
“No nowGG account present(nowGG 계정이 없습니다)”라는 오류와 함께 로그인이 실패하는 경우 아래와 같이 런타임에 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
을 갖게 되며 해당 토큰을 사용하여 유저 프로필 정보를 가져올 수 있습니다.
해당 토큰을 앱의 백엔드 서버에 사용하고 로그인한 유저의 프로필을 가져오시는 것을 권장해 드립니다. 앱에 백엔드 서버가 없는 경우 다음을 통해 유저 프로필 정보를 호출하실 수 있습니다.
‘기기 내’ 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
를 사용하시기 바랍니다.설명:
token
과 refresh_token
을 받습니다.
인증 코드가 있을 시 코드를 앱 백엔드 서버로 보내고 토큰 생성 API를 사용하여 코드를 now.gg 서버와 교환한 뒤 token
과 refresh_token
을 수령합니다.
token
을 사용하여 now.gg API(유저 정보 및 세션 정보)를 호출합니다.token
이 만료될 때 새 토큰을 얻으려면 refresh_token
을 저장하시기 바랍니다.토큰 수령 후 이를 사용하여 유저 및 세션 정보를 가져오실 수 있습니다.
token
이 만료된 경우 토큰 생성 API를 사용하여 refresh_token
으로 토큰을 생성하실 수 있습니다.
다운로드 패키지에는 샘플 프로젝트도 포함되어 있어 이를 참조하여 now.gg 로그인 프로세스를 쉽게 이해하실 수 있습니다.
샘플 프로젝트는 cocosSDKSample
폴더에 포함되어 있습니다.
유저 계정 서비스
유저 계정 서비스
문서 Rev. 1.0