Game > Gamebase > Unity SDK 사용 가이드 > 인증

Login

Gamebase에서는 게스트 로그인을 기본으로 지원합니다.

  • 게스트 이외의 Provider에 로그인하려면 해당 Provider AuthAdapter가 필요합니다.
  • AuthAdapter 및 3rd-Party Provider SDK에 대한 설정은 다음을 참고하시기 바랍니다.

Login Flow

많은 게임이 타이틀 화면에서 로그인을 구현합니다.

  • 앱을 설치하고 처음 실행했을 때 타이틀 화면에서 게임 이용자가 어떤 IdP(identity provider)로 인증할지 선택할 수 있게 합니다.
  • 한 번 로그인한 후에는 IdP 선택 화면을 표시하지 않고 이전에 로그인한 IdP 유형으로 인증합니다.

위에서 설명한 로직은 다음과 같은 순서로 구현할 수 있습니다.

purchase flow purchase flow purchase flow purchase flow purchase flow purchase flow

1. 이전 로그인 유형으로 인증

  • 이전에 인증했던 기록이 있다면 ID와 비밀번호를 입력받지 않고 인증을 시도합니다.
  • Gamebase.LoginForLastLoggedInProvider()를 호출합니다.

1-1. 인증이 성공한 경우

  • 축하합니다! 인증에 성공했습니다.
  • Gamebase.GetUserID()로 사용자 ID를 획득하여 게임 로직을 구현하시면 됩니다.

1-2. 인증이 실패한 경우

  • 네트워크 오류
    • 오류 코드가 SOCKET_ERROR(110) 또는 SOCKET_RESPONSE_TIMEOUT(101)인 경우, 일시적인 네트워크 문제로 인증이 실패한 것이므로 Gamebase.LoginForLastLoggedInProvider()를 다시 호출하거나, 잠시 후 다시 시도합니다.
  • 이용 정지 게임 이용자
    • 오류 코드가 BANNED_MEMBER(7)인 경우, 이용 정지 게임 이용자이므로 인증에 실패한 것입니다.
    • Gamebase.GetBanInfo()로 제재 정보를 확인하여 게임 이용자에게 게임을 플레이할 수 없는 이유를 알려주시기 바랍니다.
    • Gamebase 초기화 시 GamebaseConfiguration.enablePopupGamebaseConfiguration.enableBanPopup 값을 true로 한다면 Gamebase가 이용 정지에 관한 팝업을 자동으로 띄웁니다.
  • 그 외 오류
    • 이전 로그인 유형으로 인증하기가 실패하였습니다. '3. 지정된 IdP로 인증'을 진행합니다.

2. 지정된 IdP로 인증

  • IdP 유형을 직접 지정하여 인증을 시도합니다.
    • 인증 가능한 유형은 GamebaseAuthProvider 클래스에 선언돼 있습니다.
  • Gamebase.Login(providerName, callback) API를 호출합니다.

2-1. 인증에 성공한 경우

  • 축하합니다! 인증에 성공하였습니다.
  • Gamebase.GetUserID()로 사용자 ID를 획득하여 게임 로직을 구현하시면 됩니다.

2-2. 인증에 실패한 경우

  • 네트워크 오류
    • 오류 코드가 SOCKET_ERROR(110) 또는 SOCKET_RESPONSE_TIMEOUT(101)인 경우, 일시적인 네트워크 문제로 인증에 실패한 것이므로 Gamebase.Login(providerName, callback)을 다시 호출하거나, 잠시 후 다시 시도합니다.
  • 이용 정지 게임 이용자
    • 오류 코드가 BANNED_MEMBER(7)인 경우, 이용 정지 게임 이용자이므로 인증에 실패한 것입니다.
    • Gamebase.GetBanInfo()로 제재 정보를 확인하여 게임 이용자에게 게임을 플레이할 수 없는 이유를 알려 주시기 바랍니다.
    • Gamebase 초기화 시 GamebaseConfiguration.enablePopupGamebaseConfiguration.enableBanPopup 값을 true로 한다면 Gamebase가 이용 정지에 관한 팝업을 자동으로 띄웁니다.
  • 그 외의 오류
    • 오류가 발생했다는 것을 게임 이용자에게 알리고, 게임 이용자가 인증 IdP 유형을 선택할 수 있는 상태(주로 타이틀 화면 또는 로그인 화면)로 되돌아갑니다.

