[뒤끝팁] 로그인 구현 중 발생하는 에러 케이스 대처 방법

안녕하세요, 개발자 여러분!
함께 뛰는 게임 서버, 뒤끝입니다🙋‍♀️

오늘은 뒤끝으로 ‘로그인’ 기능 구현 시, 발생할 수 있는 에러 케이스들을 소개하고 대처 방법까지 함께 알아보려고 합니다😊 로그인은 뒤끝을 이용하기 위해 가장 먼저 구현해야 하는 기능이기 때문에, 알아 두시면 도움 되실 거예요!

목차 : 이런 상황이 발생한다면?

1. 비동기인데 응답이 오지 않을 때

🎁 TIP
만약 Backend.Initialize(true)로 초기화를 했다면, Update 문에 반드시 Backend.AsyncPoll() 함수가 지속적으로 호출되도록 구현해주세요!

뒤끝은 비동기 함수가 유니티의 기본 기능을 활용할 수 있도록 ‘폴링 기능’을 제공하고 있습니다.

폴링 기능을 이용하면 뒤끝의 비동기 로직에서 유니티의 UI 접근이나 오브젝트 생성이 가능해지는데요! 이 기능을 이용하기 위해서는 먼저 뒤끝 초기화 함수 Backend.Initialize(bool useAsyncPoll = true)의 useAsyncPoll을 true로 값을 입력해 주어야 합니다.

폴링을 사용할 경우, 비동기의 응답이 왔는지 주기적으로 확인하는 Backend.AsyncPoll()이 호출되어야 합니다. 만약 Backend.AsyncPoll()이 호출되지 않는다면? 응답이 왔는지 체크 자체를 하지 못하기 때문에, 호출을 보내도 응답이 돌아오지 않는 상황이 발생하게 됩니다. 

뒤끝예제게임이나 다른 예제코드에서는 Backend.Initialize(true)로 선언하는 경우가 많습니다. 이 초기화 부분만 따라하고 Update 부분에 Backend.AsyncPoll()을 입력하는 것을 놓친다면 호출에 대한 응답이 발생하지 않게 됩니다.

+) Backend.Initialize(false) 혹은 Backend.Initialize()로 호출 시에는 Debug.Log는 정상적으로 호출이 됩니다. 만약 유니티의 UI 혹은 유니티 내 오브젝트를 생성하고 싶을 경우에는 별도의 Dispatcher를 구현해 주셔야 한다는 점 주의해 주세요!✨

