유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

이틀동안 삽질 했었다. Google Play Game Service 인증 시 아래와 같이 무한 로딩하는 현상이 발생했는데, 해결방법이 뚜렷히 보이지 않았다.

유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding
로그인 팝업 -> 계정 선택 후 화면

우선 확실한 원인 파악을 위해 확인해 본 것을 정리 해 보면,

- sha-1 앱서명 키 값이 올바르게 적용 돼 있는지

- 플레이 게임이 출시 돼 있는지

- 베타테스트 트랙이 등록 돼 있는지

보통 위의 것들을 확인 해 보면 된다고 했는데, 나는 모두 올바르게 돼 있었다. 단 한가지를 뺴고 ㅠㅠ

바로 앱서명 동의화면이 테스트 단계로 돼 있던 것이었다.

유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding
유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

위의 앱 게시를 눌러, 프로덕션 상태로 만들면, 잘 동작하게 된다. 

유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

저작자표시

'게임을 만들자 > Unity' 카테고리의 다른 글

Unity Simulator 사용하기  (0) 2021.04.03
Unity + Firebase + GooglePlayGameService 로그인 연동하기  (5) 2021.02.28
Unity Built-in to URP 변환하기  (0) 2020.12.17
Unity, VS4M, Debugger operation failed. 해결  (0) 2020.11.09
Unity, Coroutine(코루틴) Lamda(람다식) 사용  (0) 2020.09.25

[Unity] 유니티 Play 게임에 연결 중 GPGS 무한 로딩(Google Play Game Services not working in Unity)

안녕하세요 정보처리마법사입니다.

이번 포스팅의 주제는 google play game services login 무한로딩에 관한 내용입니다.

아래 스샷과 같이 하루종일 play 게임에 연결중 표시만 뜨면서 무한 반복합니다.

구글플레이게임서비스 로그인이 되면 코루틴 빠져나오고, 그렇지 않으면 10초마다 재로그인 하는 방식으로 구현해놓은 상태였는데, 10초마다 저 알림이 뜹니다. 근데 희한한게 원래는 됐던 프로젝트인데 갑자기 왜 안되는건지는 모르겠지만 일단 삽질을 시작했습니다.

Project Settings의 Publishing settings 탭에 가서 옵션을 다음과 같이 하면 됩니다. 

User Proguard File 옵션에 체크를 하면 Assets\Plugins\Android\proguard-user.txt 위치에 텍스트파일이 생기는데

아래 2줄을 복사한 뒤 저장.

그 후 빌드하니 잘 됩니다.

이상으로 포스팅을 마칩니다.

감사합니다.

유니티에 구글플레이 연동을 한뒤 로그인코드를 작성하여 폰에넣고 실행해봤는데 안된다면 여러가지 상황이 있습니다.

제가 검색해봐서 본것중 

1. 테스트 계정을 등록해야 하는것입니다.(테스트 일 경우)

2. 저장된게임을 활성화 하시면 EnableSavedGames() 이 코드를 추가하셔야 합니다. 만약 활성화를 안하셨으면 저 코드를 적으면 안됩니다.

3. API관리자에서 사용자 인증 정보를 추가하여야 합니다.(제가 해결한 방법입니다.)

먼저 제가 해결한 방법의 링크는 http://answers.unity3d.com/questions/1357666/google-play-games-services-authentication-fails.html 입니다.

1. Google Play Console -> 앱선택 -> 출시 관리 -> 앱 서명 -> 앱 서명 인증서 : SHA-1 복사

2. https://console.developers.google.com/ 을 열고 프로젝트 -> 자격증명 -> Oauth 2.0 클라이언트 ID -> OAuth 클라이언트 편집 -> 서명 인증서 지문 -> 이전 SHA1을 복사 된  SHA1로 바꾸기 -> 저장을 선택하십시오.

이것으로 저는 해결했습니다.

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

구글 디벨로퍼 콘솔에서 연동된 API의 OAuth 동의 화면(인증 화면)을 확인한다.
게시 상태 <프로덕션 단계>가 출시가 아닌 테스트인지(출시, 테스트로 언제든 바꿀 수 있다.)
테스트인데 테스터가 등록되어 있지 않은지 확인!

조금 헷갈릴 수 있으니 하나씩 잘 살펴봐야 한다.

구글 로그인 실패 버그 메시지는 안드로이드 로그캣을 보면 확인할 수 있다.

아래 메시지로 구글 검색을 해보면 해결방안을 확인할 수 있다.

E/PlayGamesServices[SignInAuthenticator]: ****