Login as the Latest Login IdP

가장 최근에 로그인한 IdP로 로그인을 시도합니다. 해당 로그인에 대한 토큰이 만료되었거나, 토큰에 대한 검증 등에 실패하면 실패를 반환합니다. 이때는 해당 IdP에 대한 로그인을 구현해야합니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID

static void LoginForLastLoggedInProvider(GamebaseCallback.GamebaseDelegate<GamebaseResponse.Auth.AuthToken> callback)

Example

public void LoginForLastLoggedInProvider()
{
    Gamebase.LoginForLastLoggedInProvider((authToken, error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            Debug.Log("Login succeeded.");
        }
        else
        {
            if (error.code == (int)GamebaseErrorCode.SOCKET_ERROR || error.code == (int)GamebaseErrorCode.SOCKET_RESPONSE_TIMEOUT)
            {
                Debug.Log(string.Format("Retry LoginForLastLoggedInProvider or notify an error message to the user. : {0}", error.message));
            }
            else
            {
                Debug.Log("Try to login using a specifec IdP");
                Login("ProviderName");
            }
        }
    });
}

public void Login(string providerName)
{
    Gamebase.Login(providerName, (authToken, error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            string userId = authToken.member.userId;
            Debug.Log(string.Format("Login succeeded. Gamebase userId is {0}", userId));
        }
        else
        {
            Debug.Log(string.Format("Login failed. error is {0}", error));
        }
    });
}

Login with GUEST

Gamebase는 게스트 로그인을 지원합니다. 디바이스의 유일한 키를 생성하여 Gamebase에 로그인을 시도합니다. 게스트 로그인은 디바이스 키는 초기화될 수 있고 디바이스 키의 초기화 시에 계정이 삭제될 수 있으므로 IdP를 활용한 로그인 방식을 권장합니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE UNITY_WEBGL UNITY_EDITOR

static void Login(string providerName, GamebaseCallback.GamebaseDelegate<GamebaseResponse.Auth.AuthToken> callback)

Example

public void Login()
{
    Gamebase.Login(GamebaseAuthProvider.GUEST, (authToken, error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            string userId = authToken.member.userId;
            Debug.Log(string.Format("Login succeeded. Gamebase userId is {0}", userId));
        }
        else
        {
            Debug.Log(string.Format("Login failed. error is {0}", error));
        }
    });
}

Login with IdP

다음은 특정 IdP로 로그인할 수 있게 하는 예시 코드입니다

API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE

static void Login(string providerName, GamebaseCallback.GamebaseDelegate<GamebaseResponse.Auth.AuthToken> callback)
static void Login(string providerName, Dictionary<string, object> additionalInfo, GamebaseCallback.GamebaseDelegate<GamebaseResponse.Auth.AuthToken> callback)

providerName

Provider Define Support Platform
Google GamebaseAuthProvider.GOOGLE Android
iOS
Standalone
Game Center GamebaseAuthProvider.GAMECENTER iOS
Facebook GamebaseAuthProvider.FACEBOOK Android
iOS
Standalone
Payco GamebaseAuthProvider.PAYCO Android
iOS
Standalone
Naver GamebaseAuthProvider.NAVER Android
iOS
Twitter GamebaseAuthProvider.TWITTER Android
iOS
Line GamebaseAuthProvider.LINE Android

몇몇 IdP로 로그인할 때는 꼭 필요한 정보가 있습니다.
예를 들어, Facebook 로그인을 구현하려면 scope 등을 설정해야 합니다.
이러한 필수 정보들을 설정할 수 있게 static void Login(string providerName, Dictionary additionalInfo, GamebaseCallback.GamebaseDelegate callback) API를 제공합니다.
additionalInfo 파라미터에 필수 정보들을 dictionary 형태로 입력하시면 됩니다. additionalInfo 값이 있을 경우에는 해당 값을 사용하고 없을 경우에는(null) TOAST Console에 등록된 값을 사용합니다. (TOAST Console에 additionalInfo 설정하기)
Stansalone에서는 WebViewAdapter를 통해서 로그인을 지원하며 WebView가 열려 있을 때 UI로 입력되는 Event를 Blocking하지 않습니다.

