[Flutter] 구글 아이디 로그인 구현 중 플레이스토어 배포시 오류 해결 PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)

플러터에서 구글 아이디 로그인 구현 중 아래와 같은 오류가 나고 제대로 로그인 처리가 되지 않는 경우가 있습니다.

I/flutter (18381): [EXCEPTION] PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)

저의 경우에는 Debug 모드에서는 정상적으로 로그인 기능이 잘 되는데 Release 모드로 빌드 후 Playstore에 등록 후 실제 구글 플레이 스토어에서 정식(혹은 내부 테스트 버전)으로 설치해서 구글 로그인해 보면 제대로 되지 않습니다.

가장 먼저 체크할 부분은 firebase 콘솔에 프로젝트 설정에서 SHA-1 인증서 지문이 등록되지 않아서 생기는 문제일 가능성이 가장 높습니다.

1. 구글 플레이 스토어용 앱 서명 키 인증서 알아내기

구글 플레이 콘솔에 로그인한 후 문제가 되는 앱을 선택하시고 메뉴에서 설정 > 앱 무결성 > 앱 서명 탭으로 이동합니다. 그러면 아래와 같은 화면을 볼 수 있습니다.

구글 플레이 콘솔 > 앱 서명 SHA-1 인증서 지문

위와 같이 화면에 있는 SHA-1 지문을 이제 파이어베이스 콘솔로 가서 등록해야 합니다.

SHA-1 지문을 복사해 파이어베이스 콘솔 앱 설정에 등록해야 합니다.

2. 파이어베이스 콘솔로 가서 앱서명 SHA-1 인증서 지문을 등록

파이어베이스 콘솔로 가서 로그인합니다. 앱을 선택하면 아래와 같은 화면이 나옵니다.

파이어베이스 콘솔 > 프로젝트 설정 > 일반 > 내 앱

여기서 파이어베이스 콘솔 > 프로젝트 설정(기어 아이콘) > 일반 탭페이지 하단에 내 앱 목록으로 이동합니다.

목록에서 안드로이드 앱 중 문제의 해당 앱을 선택하면 SHA 인증서 지문 목록이 비어있을 겁니다. 여기에 구글 플레이 콘솔에서 복사해둔 SHA-1 인증서 지문을 ‘디지털 지문 추가’ 버튼을 클릭해 추가합니다. (기본적으로 firebase 관련 기본 설정을 진행하였다면 앱이 이미 추가되어 있습니다.)

참고로 혹시 디버그 모드에서도 구글 로그인이 작동하지 않는다면 디버그용 SHA-1 지문을 등록해주면 됩니다. 디버그용 앱 서명 키정보를 확인하려면 플러터 프로젝트 폴더에서 아래와 같이 입력하면 됩니다. (참고로 개발환경은 우분투 리눅스 22.04 입니다. 각 환경에 맞게 대응하시기 바랍니다.)

$ cd android/
$ ./gradlew signingReport

...(중략)...

> Task :url_launcher_android:signingReport
Variant: debugAndroidTest
Config: debug
Store: /home/doogle/.android/debug.keystore
Alias: AndroidDebugKey
MD5: ??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??
SHA1: ??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??
SHA-256: ??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??:??
Valid until: 2052년 5월 9일 목요일
----------

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 4s
16 actionable tasks: 16 executed

./gradlew signingReport 실행결과를 보면 위와 비슷하게 나오는데요. 여기서 SHA1 지문을 마찬가지로 복사해서 파이어베이스 콘솔에 등록해 주면 됩니다.

3. google-services.json 파일을 다운 받아 프로젝트에 적용

SHA1 지문 추가 후 다시 google-services.json 파일을 다운로드해 플러터 프로젝트 폴더의 하위에 android/app/ 폴더에 복사합니다.

google-services.json 파일에는 client.oauth_client에 새로운 항목이 추가되었을 겁니다.

이제 flutter build appbundle 해서 릴리스 빌드 파일을 구글 플레이 콘솔에 등록하면 됩니다.

처음에는 로컬 개발 환경에서 keytool로 생성한 업로드용 서명을 아무리 등록해도 안돼서 계속 허튼짓만 했네요. 잘 생각해 보면 앱 서명이 필요한데 현재 appbundle 방식으로 올리는 경우 로컬로 만든 키 정보는 업로드용 키 정보라서 실제 앱 서명 키가 아닙니다. 앱 서명 키는 구글 플레이 콘솔에서만 얻을 수 있는 것이죠. (업로드 키와 앱 서명키 관련 설명은 https://developer.android.com/studio/publish/app-signing?hl=ko#api-providers 을 읽어보시면 좀 더 쉽게 이해하실 수 있습니다.)

출시 버전 문제는 테스트하기 쉽지않고 오류 잡기가 참 까다로운 경우가 많습니다. 특히 이런 타사 서비스를 이용해야 하는 경우 문제가 많이 발생하는데요. 겨우 해결해서 다행입니다. ^^

참고 문헌