✅ AsyncPoll 사용 시

				
					void Start() {
    var bro = Backend.Initialize(true);

    Backend.BMember.CustomLogin("id", "pw", callback => {
        Debug.Log("로그인 여부 : " + callback);
        alertText.text = "로그인 성공했습니다";
    );
}

void Update() {
    if(Backend.IsInitialized && Backend.UseAsyncQueuePoll) {
        Backend.AsyncPoll();
     }
}
				
			
2. 회원가입/로그인이 작동하지 않을 때

🎁 TIP
서버의 응답 정보가 들어있는 리턴 값과, 개발자 문서의 Return Case를 확인해 주세요!

 만약, 회원가입/로그인이 작동하지 않는다면? 

우선 리턴된 응답 정보와 Debug.Log를 통해 에러의 종류를 확인해 주세요. 그리고 CustomLogin 개발자 문서의 가장 아래에 제공하는 Return Case를 통해 에러가 발생한 원인을 알아볼 수 있습니다. (뒤끝 베이스의 모든 리턴 값은 BackendReturnObject로 이루어져 있으며, 해당 데이터 타입은 서버에 대한 응답 정보를 포함합니다.)

그리고, 잘 풀리지 않는 문제가 있다면 언제든지 뒤끝 커뮤니티를 찾아주세요😄

✅ 로직

				
					var bro = Backend.BMember.CustomLogin("id", "pw");
Debug.Log("로그인 리턴 값 :\n" + bro);
				
			

✅ 리턴 값

				
					로그인 리턴 값 :
statusCode : 401
errorCode : BadUnauthorizedException
message : bad customId, 잘못된 customId 입니다
				
			
3. PC와 다르게, 모바일에서 로그인이 작동하지 않을 때

🎁 TIP
모바일에서 발급되는 구글 해시키와 패키지 네임을 뒤끝 콘솔에 등록해 주세요!

🧑‍💻: 분명히 PC에서는 로그인도 되고, 데이터 등록도 잘 됐는데··· 모바일은 왜 안될까요?

이는 지극히 정상적인 상황이며, 이유는 아래와 같습니다.

뒤끝 SDK는 안드로이드에서 실행 시, 서버에 요청을 보낼 때마다 해당 앱의 package name과 google hash key를 콘솔에 등록된 값과 대조하는데요. 이를 위해 모바일에서 발급되는 ‘구글 해시키’와 ‘패키지 네임’을 콘솔에 등록해 주어야 합니다.

등록하는 방법은 아래 두 가지입니다.

방법1. 뒤끝이 제공하는 해시키 함수 사용하기

				
					string googlehash = Backend.Utils.GetGoogleHash();

Debug.Log("구글 해시 키 : " + googlehash);
				
			

모바일 기기에서 위 함수를 호출하면, 9DVI3dgk2gjdjjlh+= ⬅️이 값을 확인할 수 있습니다.

방법2. 뒤끝 인스펙터창 이용하기

구글 콘솔에 앱을 업로드하면, 아래와 같이 출시 관리 – ‘앱 서명’이 활성화됩니다. 여기서 SHA-1 인증서의 지문을 복사해 인스펙터의 SHA-1에 붙여 넣고, Generate 버튼을 누릅니다.

구글 콘솔 출시 관리 메뉴의 앱 서명 탭 화면

이 값을 [뒤끝 콘솔] > [인증 정보] > [스토어 인증 정보] > [Google Hash Key]에 아래와 같이 입력합니다.

4. 자동 로그인을 구현하고 싶을 때

🎁 TIP
뒤끝이 제공하는 자동 로그인(=토큰 로그인) 기능을 활용하세요!

뒤끝은 ‘자동 로그인’ 기능을 아주 편한 방식으로 제공합니다.

일반적으로 Apple이나 GPGS는 캐싱된 정보를 이용해 자동 로그인을 할 수 있습니다. 그렇지만 로그인을 시도할 때마다 로그인 UI가 표시되거나(GPGS), 지문 인식을 요구하는(Apple) 경우가 많은데요.

뒤끝의 자동 로그인 기능을 활용하면, 위 같은 불필요한 동작을 거치지 않고 즉시 로그인이 가능합니다.

				
					var bro = Backend.BMember.LoginWithTheBackendToken();

if(bro.IsSuccess()) {
    Debug.Log("로그인이 성공했습니다");
}
else {
    Debug.LogError("로그인이 실패했습니다. 수동 로그인으로 진행합니다.");
    
    OpenCustomLoginUI();
}
				
			

위 예제 코드만 보면 이것이 어떤 로직인지 감이 오지 않을 수 있으실 듯하여, 하나씩 풀어보겠습니다.😊 

기본적으로 뒤끝이 제공하는 자동 로그인은 아래와 같이 이루어집니다.

(1) 토큰 로그인(LoginWithTheBackendToken) 함수를 호출
(2-1) 토큰 로그인 성공 = 불필요한 절차 없이 즉시 로그인
(2-2) 토큰 로그인 실패, 수동 로그인 진행(=고유한 토큰 값 생성)

위 (1)번의 LoginWithTheBackendToken() 함수는 기기에 저장된 ‘고유한 토큰 값’을 이용하여 인자 없이 로그인을 시도하는 함수입니다. 고유한 토큰 값은 ‘수동 로그인’을 통해 생성되고 자동으로 기기에 저장장되는 것 입니다. 그렇기 때문에 고유한 토큰 값이 없는 경우 오류가 발생합니다.

💡깨알 팁: 로그인 방식에는 ‘자동 로그인’과 ‘수동 로그인’ 두 가지가 있다.
     *자동 로그인 = 토큰 로그인(LoginWithTheBackendToken)
     *수동 로그인 = 커스텀 회원가입/로그인, GPGS 로그인, Apple 로그인

더 쉬운 이해를 위해, 위 과정을 유저의 입장에서 한 번 살펴보겠습니다.

(1) 유저가 게임을 처음 설치하고 들어가면 토큰 로그인(LoginWithTheBackendToken) 함수가 우선 호출됩니다. 토큰 로그인에 성공하기 위해서는 ‘고유한 토큰 값’이 필요하지만, 유저는 게임을 막 설치했기 때문에 아무런 토큰 값을 보유하지 않은 상태일 것입니다. 

(2-2) 토큰 로그인은 실패를 하게 되고, 유저는 수동 로그인을 진행하게 됩니다. 이때 고유한 토큰 값이 생성되는 것입니다. 이후에 유저가 게임을 끄고 재접속을 하면 어떻게 될까요? 

(1) 게임이 켜지고 다시 토큰 로그인(LoginWithTheBackendToken)을 시도합니다. 

(2-1) 최초 수동 로그인을 통해 기기에 저장했던 ‘고유한 토큰 값’ 덕분에, 토큰 로그인에 성공합니다. 

🚨추가로, 로그인하는 기기가 변경되어도 토큰 로그인 에러가 발생합니다.
토큰 값은 기기에 저장되는 것이기 때문에, 기기가 변경되면 수동 로그인을 통해 토큰 값을 다시 발급받아야 하는 점 참고해 주세요!

5. 게스트 로그인이 작동하지 않을 때

게스트 로그인은 뒤끝의 커스텀 로그인 기능을 사용해 만들어진 기능으로, 동작 방식은 아래와 같습니다.

뒤끝 SDK 내부에서 UUID를 생성하고 이를 아이디와 비밀번호로 사용합니다. 이 정보를 이용하여 회원가입을 진행하고, 회원가입에 성공하면 뒤끝 파일시스템에 의해 아이디와 비밀번호가 기기에 저장됩니다.

그렇기 때문에 (1) 기기의 캐시가 클리어 되거나 (2) 유저가 앱을 삭제할 경우, 게스트 로그인의 정보도 사라지게 됩니다. 따라서 위 두 가지의 경우에는 게스트 로그인이 불가하게 됩니다.

6. 뒤끝 콘솔의 유저 회원번호를 클라이언트에서도 보고 싶을 때

🎁 TIP
GetUserInfo() 함수를 사용해 보세요!

GetUserInfo()함수는 서버에서 자신의 유저 정보를 조회하는 기능입니다. 이 함수를 사용하면, 클라이언트에서 회원번호가 gamerid로 보이게 됩니다.

				
					public void GetUserInfo()
{
    var bro = Backend.BMember.GetUserInfo();

    JsonData userInfoJson = bro.GetReturnValuetoJSON()["row"];

    UserInfo userInfo = new UserInfo();

    userInfo.gamerId = userInfoJson["gamerId"].ToString(); // <- 회원번호
    userInfo.countryCode = userInfoJson["countryCode"].ToString();
    userInfo.nickname = userInfoJson["nickname"].ToString();
    userInfo.inDate = userInfoJson["inDate"].ToString();
    Debug.Log(userInfo.ToString());
}
				
			

오늘은 뒤끝으로 로그인을 구현할 때 발생할 수 있는 여러 가지 에러 케이스들과,
그 대처 방법을 알아보았습니다.

앞으로도 더 쉽고 편한 뒤끝이 되기 위해 콘텐츠로 찾아오겠습니다. 궁금한 부분이 있으시다면 언제든 댓글 남겨 주시고, 다음 콘텐츠도 기대해 주세요😄

감사합니다!

0

댓글