Standalone WebViewAdapter를 사용하여 로그인을 하기 위해서는 IdP 개발자 사이트에서 아래 CallbackURL을 설정 하여야 합니다.

  • https://alpha-id-gamebase.toast.com/oauth/callback
  • https://beta-id-gamebase.toast.com/oauth/callback
  • https://id-gamebase.toast.com/oauth/callback

Example

public void Login()
{
    Gamebase.Login(GamebaseAuthProvider.FACEBOOK, (authToken, error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            string userId = authToken.member.userId;
            Debug.Log(string.Format("Login succeeded. Gamebase userId is {0}", userId));
        }
        else
        {
            Debug.Log(string.Format("Login failed. error is {0}", error));
        }
    });
}

public void Login(string providerName, Dictionary<string, object> additionalInfo)
{
    Gamebase.Login(providerName, additionalInfo, (authToken, error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            string userId = authToken.member.userId;
            Debug.Log(string.Format("Login succeeded. Gamebase userId is {0}", userId));
        }
        else
        {
            Debug.Log(string.Format("Login failed. error is {0}", error));
        }
    });
}

Login with Credential

IdP에서 제공하는 SDK를 사용해 게임에서 직접 인증한 후 발급받은 액세스 토큰 등을 이용하여, Gamebase에 로그인할 수 있는 인터페이스입니다.

  • Credential 파라미터의 설정 방법
keyname a use 값 종류
GamebaseAuthProviderCredential.PROVIDER_NAME IdP 유형 설정 google, facebook, payco, iosgamecenter, naver, twitter, line
GamebaseAuthProviderCredential.ACCESS_TOKEN IdP 로그인 이후 받은 인증 정보(액세스 토큰) 설정
Google 인증 시에는 사용 안 함
GamebaseAuthProviderCredential.AUTHORIZATION_CODE Google 로그인 이후 받은 인증 정보(Authorization Code) 설정

[TIP]

게임 내에서 외부 서비스(Facebook 등)의 고유 기능을 사용해야 할 때 필요할 수 있습니다.

[주의]

외부 SDK에서 지원 요구하는 개발 사항은 외부 SDK의 API를 사용해 구현해야 하며, Gamebase에서는 지원하지 않습니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE UNITY_WEBGL UNITY_EDITOR

UnityEditor에서는 Facebook로그인만 지원합니다.

static void Login(Dictionary<string, object> credentialInfo, GamebaseCallback.GamebaseDelegate<GamebaseResponse.Auth.AuthToken> callback)

Example

public void LoginWithCredential()
{
    var credentialInfo = new Dictionary<string, object>();

    // facebook
    credentialInfo.Add(GamebaseAuthProviderCredential.PROVIDER_NAME, GamebaseAuthProvider.FACEBOOK);
    credentialInfo.Add(GamebaseAuthProviderCredential.ACCESS_TOKEN, "facebook access token");

    // google
    // credentialInfo.Add(GamebaseAuthProviderCredential.PROVIDER_NAME, GamebaseAuthProvider.GOOGLE);
    // credentialInfo.Add(GamebaseAuthProviderCredential.AUTHORIZATION_CODE, "google auchorization code");

    Gamebase.Login(credentialInfo, (authToken, error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            string userId = authToken.member.userId;
            Debug.Log(string.Format("Login succeeded. Gamebase userId is {0}", userId));
        }
        else
        {
            Debug.Log(string.Format("Login failed. error is {0}", error));
        }
    });
}

Authentication Additional Information Settings

Console Guide

Logout

로그인 된 IdP에서 로그아웃을 시도합니다. 주로 게임의 설정 화면에 로그아웃 버튼을 두고, 버튼을 클릭하면 실행되도록 구현하는 경우가 많습니다. 로그아웃이 성공하더라도, 게임 이용자 데이터는 유지됩니다. 로그아웃에 성공 하면 해당 IdP로 인증했던 기록을 제거하므로 다음에 로그인할 때 ID, 비밀번호 입력 창이 노출됩니다.

