로그인 모듈 (유니티)

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

방법:

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

모듈 다운로드 및 임포트

유니티용 now.gg 로그인 모듈은 유니티 패키지 파일 nowgg-payments-login.unitypackage에 포함되어 있습니다.

방법:

  1. 최신 버전의 유니티용 now.gg 로그인 모듈이 포함된 패키지를 다운로드합니다.
  2. 모듈을 다운로드한 후 프로젝트에 임포트합니다.
    • 아래와 같이 에셋 > 패키지 임포트 > 커스텀 패키지를 클릭합니다.
    • 이전에 다운로드한 nowgg-payments-login.nitypackage를 선택합니다.
    • 나열된 파일을 모두 선택하고 임포트를 클릭합니다.

임포트 후 ‘NowGGSdk‘라는 폴더가 프로젝트에 추가되며 해당 폴더는 에셋 폴더 최상위 루트에서 확인하실 수 있습니다.

중요: NowGGSdk 폴더에는 now.gg 유틸리티 모듈과 관련된 모든 에셋이 포함되어 있으므로 수정하지 않습니다.

필수 종속성 추가

유니티 외부 종속성 관리자를 사용하여 프로젝트의 Assets/Plugins/Android 폴더에 필요한 모든 종속성을 다운로드하고 추가합니다.

방법:

  • 에셋 > 외부 종속성 관리자 > 안드로이드 리졸버 > 리졸브를 클릭합니다.

now.gg 로그인 적용

now.gg 로그인 모듈 임포트 및 종속성 추가 후 이제 now.gg 로그인 모듈을 적용하실 수 있습니다.

1. now.gg 로그인 버튼 표시

1.1 now.gg 로그인 버튼 에셋 다운로드

now.gg 로그인 버튼 에셋은 now.gg SDK 패키지Assets/Login 디렉토리에 포함되어 있습니다.

1.2 로그인 버튼 옵션 선택
  • 권장 로그인 버튼: 표준 버튼 에셋인 기본 버튼을 사용하실 수 있습니다.
  • 커스텀 로그인 버튼: 제공되는 로고 에셋과 사용자 정의 텍스트를 사용해 앱의 스타일에 적당한 버튼을 디자인하여 “now.gg 로그인” 버튼을 생성하실 수 있습니다.

중요 정보

  • 사용자의 초기 로그인 시 ‘now.gg 로그인 버튼’을 표시하고 클릭 시 로그인을 트리거해야 합니다. 이후 로그인의 경우, 사용자의 정보를 앱의 데이터베이스나 공유 환경설정에 저장하여 로그인 과정을 생략할 수 있습니다.

2. 로그인 플로우 시작

now.gg 로그인을 포함하는 클래스를 생성하고 이를 로그인 프로세스를 시작하는 데 사용할 수 있는 게임 오브젝트에 추가합니다.

이때 다음 두 가지 중 하나를 사용하실 수 있습니다.

2.1 기본 로그인 프로세스

해당 프로세스로 now.gg 로그인을 적용하고 유저의 기본 프로필 정보를 가져오실 수 있습니다.

프로세스를 시작하기 위해 아래와 같이 client_id를 사용하여 NowGGLoginSdkManager의 로그인 기능을 호출합니다.

private string CLIENT_ID = "your_client_id";

 public void Start()
 {
    NowGGLoginSdkManager.Instance.OnLoginSuccess += OnLoginSuccess;
    NowGGLoginSdkManager.Instance.OnLoginFailed += OnLoginFailed;
 }

 // 사용자가 로그인 버튼을 클릭하면 이 메서드를 호출하십시오.
 public void OnLoginButtonClick()
 { 
    NowGGLoginSdkManager.Instance.Login(CLIENT_ID);
 }

 private void OnLoginSuccess(string email, string token, string hostUrl)
 {
    Debug.Log($"Login success with email: {email} and token is: {token}");
 }

 private void OnLoginFailed(int errorCode, string errorMsg)
 {
    Debug.Log($"Login failed with error code: {errorCode} and message: {errorMsg}");
 }

중요: now.gg 로그인 모듈와 관련된 응답은 OnLoginSuccessOnLoginFailed 콜백 함수를 사용하여 처리하실 수 있습니다.

로그인 성공

유저가 성공적으로 로그인하면 OnLoginSuccess 콜백 함수를 통해 유저 이메일과 함께 요청된 토큰을 받게 됩니다.



2.2 고급 로그인 프로세스

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

이는 인증 코드를 사용하여 tokenrefresh_token을 생성하는 보다 안전한 프로세스입니다.

아래와 같이 추가 변수 code와 함께 client_id를 사용하여 NowGGLoginSdkManager 클래스의 로그인 함수를 호출합니다.

private string CLIENT_ID = "your_client_id";

 public void Start()
 {
    NowGGLoginSdkManager.Instance.OnLoginSuccess += OnLoginSuccess;
    NowGGLoginSdkManager.Instance.OnLoginFailed += OnLoginFailed;
 }

 // 사용자가 로그인 버튼을 클릭하면 이 메서드를 호출하십시오.
 public void OnLoginButtonClick()
 { 
    NowGGLoginSdkManager.Instance.Login(CLIENT_ID, "code");
 }

 private void OnLoginSuccess(string email, string token, string hostUrl)
 {
    Debug.Log($"Login success with email: {email} and authorization code is: {token}");
 }

 private void OnLoginFailed(int errorCode, string errorMsg)
 {
    Debug.Log($"Login failed with error code: {errorCode} and message: {errorMsg}");
 }

