새로운 Google Play 서비스 8.3을 사용하여 사용자 토큰 ID를 얻으려고하는데 문서화 된대로 서버 ID를 전달합니다.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.requestEmail()
.build();
하지만 여전히 아래와 같이 성공적이지 않은 결과를 얻고 있습니다.
{statusCode=unknown status code: 12501, resolution=null}
여기에 문서화 GoogleSignInStatusCodes
사용자가 로그인을 취소했습니다. 즉, 사용자가 계정 선택 또는 OAuth 동의와 같은 일부 로그인 해결을 취소했습니다.
상수 값 : 12501
이미 계정을 선택했기 때문에 그것은 내 경우가 아닙니다. 이유가 무엇인지 아십니까?
답변
나는 똑같은 문제가 있었고 해결책을 찾았습니다.
여기에있는 문서를 따르는 경우 :
https://developers.google.com/identity/sign-in/android/start-integrating
첫 번째 단계에서는 구성 파일 (OAuth 2.0 클라이언트 ID를 만들어 google-services.json에 삽입)을 만들도록 지시합니다.
그런 다음 나중에 OAuth 2.0 클라이언트 ID를 만드는 방법에 대해 다시 언급하지만 이번에는 웹 응용 프로그램에 대해 수행해야한다고 말합니다.
그리고 이것은 혼란스러운 부분입니다! (적어도 나를 위해) 나는 안드로이드 OAuth를 위해 생성 된 클라이언트 ID를 취하고 웹 애플리케이션을 위해 새로운 것을 생성하지 않았기 때문에 (문서가 중복되거나 무언가라고 생각했습니다)
그것이 말했듯이, 이것은 이것 뿐이며 requestIdToken 또는 requestServerAuthCode 메소드의 매개 변수로 사용해야하는 유일한 것 입니다.
이 메서드에서 Android OAuth ID를 사용하는 것은 잊어 버리십시오. 그러면 항상 추악한 상태 코드 응답 12501을 받게됩니다.
주된 문제는 문서가 이것에 대해 약간 혼란 스럽다는 것입니다. 또는 두 개의 OAuth ID를 만들어야한다는 사실이 조금 이상하기 때문일 수 있습니다.
요약하자면 Android 용과 웹 애플리케이션 용으로 각각 하나씩 두 개의 OAuth ID가 필요하며 각 ID를 올바른 위치에 설정해야합니다.
답변
나는 이것으로 어려움을 겪었고 거의 일주일을 낭비했습니다.
이것이 내가 일한 방법입니다.
- AndroidStudio에서 프로젝트 가져 오기
- 프로젝트에 대한 디버그 키 저장소를 만듭니다.
- 디버그 키 저장소를 사용하여 프로젝트에 대한 SHA1 서명을 만듭니다.
- SHA1 서명을 사용하여 Google 개발자 콘솔에서 Google 로그인에 앱을 등록합니다.
- 거기에 Google 구성 파일을 생성하십시오. (Android Studio의 앱 폴더에 넣으십시오)
- Android 프로젝트에서 OAuth 2.0 자격 증명의 웹 클라이언트 ID를 사용합니다.
- 이제 Android Studio에서 프로젝트의 디버그 빌드 (APK)를 생성합니다.
- 시스템에 기기를 마운트-> 서명 된 APK 디버그 버전을 복사하여 설치합니다.
마지막 세 단계 6, 7 및 8 은 실제로 처리해야하는 것입니다. 프로젝트를 직접 실행하면 APK가 실제로 디버그 키 저장소로 서명되지 않고 Google에서 전혀 인식하지 못합니다.
답변
동일한 문제가 발생했습니다. 연구 솔루션 후 server_client_id에 잘못된 값이 포함되어 있거나 google_services.json에 키 저장소에 등록 된 client_id와 함께 oauth_client가 포함되지 않았다는 것이 재개되었습니다.
requestIdToken(getString(R.string.server_client_id))
R.string.server_client_id
웹 애플리케이션에 OAuth 2.0 클라이언트 ID를 사용합니다 . google_services.json에서 Android 용 OAuth 클라이언트 ID 사용
일반적으로 2 개의 키 저장소를 사용합니다. 1 개는 디버그 키 저장소를 사용하고 1 개는 게시 용으로 서명 된 키 저장소를 사용합니다. 따라서 디버그 및 게시 모드에서 필요한 경우 Android 용 OAuth 클라이언트 ID를 두 번 등록합니다. 하나는 디버그 키 저장소의 SHA1을 사용하고 하나는 게시를 위해 서명 된 키 저장소에서 사용합니다.
내 google_services.json의 작은 예
"oauth_client": [
{
"client_id": "xxx-client-id.com",
"client_type": 1,
"android_info": {
"package_name": "com.app.android",
"certificate_hash": "xxxhash"
}
},
{
"client_id": "yyy.client-id.com",
"client_type": 1,
"android_info": {
"package_name": "com.app.android",
"certificate_hash": "yyyhash"
}
}
],
답변
동일한 문제가 발생했습니다. Android 애플리케이션 유형의 클라이언트 ID를 생성했기 때문입니다.
대신 삭제하고 웹 애플리케이션 유형의 클라이언트 ID를 생성하여이 문제를 제거했습니다.
답변
이 문제를 해결하는 방법을 알아보세요 … 내 앱의 디버그 버전을 실행하는 동안이 오류가 발생했습니다 … 문제를 해결하려면 개발자 콘솔과 google-services에서 디버그 앱에 대한 자격 증명을 추가하세요. .json.
이것은 나를 위해 그것을 고쳤습니다!
답변
나는 같은 문제가 있었고 다음 해결책으로 해결했습니다.
- 여기에 설명 된대로 구성 파일 (google-services.json)을 만들고 / app 프로젝트 디렉토리에 배치합니다.
- (다른 답변에서 언급했듯이) 웹 응용 프로그램 클라이언트 ID를 사용하여
requestIdToken
방법. - [내 주요 문제] 아래와 같이 디버그 모드에서 작업하는 경우 앱에 서명하세요.
signingConfigs {
release {
storeFile file("myreleasekey.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
}
buildTypes {
release {
...
}
debug {
...
signingConfig signingConfigs.release
}
}
답변
이제 알았습니다.
따라서 먼저 다음과 같은 상위 답변을 따라야합니다.
- Google Developers Console에서 웹 애플리케이션 용 OAuth 클라이언트 ID를 만들고 사용합니다
requestIdToken()
(상태 코드 12501 제거). - 프로덕션 해시 키용 Android OAuth 클라이언트 ID를 만든 경우 디버그 해시 키용 새 Android OAuth 클라이언트 ID를 만들고이를 google-services.json에 통합합니다. (상태 코드 12500 제거)
더 이상 유효
그리고 여기 마지막 부분은 온다 : 3. 호출 할 수 없습니다 requestIdToken()
와 requestEmail()
한 번에. 적어도 제 경우에는 Result: Status{statusCode=INTERNAL_ERROR, resolution=null}
을 삭제하여 제거 했습니다 requestEmail()
.
행운을 빕니다 …