다음은 로그아웃 버튼을 클릭하면 로그아웃이 되는 예시 코드입니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE UNITY_WEBGL UNITY_EDITOR

static void Logout(GamebaseCallback.ErrorDelegate callback)

Example

public void Logout()
{
    Gamebase.Logout((error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            Debug.Log("Logout succeeded.");
        }
        else
        {
            Debug.Log(string.Format("Logout failed. error is {0}", error));
        }
    });
}

Withdraw

로그인 상태에서 탈퇴를 시도합니다.

  • 탈퇴에 성공하면, 로그인했던 IdP와 연동되어 있던 게임 이용자 데이터는 삭제됩니다.
  • 해당 IdP로 다시 로그인 가능하고 새로운 게임 이용자 데이터를 생성합니다.
  • Gamebase 탈퇴를 의미하며, IdP 계정 탈퇴를 의미하지는 않습니다.
  • 탈퇴 성공 시 IdP 로그아웃을 시도합니다.

다음은 탈퇴 버튼을 클릭하면 탈퇴가 되는 예시 코드입니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE UNITY_WEBGL UNITY_EDITOR

static void Withdraw(GamebaseCallback.ErrorDelegate callback)

Example

public void Withdraw()
{
    Gamebase.Withdraw((error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            Debug.Log("Withdraw succeeded.");
        }
        else
        {
            Debug.Log(string.Format("Withdraw failed. error is {0}", error));
        }
    });
}

Mapping

매핑은 기존에 로그인된 계정에 다른 IdP의 계정을 연동하거나 해제시키는 기능입니다.

많은 게임들이 하나의 계정에 여러 IdP를 연동(Mapping)할 수 있도록 하고 있습니다. Gamebase의 Mapping API를 사용하여 기존에 로그인된 계정에 다른 IdP의 계정을 연동/해제시킬 수 있습니다.

이렇게 하나의 Gamebase 사용자 ID에 다양한 IdP 계정을 연동할 수 있습니다. 즉, 연동 중인 IdP 계정으로 로그인을 시도 한다면 항상 동일한 사용자 ID로 로그인됩니다.

주의할 점은, IdP 마다 하나의 계정씩만 연동이 가능합니다. 예시는 다음과 같습니다.

  • Gamebase 사용자 ID : 123bcabca
    • Google ID : aa
    • Facebook ID : bb
    • AppleGameCenter ID : cc
    • Payco ID : dd
  • Gamebase 사용자 ID : 456abcabc
    • Google ID : ee
    • Google ID : ff -> 이미 Google ee 계정이 연동중이므로 Google계정을 추가로 연동할 수 없습니다.

Mapping 에는 Mapping 추가/해제 API 2개가 있습니다.

Add Mapping Flow

매핑은 다음 순서로 구현할 수 있습니다.

1. 로그인

매핑은 현재 계정에 IdP 계정 연동을 추가하는 것이므로 우선 로그인이 돼 있어야 합니다. 먼저 로그인 API를 호출해 로그인합니다.

2. 매핑

Gamebase.AddMapping()을 호출해 매핑을 시도합니다.

2-1. 매핑이 성공한 경우

  • 축하합니다! 현재 계정과 연동중인 IdP 계정이 추가되었습니다.
  • 매핑에 성공해도 '현재 로그인 중인 IdP'가 바뀌지는 않습니다.
    즉, Google 계정으로 로그인한 후, Facebook 계정 매핑 시도가 성공했다고 해서 '현재 로그인 중인 IdP'가 Google에서 Facebook으로 변경되지는 않습니다. Google 상태로 유지됩니다.
  • 매핑은 단순히 IdP 연동만 추가해 줍니다.