APP NOT CORRECTLY CONFIGURED TO USE GOOGLE PLAY GAME SERVICES


    **** DEVELOPER_ERROR
    **** This is usually caused by one of these reasons:
    **** (1) Your package name and certificate fingerprint do not match
    ****     the client ID you registered in Developer Console.
    **** (2) Your App ID was incorrectly entered.
    **** (3) Your game settings have not been published and you are 
    ****     trying to log in with an account that is not listed as
    ****     a test account.
    ****
    **** To help you debug, here is the information about this app
    **** Package name         : __________________
    **** Cert SHA1 fingerprint: __________________
    **** App ID from manifest : __________________
    ****
    **** Check that the above information matches your setup in 
    **** Developer Console. Also, check that you're logging in with the
    **** right account (it should be listed in the Testers section if
    **** your project is not yet published).
    ****

이 버그가 나는 이유는

유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

구글 플레이 콘솔을 사용하기 위해서는 Google Cloud Platform에서 설정해 주어야 하는 것들이 있다.

OAuth 2.0 클라이언트 ID를 두 개를 만들자. (만들어져 있으면 확인)

유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

구글 플레이 콘솔에서 설정 > 앱 무결성을 보면

'앱 서명 키 인증서'와 '업로드 키 인증서' 두 가지가 존재한다. (SHA-1 인증서 지문이 중요)

업로드 키 인증서는 앱을 Keystore로 sign해서 올릴 때 값이 생성되는 것 같다. 귀찮지만 한 번 확인해주었다.

(업로드 키 인증서 SHA-1와 같은지 확인)

keytool 위치:

C:\Program Files\Unity\Hub\Editor\2020.3.14f1\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK\bin\keytool

keytool -list -v -keystore "keystorefile.keystore" -alias "aliasname" -storepass "password" -keypass "password"

유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding
유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

유니티에서 설정하는 Client ID는 Google Cloud Platform에서 앱 서명 키 인증서로 만든 Oauth 2.0 클라이언트 ID를 사용한다.

버그) 리더보드에 점수가 정상적으로 기록되지 않을 때. (리더보드 무한로딩)

증상) Android Logcat을 보면 점수가 정상적으로 보내지고 완료 함수도 작동한다.

하지만 앱에서 구글 리더보드를 열어보면 무한로딩을 확인할 수 있다.

유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding
유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

해결방법) Google Cloud Platform에 Android 클라이언트 ID 만들 때, 이름을 '앱 서명 키 인증서'와 '업로드 키 인증서'로 해서 만들어 두자. 그래야 헷갈리지 않는다.

CloudOnce에서는 Client ID 설정하는 부분이 없는데 구글 플레이 콘솔 > 설정 및 관리 > 설정 > 사용자 인증 정보 > '업로드 키 인증서'로 사용해야 리더보드에 점수가 정상적으로 기록된다.


유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

APK를 바로 설치해서 테스트 하는 경우 불법 복제 방지 사용을 꺼본다. (출시 후 사용으로 설정)

유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

저장된 게임 사용이라면 구글 로그인 할 때 필요한 코드에서 설정을 해준다.

PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
            // 게임 저장 기능을 켭니다. enables saving game progress.
            .EnableSavedGames()

Game appid not licensed to player

유니티 빌드 설정 > 퍼블리싱 설정에서 > 커스텀 메인 매니페스트 체크 박스를 끈다. (혹시 모르니)

Assets\Google\GooglePlayGames\Plugins\Android 폴더에 있는 AndroidManifest.xml 파일에

<application>
    <!-- The space in these forces it to be interpreted as a string vs. int -->
    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="\u003_____id_________" />

구글 플레이 콘솔에 id와 맞는지 확인한다.

유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding
유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

테스터 등록에 내가 테스트 기기에서 사용하는 구글 계정 이메일이 잘 등록되어 있는지 확인한다.

유니티 구글 로그인 무한로딩 - yuniti gugeul logeu-in muhanloding

그래도 구글 로그인이 안 된다면

게시 탭에서 모두 출시 준비 초록색 아이콘이 뜨는지 확인. 출시 버튼이 활성화 돼있는지 확인한다.

signinrequest setting result error status code to: 16

빌드 설정창에서 Proguard File 체크 하고 파일을 만든다음 다음을 추가

-keep class com.google.games.** { _; }

-keep interface com.google.games._* { *; }

또는 CloudOnce 등에서 프로젝트 ID: 141000007975 가 Play 게임즈 서비스 설정과 같은지 확인한다.