게스트 로그아웃 관련 문의

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

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

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

  • 뒤끝 SDK 버전 :
  • 프로젝트명 :
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

안녕하세요

게스트 계정의 로그아웃을 처리하고 있습니다.

public void Onclick_Logout()
    {
        SaveManager.SaveAllCache();

        if (BackendGameData.Instance.userData.subscriptionType.Equals(SubscriptionType.google))
        {
            SignOutGoogleLogin();
        }

        // 로그인되어있을 때, 계정탈퇴, 데이터 삭제 가능
        //게스트일경우, 로그아웃 후, 계정탈퇴를 해준다.
        if (BackendGameData.Instance.userData.subscriptionType.Equals(SubscriptionType.customSignUp))
        {
            GuestLogout();
            // 기기 내부에 저장된 게스트 데이터를 삭제
            Backend.BMember.DeleteGuestInfo();
        }

        // 로컬에 Save파일 삭제
        SaveManager.DeleteLocalFile();
        SaveManager.DeleteBackendFile();

        SendQueue.Enqueue(Backend.BMember.Logout, (callback) => // bool 값으로 함수 제일 마지막에 씬 이동을 구현?
        {
            if (callback.IsSuccess())
            {
#if UNITY_ANDROID && !UNITY_EDITOR
                SceneControl.Instance.LoadScene(MyScene.Scene_0_Intro, transitionObjIndex: 1);
#endif
            }
            else
            {
                Debug.Log("Logout Err");
#if UNITY_ANDROID && !UNITY_EDITOR
                StartCoroutine(RestartAppCoroutine());
#endif
            }
        });

        // PlayerPrefs 삭제
        PlayerPrefs.DeleteAll();
        PlayerPrefs.Save();
    }

private void GuestLogout()
    {
        //서버 데이터 삭제
        SendQueue.Enqueue(Backend.GameData.DeleteV2, "USER_DATA", BackendGameData.Instance.userData.userIndate, Backend.UserInDate, callback =>
        {
            if (callback.IsSuccess())
            {
                Debug.Log("Data Delete");

            }
            else
            {
                Debug.Log($"Delete Error {callback.ErrorCode} {callback.Message} ");
            }
            
        });

        // 계정 탈퇴
        SendQueue.Enqueue(Backend.BMember.WithdrawAccount, callback =>
        {
            if (callback.IsSuccess())
            {
                Debug.Log($"Account Delete");
            }
            else
            {
                Debug.Log($"WithdrawAccount Error {callback.ErrorCode} {callback.Message} ");
            }
        });
    }

이런식으로 구성했는데 지금 파악한 문제는 게스트계정에서 로그아웃 했을 때, 서버에 가입되어있는 커스텀 계정 탈퇴를 진행하고 싶습니다.

게스트 계정을 로그아웃하는 과정에서, 게스트 계정인지 판단하고, 게스트 계정이라면, 로그아웃 이전에 서버에 저장되어있는 데이터 삭제, 계정 탈퇴 후 로그아웃 처리를 하려고 하는데, 로그아웃을 하기전에 계정 탈퇴를 하면, 앱이 강제 종료됩니다.

반대로, 로그아웃 후, 게스트 계정 탈퇴를 진행하면, access_token을 확인할 수 없습니다 라는 오류가 발생합니다.

게스트 계정은 로그아웃 시, 계정을 바로 삭제하도록 진행하고 싶은데, 이에 관련해 방법이 있는지 궁금합니다.

안녕하세요 개발자님,
계정의 로그아웃과 탈퇴는 이용자의 데이터(개인 정보 처리)와 관련한 영역으로 분리 구분하여 제공해야 합니다.
게스트 계정이라 할지라도 단순 로그아웃의 경우 로컬 데이터가 삭제되지 않는 한 계정의 재 로그인을 통한 이용이 가능합니다.
(탈퇴가 아닌 로컬 계정 데이터 삭제처리는 DeleteGuestInfo 함수를 통해 가능하며, 이 경우 더이상 해당 계정으로 접속은 불가하나, 서버상에 계정 정보는 남게됩니다.)

말씀해주신 탈퇴 시 강제 종료 관련해서는 확인하여 안내드릴 수 있도록 하겠습니다.

좋아요 1

문의 주신 탈퇴 함수 사용 후 앱이 종료되는 현상과 관련하여, 다음과 같이 확인 안내드립니다.

  1. 뒤끝 탈퇴 함수 자체에 앱 종료 기능은 포함되어 있지 않습니다
    뒤끝에서 제공하는 탈퇴 함수는 회원 탈퇴 처리만 수행하며, 앱을 강제 종료하거나 종료를 유도하는 기능은 포함되어 있지 않습니다.
    내부 테스트 환경에서도 탈퇴 함수 호출 이후 앱은 정상적으로 유지되는 것을 확인하였습니다.

  2. 앱 종료(크래시)의 예상 상황

    1. 싱글턴 객체 접근 시 NullReferenceException
      BackendGameData.Instance, SceneControl.Instance 등 싱글턴 패턴의 객체가 이미 파괴되었거나 초기화되지 않은 상태에서 접근될 경우 NullReferenceException이 발생할 수 있으며 이로인해 크래시가 발생할 수 있습니다…
    2. GuestLogout() 실행 순서
      작성하신 GuestLogout 함수 처리가 SendQueue를 통해 비동기적으로 진행되므로, 이후 로직이 응답 도달 이전에 먼저 실행되면 순서가 꼬이게 될 수 있습니다.
    3. PlayerPrefs.DeleteAll() 또는 PlayerPrefs.Save() 실행 시점 문제
      해당 함수의 위치 상 SendQueue 응답 전에 해당 함수들이 먼저 실행되면, 로그아웃/탈퇴 실패 시에도 이미 데이터가 삭제되어 있을 수 있으니 이부분을탈퇴나 로그아웃의 성공 응답을 받은 후 진행하는 것이 안전합니다.
    4. 코루틴 함수체크
      로그아웃 실패 시에 동작하게 되는 RestartAppCoroutine 함수에서 로그아웃은 실패하였지만 로컬에 저장한 세이브/계정정보 등은 삭제 되어있을 수 있어 RestartAppCoroutine()에서 접근할 수 있는 데이터가 사라졌음에도 불구하고 계속해서 코루틴이 동작 하면서 크래쉬가 발생할 수 있습니다.

보다 정확한 원인에 대해서는 크래쉬 리포트 또는 로그캣 로그를 확인하여 주시면 감사하겠습니다.

좋아요 1