2-2. 매핑이 실패한 경우

  • 네트워크 오류
    • 오류 코드가 SOCKET_ERROR(110) 또는 SOCKET_RESPONSE_TIMEOUT(101)인 경우, 일시적인 네트워크 문제로 인증이 실패한 것이므로 Gamebase.AddMapping()을 다시 호출하거나, 잠시 대기했다가 재시도 합니다.
  • 이미 다른 계정에 연동 중일 때 발생하는 오류
    • 오류 코드가 AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER(3302)인 경우, 매핑하려는 IdP의 계정이 이미 다른 계정에 연동 중이라는 뜻입니다. 이미 연동된 계정을 해제하려면 해당 계정으로 로그인하여 Gamebase.Withdraw()를 호출하여 탈퇴하거나 Gamebase.RemoveMapping()를 호출하여 연동을 해제한 후 다시 매핑을 시도하세요.
  • 이미 동일한 IdP 계정에 연동돼 발생하는 오류
    • 에러 코드가 AUTH_ADD_MAPPING_ALREADY_HAS_SAME_IDP(3303) 인 경우, 매핑하려는 IdP와 같은 종류의 계정이 이미 연동중이라는 뜻입니다.
    • Gamebase 매핑은 한 IdP당 하나의 계정만 연동 가능합니다. 예를 들어 PAYCO 계정에 이미 연동 중이라면 더 이상 PAYCO 계정을 추가할 수 없습니다.
    • 동일 IdP의 다른 계정을 연동하기 위해서는 Gamebase.RemoveMapping()을 호출해 연동을 해제한 후 다시 매핑을 시도하세요.
  • 그 외의 오류
    • 매핑 시도가 실패했습니다.

Add Mapping

특정 IdP에 로그인 된 상태에서 다른 IdP로 Mapping을 시도합니다. Mapping을 하려는 IdP의 계정이 이미 다른 계정에 연동이 되어있다면 AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER(3302) 오류를 반환합니다.

Mapping이 성공 하더라도 '현재 로그인 중인 IdP'가 바뀌지는 않습니다. 즉, Google 계정으로 로그인 한 후, Facebook 계정 Mapping 시도가 성공했다고 해서 '현재 로그인 중인 IdP'가 Google에서 Facebook으로 변경되지는 않습니다. Google 상태로 유지됩니다. Mapping은 단순히 IdP 연동만 추가 해줍니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID

static void AddMapping(string providerName, GamebaseCallback.GamebaseDelegate<GamebaseResponse.Auth.AuthToken> callback)

Example

public void AddMapping(string providerName)
{
    Gamebase.AddMapping(providerName, (authToken, error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            Debug.Log("AddMapping succeeded.");
        }
        else
        {
            Debug.Log(string.Format("AddMapping failed. error is {0}", error));
        }
    });
}

AddMapping with Credential

게임에서 직접 ID Provider에서 제공하는 SDK로 먼저 인증을 하고 발급받은 액세스 토큰등을 이용하여, Gamebase AddMapping을 할 수 있는 인터페이스 입니다.

  • Credential 파라미터의 설정 방법
keyname a use 값 종류
GamebaseAuthProviderCredential.PROVIDER_NAME IdP 유형 설정 google, facebook, payco, iosgamecenter, naver, twitter, line
GamebaseAuthProviderCredential.ACCESS_TOKEN IdP 로그인 이후 받은 인증 정보(액세스 토큰) 설정
Google 인증 시에는 사용 안 함
GamebaseAuthProviderCredential.AUTHORIZATION_CODE Google 로그인 이후 받은 인증 정보(Authorization Code) 설정

[TIP]

게임 내에서 외부 서비스(Facebook 등)의 고유 기능을 사용해야 할 때 필요할 수 있습니다.

[주의]

외부 SDK에서 지원 요구하는 개발 사항은 외부 SDK의 API를 사용해 구현해야 하며, Gamebase에서는 지원하지 않습니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID

static void AddMapping(Dictionary<string, object> credentialInfo, GamebaseCallback.GamebaseDelegate<GamebaseResponse.Auth.AuthToken> callback)

Example

