빠른 답변
Google 로그인 오류 10(DEVELOPER_ERROR)은 Android 앱이 잘못 구성되었다는 뜻입니다. 로컬에서는 로그인이 되는데 Play 비공개 테스트에서 실패한다면, Play에서 설치된 앱의 서명 SHA-1과 최종 패키지 이름이 올바른 Firebase 또는 Google Cloud 프로젝트에 등록되어 있는지 확인하세요. 또한 serverClientId 또는 webClientId에 Android 클라이언트 ID가 아니라 웹 애플리케이션 클라이언트 ID가 들어가 있는지 확인해야 합니다. 그런 다음 Google Play에서 설치한 빌드로 다시 테스트하세요.
이 글은 한 가지 문제만 다룹니다. Google Play가 배포한 앱에서만 네이티브 Google 로그인이 실패하는 경우입니다. 비슷해 보이는 다른 오류와 이 문제를 구분한 다음, 프레임워크별 확인 사항, 다른 로그인 제공업체, 테스터가 보고해야 할 내용을 차례로 설명합니다. 인용한 Google 페이지는 모두 2026년 10월 16일에 확인했으며, 커뮤니티 보고는 그렇다고 명시했습니다. 출처는 글 끝에 정리되어 있습니다.
이 페이지의 내용
Play 빌드에서 Google 로그인 문제 해결하기
테스터가 설치한 앱과, 그 앱에 등록된 패키지 이름 및 서명 SHA-1을 일치시키세요. 아래 단계를 순서대로 진행하면 되며, Firebase 경로와 Google Cloud 경로는 그 뒤에 이어집니다.
어느 설치본이 실패하는지 확인
테스터가 Google Play의 비공개 테스트에서 앱을 설치했는지 확인하고, 설치된 버전을 기록하세요. 그다음 해당 빌드의 최종 애플리케이션 ID를 기록합니다. Android 빌드 가이드에 따르면 애플리케이션 ID는 applicationId 속성으로 정의되며, 이 값은 소스의 namespace와 다를 수 있고 빌드 변형(flavor)에서 접미사가 붙을 수도 있습니다. 테스터가 앱을 아예 설치할 수 없다면 다른 문제입니다. 테스터에게 앱이 제공되지 않는 이유를 참고하세요.
Play 앱 서명 열기
Play Console에서 앱을 열고 Protected with Play로 이동하세요. Google은 2026년 5월에 앱 서명을 이곳으로 옮겼으며, Google 도움말은 다음 단계를 두 가지 이름으로 안내합니다(아래 표 참고). 어느 경로를 따라가든 같은 페이지에 도착합니다.
| Google 문서에 적힌 경로 | Google이 이 경로를 쓰는 곳 | 그곳에서 열 항목 |
|---|---|---|
| Protected with Play > Play Store distribution > Go to Play app signing | Google이 이 경로를 쓰는 곳Play Console 고객센터, Play App Signing 사용의 API 등록 섹션 | 그곳에서 열 항목App signing key certificate(앱 서명 키 인증서), 그다음 SHA-1 값 |
| Protected with Play > Play Store protection > Manage Play app signing | Google이 이 경로를 쓰는 곳Google Play의 2026년 5월 업데이트 안내 및 같은 도움말 페이지의 다른 섹션 | 그곳에서 열 항목같은 페이지이며, 메뉴 이름은 계정마다 다를 수 있습니다 |
앱 서명 키 SHA-1 복사
업로드 키 인증서가 아니라 App signing key certificate(앱 서명 키 인증서) 섹션을 열고 SHA-1을 복사하세요. Play에 앱의 서명 키가 두 개 이상 표시된다면 해당하는 지문을 모두 등록합니다(여러 개의 서명 인증서 참고). 기존 디버그 지문과 로컬 지문은 그대로 두고 Play 지문을 그 옆에 추가하세요. 로그인 문제를 해결하려고 서명 키를 교체(rotation)하지 마세요.
앱이 로그인하는 곳에 등록
앱이 사용하는 방식에 따라 Firebase 경로 또는 Google Cloud 경로를 따르고, 앱 안의 클라이언트 ID를 발급한 바로 그 프로젝트를 사용하세요.
설치된 Play 빌드로 재테스트
Firebase나 Google Cloud에서 등록만 변경했다면, 새로 빌드하기 전에 Play에서 이미 설치한 앱으로 다시 시도해 보세요. 등록만 수정했는데 새로 업로드하지 않고도 해결되었다는 개발자 보고가 있습니다. 번들된 구성 파일, 클라이언트 ID, 코드 또는 종속성을 변경했다면 같은 비공개 트랙에 새 빌드를 업로드하고 그 빌드로 테스트하세요. Google은 새 지문이 적용되기까지 걸리는 시간을 공개하지 않으므로, 정해진 시간을 기다리지 말고 다시 테스트하세요.
Firebase에 Play 인증서 추가하기
Play 서명 지문을 추가하기 전에 일치하는 Android 앱을 선택하세요. 아래 단계는 Firebase의 지문 도움말과 Google 로그인 가이드를 따릅니다.
- Firebase Console에서 앱이 사용하는 프로젝트를 연 뒤 Project settings > General(프로젝트 설정 > 일반)로 이동합니다.
- Your apps(내 앱)에서 패키지 이름이 실패하는 빌드와 일치하는 Android 앱을 선택합니다.
- Add fingerprint(디지털 지문 추가)를 클릭하고 Play 앱 서명 SHA-1을 붙여 넣은 뒤 저장합니다. 기존 지문을 대체하지 말고 그 옆에 추가하세요.
- Authentication > Sign-in method에서 Google이 사용 설정되어 있는지 확인합니다.
- Firebase가 업데이트된
google-services.json을 다운로드하라고 안내하면 프로젝트의 파일을 교체하세요. Firebase는 이 파일에 “Google 로그인에 필요한 OAuth 클라이언트 정보가 들어 있다”고 설명하므로, 파일이 바뀌었다면 새 빌드가 필요합니다. 파일의 프로젝트와 패키지가 실패하는 앱과 일치하는지 확인하세요.
SHA-256은 특정 Firebase 서비스가 요구하는 경우에만 추가하세요. 예를 들어 전화 인증은 Play Integrity 경로에 SHA-256을 사용합니다. Google 로그인 자체는 SHA-1을 기준으로 합니다.
Firebase 없이 Google Cloud 구성하기
두 개의 OAuth 클라이언트는 서로 다른 역할을 합니다. Android 클라이언트는 앱을 등록하고, 웹 클라이언트 ID는 토큰 요청에 사용됩니다.
| 클라이언트 유형 | 담고 있는 정보 | 사용하는 곳 |
|---|---|---|
| Android | 담고 있는 정보패키지 이름과 서명 인증서의 SHA-1 | 사용하는 곳네이티브 앱의 신원을 등록합니다. 이 클라이언트 ID는 serverClientId에 붙여 넣지 않습니다. |
| 웹 애플리케이션 | 담고 있는 정보웹 클라이언트 ID | 사용하는 곳토큰 요청의 serverClientId 또는 webClientId, 그리고 백엔드가 허용하는 대상(audience)입니다. Google의 Google 계정으로 로그인 Codelab은 이 클라이언트가 “Google 로그인 서비스의 백엔드 클라이언트 역할을 한다”고 설명합니다. |
- 클라이언트 ID를 발급한 프로젝트를 선택한 뒤 Google Auth platform > Clients를 엽니다(Google Cloud 도움말).
- 새로 만들기 전에 이 패키지 이름과 SHA-1을 가진 Android 클라이언트가 이미 있는지 확인합니다.
- 없다면 Create Client를 선택하고 Application type을 Android로 설정한 뒤, 이름, 패키지 이름, Play 앱 서명 SHA-1을 입력하고 Create를 누릅니다. Android 양식에는 SHA-1 입력란이 있으며, SHA-256은 이곳에 넣지 않습니다.
- 필요한 패키지와 인증서 조합을 각각 등록합니다. 예를 들어 디버그, 로컬 릴리스, Play용입니다.
- 토큰 요청용 웹 클라이언트는 그대로 두고, 클라이언트 보안 비밀(client secret)은 절대 앱 안에 넣지 마세요.
해결되었는지 검증하기
한 번 로그인에 성공했다고 해서 릴리스가 고쳐졌다는 증거는 아닙니다. 이 체크리스트는 Google 규칙이 아니라 저희가 권장하는 인수 테스트입니다. 마지막 행이 중요한 이유는, 한 개발자의 경우 처음에는 로그인이 통과했지만 다음 로그인에서 다시 실패했기 때문입니다. 한 번만 확인해서는 놓치는 세션 문제였습니다.
| 확인 항목 | 통과 기준 | 실패할 경우 |
|---|---|---|
| 올바른 앱과 버전 | 통과 기준테스터가 의도한 Play 설치본과 빌드임을 확인합니다 | 실패할 경우릴리스 또는 트랙 배포 문제를 먼저 해결합니다 |
| 첫 로그인 | 통과 기준계정을 선택하면 로그인된 상태로 앱에 돌아옵니다 | 실패할 경우정확한 예외를 기록하고 아래 오류 표를 참고합니다 |
| 로그인이 필요한 기능 | 통과 기준테스터가 로그인이 필요한 기능을 사용할 수 있습니다 | 실패할 경우앱과 백엔드의 토큰 처리를 점검합니다 |
| 로그아웃 후 다시 로그인 | 통과 기준다시 설치하지 않아도 두 번째 로그인이 됩니다 | 실패할 경우세션 처리와 제공업체 로그아웃 처리를 조사합니다 |
| 이전에 문제가 있던 기기 | 통과 기준같은 테스터와 같은 기기에서 이제 성공합니다 | 실패할 경우인증서, OS, 계정, 실제 빌드를 비교합니다 |
| 테스트 연속성 | 통과 기준테스터가 여전히 테스트에 참여 중이고, 수정 내용을 기록해 두었습니다 | 실패할 경우테스트 참여 문제는 로그인과 별도로 해결합니다 |
디버그에서는 로그인이 되는데 비공개 테스트에서는 왜 실패할까요?
Google Play를 통해 설치된 앱은 로컬에서 설치하는 APK와 서명자가 다를 수 있습니다. Google의 클라이언트 인증 가이드에는 “Android 스튜디오는 디버그 인증서로 앱에 자동으로 서명합니다”라고 나와 있습니다. 직접 빌드한 릴리스는 해당 변형에 구성된 키로 서명됩니다. Play App Signing을 사용하면 업로드 키는 업로드하는 번들에 서명하고, 테스터가 받는 APK에는 Google이 앱 서명 키로 서명합니다.
이 키들은 역할이 다르지만 값이 항상 다른 것은 아닙니다. 직접 서명 키를 제공할 수도 있고, 하나의 키를 두 가지 역할에 쓰는 구성도 있습니다. 키 이름이 아니라 실제 지문을 비교하세요.
| 설치된 앱 | 확인할 인증서 | 첫 조치 |
|---|---|---|
| Play App Signing을 사용하는 Play 내부, 비공개, 공개 또는 프로덕션 설치 | 확인할 인증서Protected with Play에 있는 Play 앱 서명 인증서(하나 또는 여러 개) | 첫 조치해당하는 Play SHA-1을 모두 등록합니다 |
| Android Studio 디버그 실행 | 확인할 인증서해당 컴퓨터의 디버그 인증서 | 첫 조치일치하는 애플리케이션 ID로 그 SHA-1을 등록합니다 |
| 내 컴퓨터에서 빌드한 릴리스 APK | 확인할 인증서해당 릴리스 변형에 구성된 인증서 | 첫 조치“릴리스”라고 해서 Google이 서명했다고 가정하지 마세요 |
| 내부 앱 공유 링크 | 확인할 인증서내부 앱 공유 전용 테스트 인증서 | 첫 조치테스터가 이 경로를 사용한다면 별도로 등록합니다 |
내부 앱 공유는 내부 테스트가 아닙니다
Google의 내부 앱 공유 도움말에는 “모든 APK는 이 테스트 인증서로 다시 서명됩니다”라고 나와 있습니다. 이 인증서는 Test and release > Internal testing > Internal app sharing > Uploaders and testers > Internal test certificate에서 찾을 수 있습니다. 내부 테스트 트랙과 비공개 테스트 트랙은 이 인증서가 아니라 Play 앱 서명 키를 사용합니다.
지문을 직접 확인하기
내 컴퓨터에서 만든 빌드라면 Gradle 서명 보고서가 모든 변형의 SHA-1과 SHA-256을 출력하고, keytool로 디버그 키 저장소를 직접 읽을 수 있습니다(요청되면 키 저장소 비밀번호를 입력하세요).
./gradlew signingReport
keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
로컬 서명 보고서로는 Play 설치본에 무엇이 서명했는지 알 수 없습니다. 실패하는 빌드 자체를 확인하려면 비공개 테스트에서 기기에 앱을 설치하고, adb로 APK를 가져온 뒤 apksigner로 인증서를 출력하세요. Google 문서에 따르면 apksigner는 “APK의 서명 인증서 정보”를 보여 줍니다. 패키지 이름을 바꾸고, 첫 번째 명령이 출력한 경로를 사용하세요.
adb shell pm path com.example.app
adb pull /data/app/.../base.apk failing-play.apk
apksigner verify --print-certs failing-play.apk
SHA-1을 추가했는데도 계속 실패합니다
설정을 더 바꾸기 전에 실패하는 APK의 인증서, 최종 애플리케이션 ID, 클라이언트 ID를 비교하세요. 아래 단계를 위에서부터 차례로 확인하면 각 행마다 원인 하나를 배제할 수 있습니다.
| 확인 항목 | 비교할 대상 | 판단 |
|---|---|---|
| 1. 설치본과 트랙 | 비교할 대상테스터가 실제로 설치한 Play 앱과 테스트하려던 버전 | 판단로컬 서명 보고서는 Play 서명자를 증명하지 못합니다 |
| 2. 인증서 | 비교할 대상실패하는 Play APK에 대한 apksigner verify --print-certs 출력과 등록한 값 |
판단필요한 서명자를 모두 등록하고, 이미 설치한 사용자에게 여전히 필요한 기존 항목은 유지합니다 |
| 3. 최종 애플리케이션 ID | 비교할 대상빌드된 변형의 applicationId(flavor 접미사 포함)와 등록된 패키지 | 판단소스의 namespace는 기준이 아닙니다 |
| 4. 프로젝트와 웹 클라이언트 | 비교할 대상릴리스 빌드와 백엔드가 실제로 사용하는 프로젝트와 웹 클라이언트 ID | 판단지문이 맞아도 여기에 오타가 있으면 로그인이 실패합니다 |
| 5. 제공업체와 클라이언트 존재 여부 | 비교할 대상제공업체로 사용 설정된 Google, 그리고 그 뒤에 있는 Android 및 웹 클라이언트 | 판단다른 프로젝트가 같은 조합을 점유하고 있다면 아래 충돌 안내를 참고하세요 |
| 6. 오류 유형 | 비교할 대상네이티브 코드 10, Credential Manager 취소, 백엔드의 토큰 거부, 브라우저 리디렉션 불일치 | 판단각각 별개의 원인입니다. 오류 표를 참고하세요 |
| 7. 프레임워크 릴리스 문제 | 비교할 대상리소스 축소(shrinking), 실제 적용된 라이브러리 버전, 초기화 | 판단무작정 업그레이드나 다운그레이드하지 말고 변경 기록과 확인된 수정 사항을 근거로 삼습니다 |
4번 행은 이론이 아닙니다. 2026년 9월에 보고된 Expo 사례에서는 지문을 추가해도 아무것도 달라지지 않았고, 실제 원인은 백엔드가 허용하는 클라이언트 ID의 오타였습니다.
여러 개의 서명 인증서 또는 업그레이드된 키
하나의 앱에 서명 신원을 두 개 이상 등록해야 할 수도 있습니다. Google의 최신 Play App Signing 도움말은 세 개의 앱 서명 키를 사용하는 하이브리드 서명을 설명하며 각 키의 지문을 모두 등록하라고 안내합니다. 또한 서명 키를 업그레이드한 앱에도 이전 키로 서명된 설치본이 남아 있을 수 있습니다. 실제 설치본이 가진 신원을 등록하고, 아직 작동하는 기존 항목은 삭제하지 마세요. 키 교체는 이 글의 범위가 아니며, 로그인 문제의 해결책도 아닙니다.
다른 프로젝트가 이미 이 패키지와 SHA-1을 사용 중인 경우
Firebase의 충돌 도움말에 따르면 패키지 이름과 SHA-1 조합은 “모든 Firebase 및 Google Cloud 프로젝트에서 고유해야” 합니다. 다른 프로젝트가 지문을 이미 갖고 있어서 Console이 등록을 거부한다면, 무엇이든 삭제하기 전에 해당 OAuth 클라이언트를 어느 프로젝트가 소유하는지부터 찾으세요. Google 지원팀이 충돌 위치를 찾는 데 도움을 줄 수 있습니다. 추측으로 활성 클라이언트나 프로젝트를 삭제하지 마세요.
오류 10은 12500, 12501, canceled와 같은 오류인가요?
아닙니다. 실패한 로그인을 모두 하나의 문제로 취급하기 전에, 정확한 오류와 그 오류를 낸 라이브러리를 확인하세요. Google의 공통 상태 코드 참조 문서는 DEVELOPER_ERROR = 10을 “애플리케이션이 잘못 구성되었습니다”로 정의합니다. 아래의 다른 코드는 Google의 이전 play-services-auth 21.6.0 SDK에서 나온 것입니다.
| 표시되는 오류 | 의미 | 다음 단계 |
|---|---|---|
ApiException: 10 또는 DEVELOPER_ERROR |
의미앱 구성 오류 | 다음 단계서명자, 패키지, 프로젝트, 클라이언트 ID를 비교합니다 |
12500 |
의미SIGN_IN_FAILED: “복구할 수 없는 로그인 실패가 발생했습니다” |
다음 단계전후 로그를 확인하고, 오류 10으로 취급하지 않습니다 |
12501 |
의미SIGN_IN_CANCELLED: “로그인 작업이 취소되었습니다” |
다음 단계사용자가 실제로 취소했는지, 어느 API에서 발생했는지 확인합니다 |
Credential Manager 또는 Flutter의 canceled |
의미실제 취소이거나 구성 문제 | 다음 단계예외 세부 정보와 설정을 점검하고, 진단을 마친 뒤 사용자가 다시 시도하게 합니다 |
NoCredentialException |
의미반환된 사용자 인증 정보가 없음. 인증서 문제로 단정할 수 없습니다 | 다음 단계등록뿐 아니라 계정 사용 가능 여부와 요청 구성도 확인합니다 |
| Google 토큰은 정상인데 백엔드가 거부함 | 의미Google 사용자 인증 정보를 받은 이후 단계의 문제 | 다음 단계백엔드가 허용하는 대상(audience)과 클라이언트 ID를 확인합니다 |
redirect_uri_mismatch |
의미브라우저 OAuth 리디렉션이 승인된 URI와 일치하지 않음 | 다음 단계해당 흐름의 콜백 구성을 수정합니다 |
| Play 링크에서 “항목을 찾을 수 없음” | 의미로그인이 아니라 설치 또는 자격 문제 | 다음 단계앱이 제공되지 않을 때의 확인 사항을 따르세요 |
기존 Google 로그인과 Credential Manager
Google의 Play 서비스 출시 노트에는 2024년 4월 16일 play-services-base에서 Google 로그인 API가 지원 중단되었다고 나와 있으며, Google은 2024년 9월 11일 Credential Manager로의 전환을 발표했습니다. 이후 이 API는 2026년 8월 26일 play-services-auth 22.0.0에서, 2026년 9월 17일 play-services-base 18.11.0에서 “Google 로그인 관련 API를 삭제했습니다”라는 안내와 함께 제거되었습니다. 이것은 SDK 변경이며, 이미 설치된 앱의 서비스 종료일을 의미하지는 않습니다. 새 코드와 업그레이드는 Google의 이전 가이드를 따르세요.
두 API는 실패하는 방식이 다릅니다. Credential Manager에는 오류 10이 없으며, 문제 해결 가이드는 “"취소"가 많이 발생한다면 실제로는 구성 오류일 수 있습니다”라고 경고합니다. 따라서 취소는 구성 오류일 수도, 실제 취소일 수도 있으며, NoCredentialException은 또 다른 신호입니다.
Flutter, React Native, Expo, Unity 확인 사항
위의 네이티브 신원 확인은 모든 프레임워크에 적용되지만, 설정, 초기화, 빌드 구성은 프레임워크마다 다릅니다. 사용하는 프레임워크의 경로와 앱에 실제로 적용된 라이브러리 버전을 기준으로 확인하세요.
| 프레임워크 | 고유 확인 사항 | 단정하지 말 것 |
|---|---|---|
| Flutter | 고유 확인 사항Android 구현체인 google_sign_in_android는 7.0.0에서 Credential Manager로 전환되었습니다. 웹 클라이언트 ID를 serverClientId로 전달하세요. 7.2.16 변경 기록에는 “리소스 축소 도구가 default_web_client_id 리소스를 제거하지 않도록 유지”한다는 항목이 있으며, 이는 릴리스에서만 발생하는 실패와 관련이 있습니다. |
단정하지 말 것모든 canceled 결과가 SHA 문제라거나, 다운그레이드가 만능 해결책이라는 생각. |
| React Native | 고유 확인 사항라이브러리의 어떤 API를 사용하는지 파악하고, 웹 클라이언트 ID를 webClientId로 전달한 뒤, 실제 applicationId와 실패하는 APK를 확인하세요. 문제 해결 가이드에는 “Play 스토어에서 다운로드하면 로그인이 되지 않음” 항목이 있으며, 구성 확인 명령도 제공합니다(아래 참고). |
단정하지 말 것이슈 트래커에서 닫힌 이슈가 해결의 증거라는 생각. |
| Expo | 고유 확인 사항네이티브 Google 로그인에는 개발 빌드 또는 커스텀 빌드가 필요합니다. Expo 가이드에는 “이 라이브러리들은 커스텀 네이티브 코드가 필요하므로 Expo Go에서 사용할 수 없습니다”라고 나와 있습니다. EAS 또는 로컬 서명 인증서와 Play 앱 서명 인증서를 구분하세요. | 단정하지 말 것Expo Go가 릴리스 흐름을 재현한다거나, 다시 빌드하면 잘못된 백엔드 클라이언트 ID가 고쳐진다는 생각. |
| Unity | 고유 확인 사항Firebase Authentication과 Unity Authentication 중 무엇을 사용할지 정하고, 지원되는 플랫폼 통합으로 Google ID 토큰을 받은 다음 해당 백엔드와 교환하세요(Firebase의 Unity 가이드). Google의 기존 Unity 로그인 샘플은 2026년 4월 19일에 보관 처리되었습니다. | 단정하지 말 것Play 게임즈 로그인과 Google 계정 로그인이 같은 통합이라는 생각. |
React Native의 경우 라이브러리 관리자가 프로젝트 루트에서 실행할 수 있는 구성 확인 도구를 제공합니다.
npx @react-native-google-signin/config-doctor
Supabase, Facebook, Apple, Auth0에서는 무엇이 달라지나요?
어떤 인증서, 클라이언트 ID, 콜백이 일치해야 하는지는 제공업체와 로그인 흐름에 따라 결정됩니다. Google SHA-1은 네이티브 Google 로그인의 해답이지만, 다른 제공업체에서는 잘못된 해시이거나, 잘못된 형식이거나, 아예 관련이 없을 수 있습니다.
| 제공업체 또는 흐름 | 일치해야 하는 항목 | 설정 위치 |
|---|---|---|
| Firebase를 사용하는 네이티브 Google | 일치해야 하는 항목설치된 패키지와 SHA-1, 웹 클라이언트, 제공업체로 사용 설정된 Google | 설정 위치Firebase 프로젝트 설정의 지문, 그리고 Authentication |
| Supabase를 사용하는 네이티브 Google | 일치해야 하는 항목네이티브 Android 신원과 웹 클라이언트 ID. Supabase 가이드에는 “웹 클라이언트 ID가 Android 앱에서 사용하는 ID입니다”라고 나와 있습니다. | 설정 위치Google의 Android 및 웹 클라이언트, 그다음 Supabase의 Google 제공업체 설정 |
| Supabase 브라우저 OAuth | 일치해야 하는 항목웹 클라이언트, Supabase 콜백, 앱의 복귀 링크 | 설정 위치Google의 승인된 리디렉션 URI와 Supabase 리디렉션 설정. SHA 수정은 해당되지 않습니다 |
| Android의 Facebook | 일치해야 하는 항목콜론으로 구분된 16진수가 아니라, 서명 인증서 SHA-1 바이트로 만든 Base64 키 해시 | 설정 위치Facebook 앱 설정의 Android 키 해시(Expo Facebook 가이드에 문서화된 경로) |
| Android의 Apple 웹 로그인 | 일치해야 하는 항목Services ID, 도메인, 반환 URL | 설정 위치Apple의 Sign in with Apple 웹 구성. Google의 DEVELOPER_ERROR 메커니즘과는 무관합니다 |
| Android에서 Firebase를 통한 Apple 로그인 | 일치해야 하는 항목Apple 설정과 앱의 SHA-1 | 설정 위치Firebase의 Apple 가이드: “아직 지정하지 않았다면 앱의 SHA-1 지문을 지정하세요.” |
| Android의 Auth0 | 일치해야 하는 항목허용된 콜백 URL과 앱 스킴, 사용하는 경우 앱 링크 신원 | 설정 위치Auth0 애플리케이션 설정. Android SDK readme는 앱 링크 설정에 SHA-256 키 해시를 사용합니다 |
| Firebase 전화 인증 | 일치해야 하는 항목Play Integrity에는 SHA-256, reCAPTCHA 대체 경로에는 SHA-1 | 설정 위치Firebase 전화 인증: Google 로그인과는 별개의 흐름 |
로그인을 WebView로 옮기지 마세요
Google 로그인을 삽입된 WebView로 처리하는 것은 우회책이 아닙니다. Google의 OAuth 2.0 정책에 따르면 개발자는 “Google OAuth 2.0 승인 요청을 삽입된 사용자 에이전트로 보내서는 안 됩니다.”
테스터는 개발자에게 무엇을 보내야 하나요?
유용한 보고서는 실패하는 Play 빌드와 로그인이 멈추는 정확한 지점을 알려 줍니다. 테스터가 다시 시도한다고 OAuth 등록이 고쳐지지는 않으므로, 테스터의 역할은 반복 시도가 아니라 증거 수집입니다. 이 템플릿을 복사해 테스터에게 보내세요.
앱 및 Play 테스트 링크:
설치된 앱 버전 또는 빌드:
설치 경로: Play 비공개 테스트 / 기타 경로
기기 및 Android 버전:
날짜, 시간, 시간대:
정확한 오류 문구 또는 개인정보를 가린 스크린샷:
멈춘 지점: 계정 선택 화면 전 / 계정 선택 후 / 앱으로 돌아온 후
다른 로그인 방법으로는 앱을 열 수 있었나요?
재테스트 결과 및 버전:
수정하는 동안 테스터에게 테스트 참여를 유지해 달라고 요청하세요. 비밀번호, OAuth 토큰, 비공개 키, Play Console 액세스는 절대 요청하지 마세요. 수정 후에는 같은 테스터에게 로그인이 필요한 기능을 열어 본 다음 로그아웃했다가 다시 로그인하고, 버전과 결과를 기록해 달라고 요청하세요.
오류 10이 비공개 테스트나 프로덕션 액세스에 영향을 주나요?
로그인 구성 오류는 테스트 참여와는 별개의 문제입니다. 오류 10은 Play 정책 거부 코드가 아니며, 저희가 찾아본 Google 규칙 중에 이 오류로 테스터의 참여 기간이 초기화된다고 한 것은 없습니다. Google의 테스트 요구사항 페이지는 비공개 테스트 기간 중 앱을 개선하도록 권장하므로, 테스터의 참여를 유지한 채 같은 비공개 트랙에 수정 사항을 배포하세요. 이는 공개된 규칙을 해석한 것이며, 모든 경우를 보장하는 약속은 아닙니다.
그렇다고 로그인 오류가 사소한 것은 아닙니다. Google Play의 기능 정책에는 “비정상 종료, 강제 종료, 정지 등 비정상적으로 작동하는 앱은 허용되지 않습니다”라고 나와 있으며, 로그인 장벽이 있으면 테스터가 테스트해야 할 기능에 접근할 수 없습니다. 프로덕션 액세스를 신청하기 전에 문제를 해결하고, 검토자에게 작동하는 로그인 정보를 제공하세요. 이미 검토 결과를 받았다면 Broken Functionality 거부를 참고하세요.
참고로, 2023년 11월 13일 이후에 만든 개인 개발자 계정은 해당 앱의 프로덕션 액세스를 신청하기 전에 최소 12명의 테스터가 14일 동안 지속적으로 테스트에 참여해야 합니다. 신청 후에 대해 Google은 “검토는 일반적으로 7일 이내에 완료되지만 경우에 따라 더 오래 걸릴 수 있습니다”라고 안내합니다. 테스터가 인원수에 집계되지 않는다면, 로그인을 건드리기 전에 테스터를 어떻게 초대했는지 확인하세요.
14일 동안 참여할 실제 테스터가 필요하신가요?
테스터는 OAuth 등록을 고칠 수 없으므로 먼저 로그인이 작동하도록 만드세요. 로그인이 작동하면 PrimeTestLab이 12명 이상의 실제 테스터를 제공합니다. 테스터들은 실제 Android 휴대전화에 Play 빌드를 설치하고 14일 내내 테스트 참여를 유지하며, 가격은 $19.99부터입니다(서비스 수수료 5% 추가). 전체 테스트를 마친 뒤에도 Google이 프로덕션 액세스를 승인하지 않으면 무료 재테스트 또는 전액 환불 중에서 선택할 수 있습니다. 테스터 12명 비공개 테스트 진행 방식 보기.
자주 묻는 질문
디버그에서는 Google 로그인이 되는데 비공개 테스트에서는 왜 안 되나요?
디버그 APK와 Google Play에서 다운로드한 앱은 서로 다른 인증서로 서명될 수 있으므로, 디버그 지문을 등록해도 Play 빌드는 구성되지 않습니다. Play 앱 서명 SHA-1부터 확인한 다음, 릴리스 빌드의 최종 패키지 이름과 앱이 실제로 사용하는 클라이언트 ID를 확인하세요.
이제 Play App Signing SHA-1은 어디에서 찾나요?
Play Console에서 앱의 Protected with Play 페이지를 여세요. Google 도움말은 Play Store distribution, 그다음 Go to Play app signing으로 안내하고, 현재의 다른 Google 문서는 이를 Play Store protection과 Manage Play app signing이라고 부릅니다. App signing key certificate(앱 서명 키 인증서) 섹션을 열어 SHA-1을 복사하고, 앱에 추가 키가 표시되어 있다면 그것도 확인하세요.
Google 로그인에는 SHA-1이 필요한가요, SHA-256이 필요한가요?
Google의 Android OAuth 클라이언트는 패키지 이름과 SHA-1 서명 인증서 지문으로 앱을 식별하며, SHA-256이 이 입력란을 대신하지 않습니다. 다른 서비스는 요구 사항이 따로 있습니다. 예를 들어 Firebase 전화 인증은 Play Integrity에 SHA-256을, reCAPTCHA 대체 경로에 SHA-1을 사용합니다. 앱이 사용하는 흐름에 맞게 서비스별로 구성하세요.
이미 SHA-1을 추가했습니다. 다음에는 무엇을 확인해야 하나요?
그 SHA-1이 업로드 키나 디버그 키가 아니라 Play에서 설치한 앱의 것인지 확인하세요. 그다음 최종 애플리케이션 ID, Firebase 또는 Cloud 프로젝트, 웹 클라이언트 ID를 비교합니다. 앱에 서명 인증서가 여러 개라면 그것도 확인하세요. 지문이 맞더라도 백엔드가 허용하는 클라이언트 ID에 오타가 있으면 로그인이 실패할 수 있습니다.
지문을 추가한 뒤 AAB를 다시 업로드해야 하나요?
반드시 그렇지는 않습니다. Firebase나 Google Cloud에서 등록만 수정했는데 이미 설치된 앱에서 해결되었다는 개발자 보고가 있습니다. 클라이언트 ID, 구성 파일, 코드 또는 종속성을 변경했다면 새 빌드로 테스터에게 전달해야 합니다. 무엇을 변경했는지 확인한 다음, 진단 없이 반복해서 다시 빌드하지 말고 실제 Play 설치본을 검증하세요.
새 지문이 적용되기까지 얼마나 걸리나요?
Google은 지문 적용에 걸리는 시간을 따로 공개하지 않으며, 저희가 검토한 개발자 스레드에서도 이를 측정한 사례는 없었습니다. 올바른 구성을 저장하고 다시 시도하세요. 그래도 실패한다면 정해진 시간을 기다리지 말고 설치된 인증서와 클라이언트 설정을 검증하세요. 기다린다고 불일치가 해결되지는 않습니다.
취소하지 않았는데 왜 canceled라고 나오나요?
일부 Credential Manager 및 프레임워크 통합은 구성 문제나 승인 문제를 취소로 보고하지만, 실제로 취소된 경우일 수도 있습니다. 설정을 바꾸기 전에 예외 유형과 메시지를 기록하고, 프레임워크의 문제 해결 가이드를 확인하며, 현재 API와 기존의 12501 SIGN_IN_CANCELLED 상태를 구분하세요.
serverClientId에 넣는 것이 Android 클라이언트 ID인가요?
아닙니다. 문서화된 네이티브 Google 통합에서 serverClientId 또는 webClientId는 토큰 요청에 사용하는 웹 애플리케이션 OAuth 클라이언트입니다. Android 클라이언트는 패키지와 서명 인증서를 등록하는 역할을 합니다. 두 클라이언트를 모두 구성하고, 클라이언트 ID를 무작정 바꿔 넣지 말고 백엔드가 의도한 토큰 대상(audience)을 허용하는지 확인하세요.
오류 10 때문에 14일 비공개 테스트가 다시 시작되나요?
저희가 찾아본 Google 규칙 중에 이 오류로 참여 기간이 초기화된다고 한 것은 없으며, Google은 비공개 테스트 중 개선을 권장합니다. 따라서 테스터의 참여를 유지한 채 기존 트랙에서 수정하세요. 그렇다고 앱이 준비되었다는 뜻은 아닙니다. 로그인 장벽은 유용한 테스트를 막고, 신청 전에 반드시 고쳐야 하는 기능 문제로 남을 수 있습니다.
테스터에게 무엇을 보내 달라고 해야 하나요?
설치된 버전, Play 테스트 링크, 기기와 Android 버전, 정확한 오류, 로그인이 멈추는 단계를 요청하세요. 개인정보를 가린 스크린샷이나 짧은 화면 녹화가 있으면 도움이 됩니다. 수정 후에는 같은 테스터에게 로그인이 필요한 기능을 사용해 본 다음 로그아웃했다가 다시 로그인해 달라고 요청하되, 로그인 정보는 공유하지 않도록 하세요.
핵심 정리
핵심 정리
Google 로그인 오류 10은 앱이 잘못 구성되었다는 뜻이며, Play에서 받은 앱만 실패한다면 가장 먼저 서명 인증서를 확인해야 합니다. Protected with Play에서 앱 서명 키 SHA-1을 복사해, 앱이 사용하는 바로 그 Firebase 또는 Google Cloud 프로젝트에 빌드의 최종 패키지 이름과 함께 등록하세요. serverClientId에는 웹 클라이언트 ID를 그대로 두고, 테스터가 설치한 빌드로 두 번째 로그인까지 포함해 다시 테스트하세요. 그래도 실패한다면 다른 설정을 바꾸기 전에 설치된 APK의 인증서, 애플리케이션 ID, 클라이언트 ID를 비교하세요.
확인한 출처(2026년 10월 16일)
Play Console과 Firebase의 메뉴 이름은 이 페이지에서 가장 빨리 바뀌는 정보입니다. 위의 경로가 내 Console과 더 이상 맞지 않는다면, Play 앱 서명은 Protected with Play에서, 지문은 Firebase 프로젝트 설정의 Android 앱 항목에서 찾아보세요.