구글 로그인 예외 처리

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 :
  • 프로젝트명 : 난세표류기 - 한국사 방치형 RPG
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

안녕하세요.
로그인 시 발생하는 오류에 대해 문의드립니다.

현재 구글 로그인을 통해 신규 유저가 로그인한 뒤, 데이터베이스가 생성되기 전에 앱을 종료하는 경우,
다음 로그인 시 문제가 발생하고 있습니다.

  • Backend.BMember.AuthorizeFederation(token, FederationType.Google) 호출 시에는 이미 회원가입이 완료된 상태로 처리되지만,
  • 실제로는 뒤끝에 유저 데이터베이스(PlayerData)가 아직 생성되지 않아
  • 이후 로그인 시 신규 가입 절차로 진입하지 않고, 로딩 화면에서 멈추는 현상이 발생합니다.

이에 대해 예외 상황을 고려하여, 아래와 같은 방식으로 예외 처리를 시도하였지만 실패 하였습니다

var bro = Backend.BMember.AuthorizeFederation(token, FederationType.Google);
if (int.Parse(bro.GetStatusCode()) == 200)
{
    var bro2 = Backend.PlayerData.GetMyData("BASE_DATA");
    if (int.Parse(bro2.GetStatusCode()) == 404)
    {
        StartCoroutine(SignUpRoutine()); // 유저 데이터가 없을 경우 신규 가입 처리
    }
    else
    {
        StartManager.instance.LoginSuccess();
        StartManager.instance.googleLogin.gameObject.SetActive(false);
    }
}
else
{
    StartCoroutine(SignUpRoutine()); // 인증 실패 시 신규 가입 처리
}

혹시 위 방식 외에 보다 안정적인 예외 처리 방법이나 권장되는 로직 흐름이 있다면 조언 부탁드립니다.

감사합니다.

안녕하세요 개발자님,
말씀해주신 것처럼 가입 직후 앱 종료나 예기치 못한 크래시 등으로 인해 유저 데이터가 생성되지 못하는 경우를 대비해,
최초 로그인 시 데이터의 존재 여부를 확인하고 필요 시 생성하는 방식으로 구성해 주시는 것이 일반적인 처리 방식입니다.

이러한 구조는 추후 테이블이나 컬럼이 추가될 경우에도 유연하게 대응할 수 있기 때문에 권장드리는 방법입니다. :D

위와 같이 적용하여 빌드를 했음에도 똑같은 오류가 발생하는데 어떻게 해야할까요 ?

확인되시는 에러 정보 공유해주실 수 있을까요?

BASE_DATA가 없음에도 불구하고 else문을 탑니다!

사용하는 뒤끝 버전은 5.14.0 입니다!

Backend.PlayerData.GetMyData 함수의 호출과 관련하여, statusCode 만을 기준으로 데이터 존재 여부를 판단해서는 안됩니다.

조회에 성공했으나 해당 inDate를 지닌 row가 존재하지 않는 경우
statusCode : 200
message : Success
returnValue : {“serverTime”:“2023-10-29T13:46:51.305Z”,“rows”:[],“ConsumedCapacity”:{“Read”:{“CapacityUnits”:0.5}}}

이처럼 응답의 statusCode가 200 으로 반환되더라도, 실제로는 원하는 데이터가 조회되지 않는 상황이 발생할 수 있습니다.
각 코드에 대해 디버깅을 통해 리턴값을 확인하여 이상이 발생한 위치를 확인하여 대응해주세요.

또한, 에러 처리 시에도 statusCodeerrorCode는 동일하지만 message가 다른 다양한 케이스가 존재하기 때문에
단순히 특정 코드값만으로 분기 처리하기보다는, 개발자 문서에 안내된 각 성공/에러 케이스를 충분히 참고하여 대응해 주시길 권장드립니다.