레이블이 GPGS인 게시물을 표시합니다. 모든 게시물 표시
레이블이 GPGS인 게시물을 표시합니다. 모든 게시물 표시

2024년 12월 5일 목요일

Unity GooglePlayGamesPlugin-2.0.0 잘안될때 확인해야 할것

Unity GPGS 때문에 여기까지 검색해봤다면 기본적인 것은 알고 있다고 생각됩니다.

1. 가장 먼저 확인할 부분은 키부분입니다. 해당 부분은 다른 게시글에서도 쉽게 찾을 수 있을 것입니다.

2. 여기에서는 Authenticate 함수 호출시 에러가 나는 부분에 대한 설명입니다.


개발자 문서 : https://developer.android.com/games/pgs/unity/unity-start?hl=ko

github : https://github.com/playgameservices/play-games-plugin-for-unity


v11부터 바뀐것 같기는 하나 v11로 테스트 해보지는 않았지만, v11과 동일하게 2.0.0에서 signin 필요 없습니다.



위 링크를 보면 아래 내용이 나옵니다.

게임이 열리면 로그인 서비스를 사용하여 Play 게임즈 서비스로 연결이 자동으로 시도됩니다. 연결되면 게임에 로그인 메시지가 표시되고 Unity용 Google Play 게임즈 서비스 플러그인을 사용할 준비가 됩니다.

사용자가 기기에서 Google Play 게임즈 서비스를 사용한 적이 없는 경우 일회성 설정 화면으로 자동으로 안내되어 Play 게임즈 계정을 생성합니다.

스크립트의 Start 메서드에서 자동 로그인 시도 결과를 수신 대기하고, 인증 상태를 가져오고, Play 게임즈 서비스 기능을 중지(사용자가 로그인하지 않은 경우)합니다.

Unity 플러그인 버전이 v11 이전인 경우 로그인 기능을 사용할 수 없습니다.

    using GooglePlayGames;

    public void Start() {
      PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
    }

    internal void ProcessAuthentication(SignInStatus status) {
      if (status == SignInStatus.Success) {
        // 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).
      }
    }

즉 저 코드를 넣으면 된다고 되어있는데 실제해보면 동작하지 않습니다.

핵심은 주석 처리 되어 있는 아래쪽 코드인데, 해당 주석을 풀면 동작을 하게 됩니다. 자동로그인으로 바뀌었고 최초 한번은 수동 로그인이 필요하기 때문에 ManuallyAuthenticate 호출하도록 하던가 아니면 Authenticate 함수 실패시 ManuallyAuthenticate가 자동으로 호출 하도록 해당 함수를 사용하면 된다는 의미입니다.

단순히 주석을 제거하지 말고 버튼을 만들어서 수동으로 ManuallyAuthenticate 코드가 수행되도록 작업하는 것이 좋습니다. 위와 같은 상태로 구현을 하면 사용자가 로그인을 안한 경우 매번 실행시 구글 로그인을 하라는 팝업이 뜨는 경험을 겪게 됩니다.

막상 주석을 풀어서 사용하기 위해, 주석된 코드를 자세히 보면 ManuallyAuthenticate(ProcessAuthentication) 호출 후 callback으로 실패하게되면 ProcessAuthentication 함수가 무한이 불리게 됩니다.

제가 사용하는 참고 코드입니다.



    void Start()
    {
        PlayGamesPlatform.Activate();
        PlayGamesPlatform.Instance.Authenticate(PorcessAuthenticationStart);
    }

    public void GPGS_Login()
    {
        PlayGamesPlatform.DebugLogEnabled = true;
        PlayGamesPlatform.Instance.ManuallyAuthenticate(PorcessAuthentication);
    }
    internal void PorcessAuthentication(SignInStatus signInStatus)
    {
        if (signInStatus == SignInStatus.Success)
        {
            string displayName = PlayGamesPlatform.Instance.GetUserDisplayName();
            string userID = PlayGamesPlatform.Instance.GetUserId();
            this.displayName = displayName;
            this.userID = userID;
            logText.text = "logined:" + displayName;
        }
        else
        {
            logText.text = "*** Failed to authenticate with " + signInStatus;
        }
    }
    internal void PorcessAuthenticationStart(SignInStatus signInStatus)
    {
        if (signInStatus == SignInStatus.Success)
        {
            string displayName = PlayGamesPlatform.Instance.GetUserDisplayName();
            string userID = PlayGamesPlatform.Instance.GetUserId();
            this.displayName = displayName;
            this.userID = userID;
            Debug.Log("start login Success");
            logText.text = "logined:"+displayName;
        }
        else
        {
            Debug.Log("start login failed");
        }
    }


추가로 여러번 테스트할때 자동 로그인이 되어서 불편합니다. 로그아웃 하는 방법은 Play 게임 앱을 스토어에서 설치를 하면 내데이터 항목내 게임 계정 변경 메뉴가 있습니다. 해당 메뉴의 게임별 계정 변경 메뉴를 선택하면 게임별 로그 아웃 가능합니다.