public void AddMappingWithCredential()
{
    var credentialInfo = new Dictionary<string, object>();

    // facebook
    credentialInfo.Add(GamebaseAuthProviderCredential.PROVIDER_NAME, GamebaseAuthProvider.FACEBOOK);
    credentialInfo.Add(GamebaseAuthProviderCredential.ACCESS_TOKEN, "facebook access token");

    // google
    // credentialInfo.Add(GamebaseAuthProviderCredential.PROVIDER_NAME, GamebaseAuthProvider.GOOGLE);
    // credentialInfo.Add(GamebaseAuthProviderCredential.AUTHORIZATION_CODE, "google auchorization code");

    Gamebase.AddMapping(credentialInfo, (authToken, error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            Debug.Log("AddMapping succeeded.");
        }
        else
        {
            Debug.Log(string.Format("AddMapping failed. error is {0}", error));
        }
    });
}

Remove Mapping

특정 IdP에 대한 연동을 해제합니다. 만약, 해제하고자 하는 IdP가 유일한 IdP라면, 실패를 반환합니다. 연동 해제후에는 Gamebase 내부에서, 해당 IdP에 대한 로그아웃처리를 해줍니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID

static void RemoveMapping(string providerName, GamebaseCallback.ErrorDelegate callback)

Example

public void RemoveMapping(string providerName)
{
    Gamebase.RemoveMapping(providerName, (error) =>
    {
        if (Gamebase.IsSuccess(error))
        {
            Debug.Log("RemoveMapping succeeded.");
        }
        else
        {
            Debug.Log(string.Format("RemoveMapping failed. error is {0}", error));
        }
    });
}

Get Mapping List

사용자 ID에 연동되어 있는 IdP 목록을 반환합니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID

static List<string> GetAuthMappingList()

Example

public void GetAuthMappingList()
{
    List<string> mappingList = Gamebase.GetAuthMappingList();
}

