안드로이드용 게임을 개발하시는 분들이라면 Play 게임 서비스를 사용해본 경험이 있으실텐데요. Google Play 게임 서비스 문서에서 로그인 구현 방법을 잘 정리해서 큰 어려움 없이 연동을 할 수 있습니다만, 디버그 모드로 테스터 등록을 하고 로그인을 하면 잘 동작하던 것이 가끔 출시 이후에 플레이 스토어에서 앱을 다운로드한 후에 로그인 시도를 하면 제대로 되지 않는 경우가 있습니다.
로그인에 실패하는 경우는 워낙 다양하기 때문에 이 글이 모두를 만족 시키지는 못할 것을 잘 알고 있지만, 비슷한 경험을 한 분들에게 조금이나마 도움을 드리고자 적게 되었습니다.
혹시 로그인 구현을 원하시는 분은 아래의 링크에서 확인할 수 있습니다. 앱에 따라 필요한 것이 다르겠지만 저대로 사용해도 큰 문제는 없는 것으로 확인했습니다. (2021.2.5 기준) 영어여서 읽기 힘드시다면 우클릭해서 한국어로 번역해서 읽어보세요. 생각보다 깔끔하게 번역이 됩니다.
https://developers.google.com/games/services/android/signin
1. 디버그 모드 : 테스터 등록을 하지 않은 경우
앱 출시 이후의 일은 아니지만 혹시 필요하신 분들이 있을지도 몰라서 적어보겠습니다. (stackoverflow 같은 사이트에 조금 돌아다니다보니 여기서 헤매시는 분들도 종종 보이더군요.) 디버그 모드에서조차 로그인이 되지 않는다면 아마도 테스터 등록을 하지 않은 것이 아닐까 생각이 되네요. 왼쪽 탭의 Play 게임 서비스 -> 설정 및 관리 -> 테스터에서 테스터 탭을 누른 후 테스터로 등록할 이메일을 적어주시면 될 것 같습니다.
보통 디버그 모드에서 로그인이 제대로 되지 않을 경우는 아마 코딩을 잘못했거나, 프로젝트 내의 build.gradle에서 설정을 잘못 했을 가능성이 높은데요, dependencies에 제대로 implement 했는지, 적용이 잘 되었는지 확인해보세요.
2. Play 게임 서비스를 게시하지 않은 경우
의외로 업적이나 리더보드 등 설정을 제대로 한 후에 게시를 안하셔서 연동이 되지 않았을지도 모릅니다. 설정에 사용자 인증 정보가 "출시됨"으로 되어 있는지, 게시 탭에 마무리를 제대로 했는지 확인을 해주세요. 구글에 의하면 플레이 게임 서비스가 적용이 제대로 되기까지 최대 2시간까지 걸릴 수 있다고 합니다.
3. Google Cloud Platform을 사용할 때 OAuth 2.0 설정 문제
로그인 연동을 할 때 보통 파이어베이스 (firebase)를 이용하거나 Google Cloud Platform을 이용할텐데요, 파이어베이스를 사용하지 않아서 이쪽에서 발생하는 문제는 잘 모르고 Google Cloud Platform을 기준으로 설명하겠습니다. (아마 파이어베이스도 등록하는건 다르지 않을 것 같아 동시에 해결되지 않을까 생각합니다.)
앱을 출시한 경험이 있으니 이 포스팅을 찾게 되었을 것이니 구글 플레이에 앱을 등록하기 위해 keystore 세팅하는 것은 해보셨을 것이라 생각합니다. 또한 로그인까지 구현을 하셨던 분들은 OAuth 2.0을 등록하는 것 또한 해보셨을 것입니다. 파이어베이스든, Google Cloud Platform이든 간에 말이죠. 그런데 혹시 SHA-1을 가져올 때 아래와 같이 사용하시지 않았나요?
이렇게 오른쪽 끝에 있는 Gradle 탭을 누르고, app -> Tasks -> android -> signingReport를 눌러 SHA-1을 생성하셨을 수도 있습니다. 이 때 signingReport를 눌렀을 때 생성되는 값들을 한번 보겠습니다.
3:42:40 AM: Executing task 'signingReport'...
Executing tasks: [signingReport] in project /Users/singiyeol/AndroidStudioProjects/onetwothree/app
> Task :app:signingReport
Variant: debug
Config: debug
Store: /Users/singiyeol/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 00:AA:BB:CC:DD:1F:2D:3C:4D:4F:6F:23:11:21:31:33
SHA1: DD:AA:15:00:D0:A1:FA:01:FA:23:06:2D:AF:2D:31:BB:4D:13:51:D2
SHA-256: 33:AA:D2:4E:FA:2D:51:15:BE:ED:1D:2C:AF:D3:7F:3E:B4:FD:0E:12:3D:DE:1F:C5:23:EF:D1:F8:EF:AB:BA:AC
Valid until: 2049년 4월 22일 목요일
----------
Variant: release
Config: none
----------
Variant: debugAndroidTest
Config: debug
Store: /Users/singiyeol/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 00:AA:BB:CC:DD:1F:2D:3C:4D:4F:6F:23:11:21:31:33
SHA1: DD:AA:15:00:D0:A1:FA:01:FA:23:06:2D:AF:2D:31:BB:4D:13:51:D2
SHA-256: 33:AA:D2:4E:FA:2D:51:15:BE:ED:1D:2C:AF:D3:7F:3E:B4:FD:0E:12:3D:DE:1F:C5:23:EF:D1:F8:EF:AB:BA:AC
Valid until: 2049년 4월 22일 목요일
----------
Variant: debugUnitTest
Config: debug
Store: /Users/singiyeol/.android/debug.keystore
Alias: AndroidDebugKey
MD5: 00:AA:BB:CC:DD:1F:2D:3C:4D:4F:6F:23:11:21:31:33
SHA1: DD:AA:15:00:D0:A1:FA:01:FA:23:06:2D:AF:2D:31:BB:4D:13:51:D2
SHA-256: 33:AA:D2:4E:FA:2D:51:15:BE:ED:1D:2C:AF:D3:7F:3E:B4:FD:0E:12:3D:DE:1F:C5:23:EF:D1:F8:EF:AB:BA:AC
Valid until: 2049년 4월 22일 목요일
----------
Variant: releaseUnitTest
Config: none
----------
BUILD SUCCESSFUL in 339ms
1 actionable task: 1 executed
3:42:41 AM: Task execution finished 'signingReport'.
참고로 위의 값들은 실제로 생성된 값이 아닌 아무거나 대충 집어넣은 것입니다. 어쨌든 위와 같은 형태를 볼 수 있는데, 잘 보면 Variant : debugUnitTest, Config : debug라고 되어있는 곳에는 어떠한 키 값이 나타나는데, (Store의 경로도 잘 보면 뒤에 debug.keystore 라고 되어 있습니다.) 대신 release라고 되어 있는 곳에는 Config : none이라고 되어 있습니다. 이게 무엇을 의미하느냐, 즉 signingReport를 눌러서 생성된 SHA-1 값은 debug용이라는 것입니다. 즉 써도 의미가 없는 쓰레기값이라는 말이죠. 이 때 덜컥했습니다. 이미 출시를 해버렸는데 이제와서 키 값이 잘못되었다니? 구글 플레이 콘솔에 다시 앱을 만들고 설정을 다 하고 다시 출시를 해야하나? 하고 말이죠. 다행히도 그럴 필요는 없었습니다. 잘못 된 값을 바꾸기만 하면 되는 것이었습니다.
아래의 첫번째 사진과 같이 구글 플레이 콘솔 -> Play 게임 서비스 -> 설정 -> 사용자 인증 정보에서 인증 부분에 OAuth 클라이언트라고 되어있는 부분이 있을텐데 여기서 Google Cloud Platform 보기를 클릭해주세요. 아니면 구글 클라우드 플랫폼에 직접 들어가셔서 연결된 앱을 봐도 상관없습니다.
아마 아래의 두번째 사진과 같은 화면을 볼 수 있을 것입니다.
아래에 Google Cloud Platform에서 보기 라는 링크로 들어가주세요. |
위의 사진에서 keytool -keystore 어쩌구.. 하는 내용이 있는데, 처음에 이게 왜 필요한지 모르고 무시하고 넘어갔었습니다만, 아주 중요한 코드더군요. 일단 복사해서 메모장 같은 곳에 적어주세요.
이제 앱을 출시할 때 만들었던 keystore를 찾아봅시다. 아마 잘 저장해 두셨을 것입니다. 잃어버렸다면.. 더 이상의 방법은 모르겠네요. 혹시 앱을 출시할 때 Google Play App Signing을 하셨다면 구글에 문의해서 키를 받을 수 있지 않을까 생각합니다.
윈도우를 잘 사용하지 않아서 명령어가 어떻게 되는지는 모르겠지만, 맥 기준으로 터미널을 열고 key를 저장한 위치를 찾아 이동하세요. 이동하고 'pwd'를 입력하면 해당 위치의 경로를 가져올 수 있습니다.
위에서 저장해두었던 코드에서 path-to-debug-or-production-keystore가 경로가 들어갈 곳입니다. 경로를 넣어준 후 엔터를 치고 암호를 입력해주세요. 암호는 키보드를 입력해도 보이지 않는데 걱정하지 말고 다 치고 엔터를 누르면 암호가 입력될 것입니다.
일단 중요해보이는 것은 다 가렸는데.. 여기에 있는 SHA1의 값을 복사해주세요. 다시 구글 클라우드 플랫폼으로 돌아가 SHA-1 인증서 디지털 지문에 아래의 내용을 넣어주세요. 또한 구글 플레이 콘솔의 사용자 인증 정보로 다시 돌아가서 OAuth 클라이언트 새로고침을 눌러주세요. 아마 자동으로 새로고침 되어있을 수도 있지만 혹시 모르니까 한번 해주세요.
여기까지 한 후 release 버젼으로 앱을 빌드하고 테스트해보면 아마 잘 될 것입니다. 아마 다른 구글 API를 사용할 때도 마찬가지로 debug용 key를 사용할 경우 같은 현상이 나타날 수 있습니다. 잘 기억했다가 사용해보세요.
마치며..
위의 방법으로도 해결되지 않는 분들도 분명 있으실테지만, 조금이나마 도움이 되었으면 합니다. 소거법으로 이 방법도 해보고 저 방법도 하다보면 언젠가 해결할 수 있을테니까요. 남들은 다 하는 것 저희만 못하라는 법은 없죠. 다른 방법이 나온다면 최대한 업데이트 해보겠습니다. 다들 잘 해결하시길 응원합니다.
댓글
댓글 쓰기