중요: now.gg 로그인 모듈와 관련된 응답은 OnLoginSuccessOnLoginFailed 콜백 함수를 사용하여 처리하실 수 있습니다.

로그인 성공

유저가 성공적으로 로그인하면 OnLoginSuccess 콜백 함수를 통해 유저 이메일과 함께 요청된 토큰을 받게 됩니다.


로그인 실패

로그인이 실패하는 시나리오로 기본 로그인고급 로그인 프로세스 모두에 적용됩니다.

로그인에 실패하면 OnLoginFailed 콜백 함수에서 오류 코드와 오류 메시지를 받게 되며 이후 받은 오류 메시지를 기반으로 해당 오류를 처리하실 수 있습니다.

nowGG 계정 없음

“No nowGG account present(nowGG 계정이 없습니다)”라는 오류와 함께 로그인이 실패하는 경우 아래와 같이 런타임에 NowGGLoginSdkManager 클래스의 AddNowGGAccount를 호출하여 계정을 추가하실 수 있습니다.

private void OnLoginFailed(int errorCode, string errorMsg)
 {
     statusText.text = "Login Failed: " + errorMsg;
     if (errorMsg.Equals("No nowgg account present") || errorCode == 1)
         NowGGLoginSdkManager.Instance.AddNowGGAccount();
 }

프로필 정보 사용 | 기본 로그인 프로세스

성공적으로 로그인하면 이제 토큰을 갖게 되며 해당 토큰을 사용하여 유저 프로필 정보를 가져올 수 있습니다.

해당 token여기를 참조하여 앱의 백엔드 서버에 사용하고 로그인한 유저의 프로필을 가져오시는 것을 권장해 드립니다.

중요

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

앱에 백엔드 서버가 없는 경우 다음을 통해 유저 프로필 정보를 호출하실 수 있습니다.

프로필 정보 호출

‘기기 내’ API 호출을 통해 로그인한 유저의 프로필 정보를 가져오는 샘플 코드는 데모 프로젝트에서 참조하실 수 있습니다.

예를 들어, 로그인한 유저의 userId를 포함한 유저 프로필 정보를 호출하려면 LoginTokenVerification 클래스의 VerifyToken을 호출하고 TokenVerifyResponse 콜백의 userDataVerified를 통해 필요한 정보를 가져오실 수 있습니다.

아래는 예시입니다.

private void OnLoginSuccess(string email, string token, string hostUrl)
 {
     Debug.Log($"Login success with email: {email} and token is: {token}");

     // 유저 세부 정보를 얻기 위해 토큰을 인증하며 보안 강화를 위해 백엔드 서버에서 토큰을 인증하시는 것을 권장해 드립니다.
     StartCoroutine(LoginTokenVefication.VerifyToken(token, CLIENT_ID, TokenVerifyResponse));
 }

 private void TokenVerifyResponse(UserDataVerified userDataVerified)
 {
     Debug.Log($"User id: {userDataVerified.userId}");
     string userId = userDataVerified.userId;
     string name = userDataVerified.name;
     string email = userDataVerified.email;
     string picture = userDataVerified.picture;
 }
LoginTokenVerification 클래스:

모듈 데모 프로젝트 내에서도 해당 클래스를 확인하실 수 있습니다.

using System;
 using System.Collections;
 using UnityEngine;
 using UnityEngine.Networking;

 public class LoginTokenVerification : MonoBehaviour
 {
     public static IEnumerator VerifyToken(string token, string client_id, Action tokenVerifyResponse)
     {
         WWWForm form = new WWWForm();
         form.AddField("token_type", "id_token");
         form.AddField("token", token);
         form.AddField("client_id", client_id);

         UnityWebRequest www = UnityWebRequest.Post("https://now.gg/accounts/oauth2/v1/verify-token", form);
         yield return www.SendWebRequest();

         if (www.result != UnityWebRequest.Result.Success)
         {
             Debug.Log($"Error in token verification: {www.error}");
         }
         else
         {
             Debug.Log($"token verification response: {www.downloadHandler.text}");
             TokenVerification tokenVerification = JsonUtility.FromJson(www.downloadHandler.text);
             if (tokenVerifyResponse != null)
                 tokenVerifyResponse(tokenVerification.userData);
         }
     }
 }

 [System.Serializable]
 public class TokenVerification
 {
     public string success;
     public string code;
     [SerializeField] private UserDataVerified decodedData;
     public UserDataVerified userData { get { return decodedData; } }
     public string msg;
 }

 [System.Serializable]
 public class UserDataVerified
 {
     public string iss;
     public string sub;
     public string aud;
     public string exp;
     public string iat;
     public string auth_time;
     public string tokenId;
     public string sessionId;
     public string scope;
     public string email;
     public string name;
     public string picture;
     public string mobile;
     public string userId;
 }

유저 세부 정보가 있으면 해당 정보를 데이터베이스에 저장하고 다음에 유저가 앱을 시작할 때 로그인 프로세스를 건너뛰는 데 사용해야 합니다.

중요:

  • 유저를 식별하기 위해 이메일 주소를 사용하지 않는 것이 좋습니다. 대신 userId를 사용하시기 바랍니다.
  • 앱에 백엔드 서버가 없으면 userDataVerified.userId를 통해 클라이언트에서 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으로 토큰을 생성하실 수 있습니다.

지원

dev-support@now.gg로 문의해 주시면 신속히 도와드리겠습니다.

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