로그인 모듈 (코코스)

코코스용 now.gg 로그인 모듈을 통해 코코스 내에서 now.gg 로그인을 사용하실 수 있습니다.

방법:

  1. 코코스용 now.gg Login 모듈을 다운로드하고 임포트합니다.
  2. 필수 종속성을 추가합니다.
  3. 프로젝트에 now.gg 로그인을 적용합니다.

중요: 프로젝트의 최소 안드로이드 SDK 버전은 버전 19보다 낮아서는 안됩니다.

모듈 다운로드 및 임포트

코코스용 now.gg 로그인 모듈은 다운로드 패키지(nowgg_sdk_cocos-1.2.6.2001.zip)에 포함되어 있습니다.

방법:

  1. 최신 버전의 코코스용 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
            )
      
    • 이후 nowggsdk를 프로젝트에 추가하기 위해 CMakeLists.txt 파일의 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)
    • 마지막으로 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 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 로그인 SDK와 관련된 응답은 HelloWorldScene.h 추가된 OnLoginSuccessOnLoginFailed 콜백 함수를 사용하여 처리하실 수 있습니다.

로그인 성공

유저가 성공적으로 로그인하면 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>");
 }

2. 고급 로그인 프로세스

해당 프로세스를 통해 now.gg 로그인을 적용하고 보다 자세한 유저 및 세션 정보를 가져오실 수 있습니다.

이는 인증 코드를 사용하여 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(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을 갖게 되며 해당 토큰을 사용하여 유저 프로필 정보를 가져올 수 있습니다.

해당 토큰을 앱의 백엔드 서버에 사용하고 로그인한 유저의 프로필을 가져오시는 것을 권장해 드립니다. 앱에 백엔드 서버가 없는 경우 다음을 통해 유저 프로필 정보를 호출하실 수 있습니다.

중요

  • 현재 로그인한 유저를 앱의 백엔드 서버에 전달하기 위해 유저의 이메일 주소나 유저 ID를 사용하시지 마시고 대신 유저의 ID 토큰을 백엔드 서버로 보내고 서버에서 토큰을 인증하시는 것을 권장해 드립니다.

프로필 정보 호출

‘기기 내’ 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를 가져올 수 있습니다.

유저 및 세션 정보 호출 | 고급 로그인 프로세스

설명:

  • 앱 백엔드 서버에 인증 코드를 보내고 클라이언트 측에서 앱이 인증됩니다.
  • 이후 앱 백엔드 서버는 인증 코드를 교환하여 now.gg 서버에서 자체 tokenrefresh_token을 받습니다.
    • 이를 통해 앱 백엔드 서버는 유저가 오프라인일 때 now.gg 서버의 API를 호출할 수 있습니다.

중요:

  • 이는 백엔드 서버가 있는 앱에만 적용할 수 있는 보다 안전한 로그인 인증 프로세스입니다.
  • 앱에 백엔드 서버가 없는 경우 여기를 따라 기본 로그인 프로세스를 사용하실 수 있습니다.

1. 토큰 생성 및 갱신

인증 코드가 있을 시 코드를 앱 백엔드 서버로 보내고 토큰 생성 API를 사용하여 코드를 now.gg 서버와 교환한 뒤 tokenrefresh_token을 수령합니다.

  • token을 사용하여 now.gg API(유저 정보 및 세션 정보)를 호출합니다.
  • token이 만료될 때 새 토큰을 얻으려면 refresh_token을 저장하시기 바랍니다.

2. 토큰으로 유저 및 세션 정보 호출

토큰 수령 후 이를 사용하여 유저 및 세션 정보를 가져오실 수 있습니다.

  • 유저 정보를 가져오기 위해 UserInfo API를 사용하실 수 있습니다.
  • 세션 정보를 가져오기 위해 SessionInfo API를 사용하실 수 있습니다.

3. 토큰 갱신

token이 만료된 경우 토큰 생성 API를 사용하여 refresh_token으로 토큰을 생성하실 수 있습니다.

샘플 프로젝트

다운로드 패키지에는 샘플 프로젝트도 포함되어 있어 이를 참조하여 now.gg 로그인 프로세스를 쉽게 이해하실 수 있습니다.

샘플 프로젝트는 cocosSDKSample 폴더에 포함되어 있습니다.

×
클립보드에 복사된 텍스트
copyLinkText
질문이 있으신가요? 다음 주소로 문의하세요. dev-support@now.gg