ChangeCustomToFederation 질문이 있습니다.

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

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

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

  • 뒤끝 SDK 버전 : SDK-5.11.7
  • 프로젝트명 : 몬스터 테이블
  • 스테이터스 코드 : 401
  • 에러 코드 : BadUnauthorizedException
  • 에러 메시지 : bad bad google accesstoken

안녕하세요. 현재 뒤끝으로 프로젝트 진행 중입니다.
현재 게스트 → 구글 로그인으로 마이그레이션 작업 진행 중인데
막히는 부분이 있어 이렇게 문의로 몇 가지 질문드립니다.

  1. 게스트 로그인을 무조건 처음에 시킵니다. 그렇게 하여도 GPGS에 관련된 작업들
    public void SetGoogle()
    {
        //PlayGamesPlatform.Activate();
        PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
    }


    void ProcessAuthentication(SignInStatus status) {
        if (status == SignInStatus.Success) 
        {
            LoginGPGS();
            // Continue with Play Games Services
        } else {
            // Disable your integration with Play Games Services or show a login button
            // to ask users to sign-in. Clicking it should call
            // PlayGamesPlatform.Instance.ManuallyAuthenticate(ProcessAuthentication).
        }
    }

    public void LoginGPGS()
    {
        PlayGamesPlatform.Instance.RequestServerSideAccess(
            /* forceRefreshToken= */ false,
            code => {
                Debug.Log("구글 인증 코드 : " + code);

                Backend.BMember.GetGPGS2AccessToken(code, googleCallback =>
                {
                    //Debug.Log("GetGPGS2AccessToken 함수 호출 결과 " + googleCallback);
                    
                    if (googleCallback.IsSuccess())
                    {
                        token = googleCallback.GetReturnValuetoJSON()["access_token"].ToString();
                    }
                    
                });
            });
    }

이런 것들을 꼭 해줘야 할까요?

1-1. 필요없다면 게스트 → 구글로 컨버트 해줄 때 토큰 값을 무엇을 넣어야하나요?

1-2. 필요하다는 가정하에 진행하였을 시

    public void ConvertGuestToGoogle(Action successAction)
    {
        //Backend.BMember
        string token = GoogleManager.Instance.GetAccessCode(); // 이부분은 GetGPGS2AccessToken로 나온 값을 기입했습니다.

        SendQueue.Enqueue(Backend.BMember.ChangeCustomToFederation,token, FederationType.Google, callback => {
            if(callback.IsSuccess())
            {
                Data.userPrivateData.userSettingData.isGuest = false;
                successAction?.Invoke();
            }
            else
            {                          
                if (callback.GetStatusCode() == "400" &&
                    callback.GetErrorCode() == "BadParameterException")
                    Debug.Log("이미 페러데이션 계정으로 연결되어 있습니다.");
                else if (callback.GetStatusCode() == "409" &&
                         callback.GetErrorCode() == "DuplicatedParameterException")
                    Debug.Log("현재 계정은 사용중입니다.");
                else if (callback.GetStatusCode() == "400" &&
                         callback.GetErrorCode() == "UndefinedParameterException")
                    Debug.Log("토큰값이 null입니다.");
                else
                    Debug.Log("Convert Fail / "+ callback.GetStatusCode() + " / " + callback.GetErrorCode()+ " / Contents : " +  callback.GetMessage());
                
                UIManager.Instance.UseNotice("구글 연동에 실패하였습니다." , 3f);
            
            }
        });
    }

앞서 말씀드린 에러 메시지에 적은 것처럼 엑세스 토큰이 잘못되었다고 나오는데 저 AccessToken을 적는게 아닌가요?
(참고로 GPGS v2 사용중입니다.)

안녕하세요 개발자님,

  1. Google Play Game Service를 통해 구글 계정으로 로그인
  2. 구글 Auth Code 획득
  3. 이 구글 Access Code를 Backend.BMember.GetGPGS2AccessToken() 함수에 사용
  4. 구글 액세스 토큰이 발급
  5. 구글 액세스 토큰을 이용해 Backend.BMember.AuthorizeFederation(“accessToken”, FederationType.GPGS2) 호출

커스텀 계정의 GPGS V2 전환은 위 GPGS V2 로그인 과정에서
5번 과정의 AuthorizeFederation 함수 대신 ChangeCustomToFederation 함수를 이용해 진행할 수 있습니다.
구글 Access Code 를 받아와 이용해 주셔야 하니 참고해 주시면 감사하겠습니다.

말씀하신 과정 이 커스텀 → GPGS v2를 설명해주셨는데 GPGS v2 가 Google과 같은 건가요? FederationType에 따로 있어서 다른 거 아닌가 싶어서요 아니면 저 함수에 타입을 바꿔서 적용하면 되는 건가요?

Backend.BMember.AuthorizeFederation(“accessToken”, FederationType.GPGS2) 로 적용해주시면 됩니다.
현재 개발자 문서 상 누락된 GPGS2 정보에 대해서는 빠르게 수정할 수 있도록 하겠습니다.

덕분에 GPGS v2로 전환하는데 성공했습니다!
하나만 더 질문드리겠습니다. 예전 프로젝트에서는 유저 아이디에 gmail 형식으로 들어갔는데
a_xxx 이런 식으로 들어가더라구요 gpgs v2를 쓰면 어쩔 수 없는 부분인가요?

네, 맞습니다.
뒤끝의 GPGS V1 로그인 방식은 game_lite가 아닌 openid를 사용해 이메일 정보를 기반으로 하였지만,
GPGS V2는 openid의 사용이 제한되어 이메일이 아닌 game_lite 정보를 사용하게 되면서 말씀해주신 형식으로 처리됩니다.

좋아요 1