Gamebase User`s Information

Gamebase를 통하여 인증절차를 진행 후, 앱을 제작할 때 필요한 정보를 획득할 수 있습니다.

Get Authentication Information for Gamebase

Gamebase를 통하여 인증절차를 진행 후, 앱을 제작할 때 필요한 정보를 획득할 수 있습니다.

UserID

Gamebase에서 발급한 UserID를 가져올 수 있습니다. API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE UNITY_WEBGL UNITY_EDITOR

static string GetUserID()

Example

public void GetUserID()
{
    string userID = Gamebase.GetUserID();
}

AccessToken

Gamebase에서 발급한 액세스 토큰을 가져올 수 있습니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE UNITY_WEBGL UNITY_EDITOR

static string GetAccessToken()

Example

public void GetAccessToken()
{
    string accessToken = Gamebase.GetAccessToken();
}

Last LoggedIn Provider Name

Gamebase에서 마지막 로그인에 성공한 ProviderName을 가져올 수 있습니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID

static string GetLastLoggedInProvider()

Example

public void GetLastLoggedInProvider()
{
    string lastLoggedInProvider = Gamebase.GetLastLoggedInProvider();
}

Get Authentication Information for External IdP

외부 인증 SDK에서 액세스 토큰, 사용자 ID, Profile 등의 인증 정보를 가져올 수 있습니다.

UserID

외부 인증 SDK에서 사용자 ID를 가져올 수 있습니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE UNITY_WEBGL UNITY_EDITOR

static string GetAuthProviderUserID()

Example

public void GetAuthProviderUserID(string providerName)
{
    string authProviderUserID = Gamebase.GetAuthProviderUserID(providerName);
}

AccessToken

외부 인증 SDK에서 액세스 토큰을 가져올 수 있습니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE UNITY_WEBGL UNITY_EDITOR

static string GetAuthProviderAccessToken(string providerName)

Example

public void GetAuthProviderAccessToken(string providerName)
{
    string authProviderAccessToken = Gamebase.GetAuthProviderAccessToken(providerName);
}

Profile

외부 인증 SDK에서 Profile을 가져올 수 있습니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE UNITY_WEBGL UNITY_EDITOR

static GamebaseResponse.Auth.AuthProviderProfile GetAuthProviderProfile(string providerName)

Example

public void GetAuthProviderProfile(string providerName)
{
    GamebaseRequest.AuthProviderProfile profile = Gamebase.GetAuthProviderProfile(providerName);
}

Get Banned User Infomation

Gamebase Console에 제재된 게임 이용자로 등록될 경우, 로그인 시도 시, 이용 제한 정보 코드(BANNED_MEMBER(7))가 표시될 수 있으며, 아래 API를 이용하여 제재 정보를 확인할 수 있습니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID UNITY_STANDALONE UNITY_WEBGL UNITY_EDITOR

static GamebaseResponse.Auth.BanInfo GetBanInfo()

Example

public void GetBanInfo()
{
    GamebaseResponse.Auth.BanInfo banInfo = Gamebase.GetBanInfo();
}

TransferKey

게스트 계정을 다른 단말기로 이전하기 위해 발급받는 키입니다. 발급받은 TransferKey는 다른 기기에서 requestTransfer API를 호출하여 계정 이전을 할 수 있습니다.

[주의] TransferKey는 게스트 로그인 상태에서만 발급이 가능합니다. TransferKey를 이용한 계정 이전은 게스트 로그인 상태 또는 로그인되어 있지 않은 상태에서만 가능합니다. 로그인한 게스트 계정이 이미 다른 외부 IdP (Google, Facebook, Payco 등) 계정과 매핑되어 있다면 계정 이전이 지원되지 않습니다.

Issue TransferKey

게스트 계정 이전을 위한 TransferKey를 발급합니다. TransferKey의 형식은 영문자 "소문자/대문자/숫자"를 포함한 8자리의 문자열입니다. 또한 발급 시간 및 만료 시간을 같이 발급하며, 형식은 epoch time입니다. * 참고: https://www.epochconverter.com/

API

Supported Platforms UNITY_IOS UNITY_ANDROID

static void IssueTransferKey(long expiresIn, GamebaseCallback.GamebaseDelegate<GamebaseResponse.Auth.TransferKeyInfo> callback)

Example

public void IssueTransferKey(long expiresIn)
{
    Gamebase.IssueTransferKey(expiresIn, (transferKeyInfo, error) =>
    {
        if (true == Gamebase.IsSuccess(error))
        {
            Debug.Log(string.Format("transferKey:{0}", transferKeyInfo.transferKey));
            Debug.Log(string.Format("regDate:{0}", transferKeyInfo.regDate));
            Debug.Log(string.Format("expireDate:{0}", transferKeyInfo.expireDate));
        }
        else
        {
            Debug.Log(string.Format("IssueTransferKey failed. error is {0}", error));
        }
    });
}

Transfer Guest Account to Another Device

IssueTransferKey API로 발급받은 TransferKey를 사용하여 계정을 이전하는 기능입니다. 계정 이전 성공 시 TransferKey를 발급받은 단말기에서 이전 완료 메시지가 표시될 수 있고, Guest 로그인 시 새로운 계정이 생성됩니다. 계정 이전이 성공한 단말기에서는 TransferKey를 발급받았던 단말기의 게스트 계정을 계속해서 사용할 수 있습니다.

[주의] 이미 Guest 로그인이 되어 있는 상태에서 이전이 성공하게 되면, 단말기에 로그인되어 있던 게스트 계정은 유실됩니다.

API

Supported Platforms UNITY_IOS UNITY_ANDROID

static void RequestTransfer(string transferKey, GamebaseCallback.GamebaseDelegate<GamebaseResponse.Auth.AuthToken> callback)

Example

public void RequestTransfer(string transferKey)
{
    Gamebase.RequestTransfer(transferKey, (authToken, error) =>
    {
        if (true == Gamebase.IsSuccess(error))
        {
            string userId = authToken.member.userId;
            Debug.Log(string.Format("RequestTransfer succeeded. Gamebase userId is {0}", userId));
        }
        else
        {
            Debug.Log(string.Format("RequestTransfer failed. error is {0}", error));
        }
    });
}

Error Handling

Category Error Error Code Description
Auth INVALID_MEMBER 6 잘못된 회원에 대한 요청입니다.
BANNED_MEMBER 7 제재된 회원입니다.
AUTH_USER_CANCELED 3001 로그인이 취소되었습니다.
AUTH_NOT_SUPPORTED_PROVIDER 3002 지원하지 않는 인증 방식입니다.
AUTH_NOT_EXIST_MEMBER 3003 존재하지 않거나 탈퇴한 회원입니다.
AUTH_EXTERNAL_LIBRARY_ERROR 3009 외부 인증 라이브러리 오류입니다.
DetailCode 및 DetailMessage를 확인해주세요.
TransferKey SAME_REQUESTOR 8 발급한 TransferKey를 동일한 기기에서 사용했습니다.
NOT_GUEST_OR_HAS_OTHERS 9 게스트가 아닌 계정에서 이전을 시도했거나, 계정에 게스트 이외의 IDP가 연동되어 있습니다.
AUTH_TRANSFERKEY_EXPIRED 3031 TransferKey의 유효기간이 만료됐습니다.
AUTH_TRANSFERKEY_CONSUMED 3032 TransferKey가 이미 사용됐습니다.
AUTH_TRANSFERKEY_NOT_EXIST 3033 TransferKey가 유효하지 않습니다.
Auth (Login) AUTH_TOKEN_LOGIN_FAILED 3101 토큰 로그인에 실패하였습니다.
AUTH_TOKEN_LOGIN_INVALID_TOKEN_INFO 3102 토큰 정보가 유효하지 않습니다.
AUTH_TOKEN_LOGIN_INVALID_LAST_LOGGED_IN_IDP 3103 최근에 로그인한 IdP 정보가 없습니다.
IdP Login AUTH_IDP_LOGIN_FAILED 3201 IdP 로그인에 실패하였습니다.
AUTH_IDP_LOGIN_INVALID_IDP_INFO 3202 IdP 정보가 유효하지 않습니다. (Console에 해당 IdP 정보가 없습니다.)
Add Mapping AUTH_ADD_MAPPING_FAILED 3301 맵핑 추가에 실패하였습니다.
AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER 3302 이미 다른 멤버에 맵핑되어있습니다.
AUTH_ADD_MAPPING_ALREADY_HAS_SAME_IDP 3303 이미 같은 IdP에 맵핑되어있습니다.
AUTH_ADD_MAPPING_INVALID_IDP_INFO 3304 IdP 정보가 유효하지 않습니다. (Console에 해당 IdP 정보가 없습니다.)
Remove Mapping AUTH_REMOVE_MAPPING_FAILED 3401 맵핑 삭제에 실패하였습니다.
AUTH_REMOVE_MAPPING_LAST_MAPPED_IDP 3402 마지막에 맵핑된 IdP는 삭제할 수 없습니다.
AUTH_REMOVE_MAPPING_LOGGED_IN_IDP 3403 현재 로그인 되어 있는 IdP 입니다.
Logout AUTH_LOGOUT_FAILED 3501 로그아웃에 실패하였습니다.
Withdrawal AUTH_WITHDRAW_FAILED 3601 탈퇴에 실패하였습니다.
Not Playable AUTH_NOT_PLAYABLE 3701 플레이할 수 없는 상태입니다. (점검 또는 서비스 종료 등)
Auth(Unknown) AUTH_UNKNOWN_ERROR 3999 알수 없는 에러입니다. (정의 되지 않은 에러입니다.)
  • 전체 오류 코드는 다음 문서를 참고하시기 바랍니다.

AUTH_EXTERNAL_LIBRARY_ERROR

  • 이 오류는 외부 인증 라이브러리에서 발생한 오류입니다.
  • 오류 코드를 확인하는 방법은 다음과 같습니다.
GamebaseError gamebaseError = error; // GamebaseError object via callback

if (Gamebase.IsSuccess(gamebaseError))
{
    // succeeded
}
else
{
    Debug.Log(string.Format("code:{0}, message:{1}", gamebaseError.code, gamebaseError.message));

    Error moduleError = gamebaseError.error; // GamebaseError.error object from external module
    if (null != moduleError)
    {
        int moduleErrorCode = moduleError.code;
        string moduleErrorMessage = moduleError.message;

        Debug.Log(string.Format("moduleErrorCode:{0}, moduleErrorMessage:{1}", moduleErrorCode, moduleErrorMessage));
    }
}
  • IdP SDK의 오류 코드는 각 개발자 페이지를 참고하시기 바랍니다.