Android의 새로운 Google 로그인


78

새로운 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

이미 계정을 선택했기 때문에 그것은 내 경우가 아닙니다. 이유가 무엇인지 아십니까?


취소 된 로그인 대화 상자 ( resultCode == Activity.RESULT_CANCELED)의 결과를 처리하려고 할 때 동일한 상태 코드 (12501)가 반환됩니다 . GMS 8.4.0 사용.
오이겐 Pechanec

마지막으로 거의 일주일 동안 고군분투 한 후 저에게 도움이되었습니다. stackoverflow.com/questions/33583326/new-google-sign-in-android/…
Master

1
동일한 코드 12501이보다 사소한 이유로 발생할 수 있습니다 (예 : 인터넷 연결 부족).
ris8_allo_zen0 jul.

@ ris8_allo_zen0 인터넷 연결 부족으로 인해 12501도 받았습니다
Arun

답변:


113

나는 똑같은 문제가 있었고 해결책을 찾았습니다.

여기에있는 문서를 따르는 경우 : 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를 올바른 위치에 설정해야합니다.


2
이것이 정답이어야하며, 반나절 두통을 구했습니다.
abedfar 2015

당신은 정말 저를 도와주었습니다. 이것은 정답입니다!
Markus

확실히 더 많은 찬성표를 얻어야 내 하루를 구했습니다. 도와 주셔서 감사합니다!
Gabriel Falcone

7
@Kaizie 당신이 '라고 말할 때 올바른 위치에 각각을 설정 해야합니다.'정확히 무엇을 의미합니까? 마침내 어디에서나 Android 클라이언트 ID를 사용하지 않습니다.
josealfonsomora

6
@josealfonsomora Android 클라이언트 키는 google-services.json 내부에 있으며 웹 애플리케이션 키는 requestIdToken 또는 requestServerAuthCode 메소드에서 설정해야합니다.
Kaizie

19

나는 이것으로 어려움을 겪었고 거의 일주일을 낭비했습니다.

이것이 내가 일한 방법입니다.

  1. AndroidStudio에서 프로젝트 가져 오기
  2. 프로젝트에 대한 디버그 키 저장소를 만듭니다.
  3. 디버그 키 저장소를 사용하여 프로젝트에 대한 SHA1 서명을 만듭니다.
  4. SHA1 서명을 사용하여 Google 개발자 콘솔에서 Google 로그인에 앱을 등록합니다.
  5. 거기에 Google 구성 파일을 생성하십시오. (Android Studio의 앱 폴더에 넣으십시오)
  6. Android 프로젝트에서 OAuth 2.0 자격 증명의 웹 클라이언트 ID를 사용합니다.
  7. 이제 Android Studio에서 프로젝트의 디버그 빌드 (APK)를 생성합니다.
  8. 시스템에 기기를 마운트-> 서명 된 APK 디버그 버전을 복사하여 설치합니다.

마지막 세 단계 6, 7 및 8 은 실제로 처리해야하는 것입니다. 프로젝트를 직접 실행하면 APK가 실제로 디버그 키 저장소로 서명되지 않고 Google에서 전혀 인식하지 못합니다.


1
5 페이지 (안드로이드 스튜디오의 앱 폴더에 넣기)를 설명해 주시겠습니까?
Aleksey Timoshchenko

그리고 ypu는 어떻게 생각합니까?이 경우 이유가 될 수 있습니다. 한 랩톱에서 Google 콘솔 용 SHA1 키를 생성 한 다음 다른 랩톱의 Android Studio에서 내 debag APK를 빌드했습니다. 이는 Studio가 프로세스 빌드 APK가 다른 랩톱의 SHA1을 사용함을 의미합니다. 그러나 내가 등록 된 APK와 SHA1의 Google matche SHA1을 이해하지 못하는 한 ... 아니요?
Aleksey Timoshchenko

1
어떤 시스템을 사용하든 debug.keystore 키를 생성 한 다음 APK에 서명 할 때마다이를 사용해야합니다. 그냥 서명하세요.
Master

1
@ 마스터 : 고마워요. USB를 사용하여 APK를 설치하고있었습니다. 그게 내 문제였습니다. 지금 수정되었습니다. 감사.
Pawan

나는 꽤 오래 전에 이것을 가지고 있었다. 이번에는 빨리 알아 냈습니다. 내 개발 시스템을 전환 한 후 누락 된 SHA1 해시였습니다.
cybergen

17

동일한 문제가 발생했습니다. 연구 솔루션 후 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"
      }
    }
  ],

패키지 이름이 AndroidManifest.xml에있는 것과 정확히 일치하는지 확인하십시오! 그것은 나에게 많은 두통을 주었다.
jameswoo

서명 된 APK를 게시 한 후 제거하면 개발이 중단됩니다. 앱을 계속 개발하려면 어떻게해야합니까?
Chris Harrison

@ChrisHarrison 네, 맞아요. 나는 대답을 업데이트하고 있습니다.
RaditzLawliet

15

동일한 문제가 발생했습니다. Android 애플리케이션 유형의 클라이언트 ID를 생성했기 때문입니다.

대신 삭제하고 웹 애플리케이션 유형의 클라이언트 ID를 생성하여이 문제를 제거했습니다.


1
제 경우에서 일했습니다.
Roon13

어떤 화면에서이 뷰를 찾을 수 있는지 정확하게 알 수 있습니까?
Dany Pop

이것이 Android를 선택하는 것보다 왜 작동하는지 확실하지 않지만 나에게도 효과적이었습니다. @DanyPoplawec 이것은 개발자 콘솔, 주어진 프로젝트의 API Manager에 있습니다. 왼쪽 메뉴에서 자격 증명을 클릭 한 다음 자격 증명 만들기 버튼을 클릭하고 OAuth 클라이언트 ID를 선택하면이 페이지가 표시됩니다.
mkimmet

8

이 문제를 해결하는 방법을 알아보세요 ... 내 앱의 디버그 버전을 실행하는 동안이 오류가 발생했습니다 ... 문제를 해결하려면 개발자 콘솔과 google-services에서 디버그 앱에 대한 자격 증명을 추가하세요. .json.

이것은 나를 위해 그것을 고쳤습니다!


어떻게했는지에 대해 자세히 설명해 주시겠습니까? 이것은 내 문제 일 수도 있습니다.
JDenais 2015

1
@JDenais, Google 개발자 콘솔> Api Manager> Credentials로 이동하여 디버그 버전 (컴퓨터의 debug.keystore)을 생성하는 데 사용하는 서명 인증서로 Auth 2.0 Android Credential을 만들고 앱의 degub 패키지 이름을 만듭니다. .. 그런 다음이 클라이언트 ID를 google-services.json에 추가합니다. "oauth_client": [{ ":"XXXX ","client_type ": 1,"android_info ": {"package_name ":"com) .fleeber ", certificate_hash": "YYYYYYY"}}, { "client_id": "XXX", client_type ": 1,"android_info ": {"package_name ":"com.fleeber.debug ","certificate_hash ":"YYYY "}}]
Ramon Canales 2015

이전에 Google 로그인으로 작동하는 앱이 있었지만 두 번째로 만든 앱은 동시에 두 개의 계정으로 Google에 로그인했기 때문에 올바르게 구성되지 않았습니다. 완전히 로그 아웃하고 마법사를 다시 진행하여 디버그 인증서 지문을 추가하면 JSON이 올바르게 생성됩니다.
Bron Davies

와우, 당신은 말 그대로 5 시간 이상 온라인에서 끊임없는 검색을 마치고 저를 도와주었습니다. 감사합니다!
O'Kamiye

8

나는 같은 문제가 있었고 다음 해결책으로 해결했습니다.

  1. 여기에 설명 된대로 구성 파일 (google-services.json)을 만들고 / app 프로젝트 디렉토리에 배치합니다.
  2. (다른 답변에서 언급했듯이) 웹 응용 프로그램 클라이언트 ID를 사용하여 requestIdToken방법.
  3. [내 주요 문제] 아래와 같이 디버그 모드에서 작업하는 경우 앱에 서명하세요.
 signingConfigs {
    release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
    }
 }

 buildTypes {
     release {
         ...
     }
     debug {
         ...
         signingConfig signingConfigs.release
     }
 }

4

이제 알았습니다.

따라서 먼저 다음과 같은 상위 답변을 따라야합니다.

  1. Google Developers Console에서 웹 애플리케이션 용 OAuth 클라이언트 ID를 만들고 사용합니다 requestIdToken() (상태 코드 12501 제거).
  2. 프로덕션 해시 키용 Android OAuth 클라이언트 ID를 만든 경우 디버그 해시 키용 새 Android OAuth 클라이언트 ID를 만들고이를 google-services.json에 통합합니다. (상태 코드 12500 제거)

더 이상 유효 그리고 여기 마지막 부분은 온다 : 3. 호출 할 수 없습니다 requestIdToken()requestEmail()한 번에. 적어도 제 경우에는 Result: Status{statusCode=INTERNAL_ERROR, resolution=null}을 삭제하여 제거 했습니다 requestEmail().

행운을 빕니다 ...


2
파트 3의 내용은 분명히 잘못되었습니다. requestIdToken()그리고 requestEmail()한 번에 사용할 수 있습니다. 내 앱에서 성공적으로 사용하고 있습니다.
kirtan403

그렇다면 우리 프로젝트간에 또 다른 차이점이있을 것입니다. 내 프로젝트에서는 설명 된대로 정확하게 작동하기 때문입니다.
cybergen

동의합니다 . 두 가지를 동시에 사용 requestIdToken()하고 requestEmail()있습니다. 그것에는 문제가 없습니다.
Chad Bingham

한 라이브러리 버전의 문제 일 수도 있습니다. 그것은 사라 졌어요.
cybergen 2016-09-22

3

제 경우에는 디버그 SHA-1이 유효한 OAuth Android 클라이언트로 추가되었는지도 확인해야했습니다.


2
12501항상 구성 오류입니다. 여기에서 언급 한 경우와 함께 유효하지 않은 서버 클라이언트 ID 또는 패키지 이름 불일치로 인해이 문제도 발생합니다.
Sam Stern

3

웹 애플리케이션 을 Android 애플리케이션이 아닌 server_client_id로 사용


2

나는 같은 문제가 있었고 server_client_id잘못된 값이 포함 되었을 때 12501 코드가 반환되었음을 알았습니다 .

자세한 메시지가없고이 오류 코드의 문서가 다소 열악하기 때문에 귀하의 문제가 저와 동일한 원인인지 알 수 없습니다.


내 애플리케이션은 이 예제의 Android 코드 (클래스 IdTokenActivity)를 기반으로 합니다. 작동하려면 Google 로그인 을 내 앱 에 통합 해야했습니다 .

  • Google 로그인이 활성화 된 생성 된 json 구성 파일
  • 내 gradle 파일에 Google 플러그인 및 종속성 추가
  • 이 앱에 대한 OAuth 클라이언트 ID를 생성하고 내 프로젝트에 다음과 같이 저장했습니다. server_client_id

2
servier_id가 정확하지 않다고 생각합니다. 나는 다른 것을 시도했다.
Jamal 2015

2

APK가 디버그 모드입니까? 서명 된 APK에서만 작동한다고 생각합니다.



2

내가 가진 문제는 잘못된 별칭으로 생성 한 SHA-1입니다. 별칭 은 androiddebugkey 여야 합니다. 그래서 내 google-service.json 파일에 Android OAuth ID를 넣었습니다 . 웹 클라이언트 ID를 requestIdToken ()에 넣었습니다 . 그리고 내 특정 경우에는 androiddebugkey 별칭을 사용하여 SHA-1을 생성했습니다 .

google-services.json :

"oauth_client": [
    {
      "client_id": "ANDROID OAUTH ID-.....apps.googleusercontent.com",
      "client_type": 1,
      "android_info": {
        "package_name": "br.com.packagename",
        "certificate_hash": "SHA-1 HASH"
      }
    },{
      "client_id": "WEB CLIEND ID......apps.googleusercontent.com",
      "client_type": 3
    }
 ]

서명 부분 :

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken("WEB CLIEND ID......apps.googleusercontent.com")
                .requestEmail() 
                .build(); 

감사합니다. 내가 androiddebugkey 아니라 사용자 디버그 키를 사용해야합니다 이해할 때까지 나는 잃었어요
itzhar

2

대신 R.string.server_client_id사용하십시오.R.string.default_web_client_id .

google-services.json 파일을 앱에 복사 하면이 문자열 값이 자동으로 생성됩니다. google-services.json에서 string.xml로 키를 복사 할 필요가 없습니다.


2

이 문제는 Android Studio에서 Firebase 지원을 클릭하여 해결했는데, 이는 Firebase가 아닌 사용자에게는 해당되지 않을 수 있습니다.

  1. 메뉴 도구-> Firebase로 이동합니다.
  2. 앱을 Firebase에 연결을 클릭하면 연결이 성공하면 녹색으로 연결됨으로 표시됩니다.
  3. 앱에 Firebase 인증 추가 버튼을 클릭하면 녹색으로 바뀝니다.

참고 : 여기에 방대한 답변 목록이 있으면 확실히 한 가지를 확인할 수 있습니다. Google은 문서를 업데이트하고 바보 증거를 유지해야합니다.


1

위의 옵션 중 어느 것도 작동하지 않으면 app build.gradle의 applicationId가 패키지 이름과 동일한 지 확인하십시오.


1

먼저 릴리스 sha1 키가 올바른지 확인하십시오. 그러나 여전히 작동하지 않고 Google Play 서비스 8.4.0 (즉, 'com.google.android.gms : play-services : 8.4.0'컴파일)을 사용하는 경우 GoogleSignInOption 개체를 수정하여 문제를 해결할 수 있습니다. 대신에:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()  
       .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com")
                    .build();

다음을 사용해야합니다.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestScopes(new Scope(Scopes.PLUS_LOGIN))
                .requestScopes(new Scope(Scopes.PLUS_ME))
                .requestEmail()
                .build();

이렇게하면 statusCode = INTERNAL_ERROR OR statusCode = Error 12501 OR statusCode = Error 12500을 반환하는 오류가 해결됩니다. 그러면이 gso 객체를 사용하여 아래와 같이 GoogleApiClient를 만들 수 있습니다.

 mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
               // .addApi(Plus.API, null)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
               // .addScope(Plus.SCOPE_PLUS_LOGIN)
                .build(); 

1

이유를 모르지만 android studio의 SHA1이 자동으로 변경되므로이 오류가 발생합니다. 이 문제를 해결하기 위해 내 Android 스튜디오의 새 SHA1로 내 firebase 프로젝트 설정의 SHA1을 업데이트하고 다시 작동하기 시작했습니다.


1
나는 거기에 업데이트 된 SHA1 firebase를 사용하고 있지만 누군가 Google 콘솔을 사용하면 그에 따라 업데이트해야합니다.
Rahul Sonone

업무용 노트북을 변경했는데 왜 Google 로그인이 더 이상 작동하지 않는지 알 수 없었습니다. 그런 다음 새 노트북에 SHA-1 지문이 달라야하며 Google 개발자 콘솔에 추가해야한다는 사실을 기억했습니다.
mco

그래서 지금 UR 문제가 해결
라훌 Sonone

1

필자의 경우 Google API 콘솔Client ID for Android 에 대한 내 자격 증명에는 출시 서명 된 APK 의 SHA-1 만 포함되어 있습니다. Android Studio는 기본 디버그 키 저장소 를 사용하여 디버그 빌드에 서명했으며이 경우 디버그 키 저장소 SHA-1이 Android 클라이언트 SHA-1 온라인과 일치 하지 않았습니다 . 내 솔루션은 릴리스 키 저장소로 디버그 빌드에 간단히 서명하는 것입니다.

Android 스튜디오에서 Build/Edit Build Types...디버그 빌드 유형을 선택하고 Signing Config가 릴리스 인증서로 설정되어 있는지 확인합니다.

릴리스하도록 설정된 서명 구성


이 손바닥을 향한 순간에 감사드립니다. \\\, (-.-) >>> ///(-.-)
Matthew Weber

실제로 다른 오류 코드가 발생했다고 언급해야합니다. 10 DEVELOPER_ERROR가 발생했지만 이것이 문제였습니다.
Matthew Weber

1

당신이 사용하는 경우 디버그 키 스토어를 프로젝트를 빌드, 당신의 SHA-1 지문 추가 할 필요 하게 debug.keystore을중포 기지 콘솔 .

  1. 당신에 중포 기지 콘솔 , 당신의 프로젝트를 엽니 다
  2. 매개 변수로 이동합니다. 일반
  3. 이 페이지의 끝에 지문 SHA-1 을 추가하는 필드가 있습니다.
  4. 콘솔 필드에 SHA-1을 붙여 넣습니다.

debug.keystore의 SHA-1을 얻으려면 다음을 수행하십시오.

Mac / Linux :

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

Windows :

 keytool -exportcert -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

https://developers.google.com/android/guides/client-auth

그게 다야 !


1

나는 똑같은 문제와 오류 12501이 있었고 위의 것 중 어느 것도 나를 위해 일하지 않았습니다.

내 문제는 나를 위해 생성 된 Google 기본 웹 API 를 사용하는 것입니다. 내 웹 API를 만든 후 오류가 사라지고 정상적으로 작동했습니다!

다음은 작업 단계입니다.

  1. 먼저 SHA1 디버그 키를 만들고 Firebase 콘솔에 추가했습니다 . 여기 에서 SHA1을 생성 합니다 .
  2. 여기 에서 웹 API와 Android OAuth 2.0 클라이언트 ID를 모두 만듭니다.
  3. 생성되다 google-service.json에서 되다Firebase 콘솔 되어 앱 폴더에 저장됩니다.
  4. 이 코드를 넣어 GoogleSignnOption

이렇게 :

gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken
                ("put the web app client Id that get from the link in developer console ")
                .requestEmail().build();

팁 1 : Android 및 웹 앱 클라이언트 ID를 모두 만들어야 작동한다는 것을 알았습니다.

팁 2 : 나 같은이란에서 온 경우 Google에서 사용자를 얻을 수 있지만 할 수 없으며 AuthWithGoogle결과는fail 에서 auth.signInWithCredential(credential)당신은 진정한 반환에 대한 몇 가지 프록시를 사용했다.

이것은 github에서 FireBaseAuthDemo의 전체 소스입니다.

여기에 이미지 설명 입력

희망이 가득 차


자동으로 생성 된 웹 애플리케이션에 설정된 것과 동일한 리디렉션 Uri를 사용 했습니까? 나도이 문제를 겪고 있고 그것은 나를 미치게 만든다!
John Mc

인증 클라이언트에서 "client_type"의 값은 무엇입니까? "client_type": 1과 "client_type"을 선언했습니다. 3. 그것은 무엇을 의미합니까?
rajat44 2011

@JohnMc 여기에 전체 테스트 응용 프로그램을 넣어 github.com/mahdit83/FireBaseAuthDemo
마흐디

@ rajat44 그 파일은 Google 콘솔에서 자동 생성되며 Google이 해당 파일을 처리하는 방법을 모릅니다. 그러나 이것이 당신이 그것을 작동시킬 수있는 방법입니다.
Mahdi

0

앱 자동 서명에 대한 Google의 안내를 따른 후에도이 문제가 발생했습니다 . 이 방법을 사용하여 앱에 서명하는 경우 생성 된 키 저장소 지문을 API 자격 증명에 포함해야합니다.

프로젝트 브라우저에서 앱을 마우스 오른쪽 버튼으로 클릭하고 모듈 설정 열기를 선택합니다.

모듈 열기 설정 스크린 샷 |  앱 |  서명 |  구성

.jks내 프로젝트의 /app디렉토리에 파일 을 넣는 것이 덜 혼란 스럽습니다 . 어쨌든이 줄을 실행하십시오.

keytool -list -v -keystore /home/user/keystores/android.jks

암호를 입력하라는 메시지가 표시됩니다. 그것이 Key Password또는 인지 확실하지 않습니다.Store Password 내 것이 동일하기 때문에 . : |

콘솔은 인증서 지문을 뱉어냅니다. SHA1 하나를 가져 와서 Google API 개발자 콘솔 에서 API 자격 증명에 입력합니다 . OAuth 2.0 client IDs실제로 앱에서 client_id를 사용하지 않더라도 Android 클라이언트에 대해 입력 해야합니다. Android 용 다른 API를 사용하는 경우 아래의 적절한 키 자격 증명 API keys에도 동일한 SHA1을 입력합니다 .


0

여기 새로운 것이 있습니다. 6 시간 동안 회사 Google Apps 도메인의 ID로 에뮬레이터에 로그인하려고했지만 아무 소용이 없었고 12501 오류가 발생했습니다. 직감으로 개인 Gmail ID를 사용해 보았는데 효과가있었습니다. 회사 ID로 전화를 시도해도 마찬가지입니다. 에뮬레이터에 회사 ID가 로그인 할 수있는 적절한 모바일 장치 관리 설정이없는 것으로 나타났습니다.

따라서이 회사 ID로 에뮬레이터에서 테스트하려면 Google Play Store를 설치 한 다음 MDM 소프트웨어를 설치하고 구성해야합니다.


0

이 오류에 대한 이상한 경험에서,이 오류를 제거하려면 휴대 전화를 재부팅해야한다고 말할 수 있습니다. :) Google Admin을 통해 할당 된 기기 정책이있는 G Suite 계정을 사용하여 Google 로그인을 구현했습니다. . 따라서 처음 로그인 할 때 Device Policy 앱을 설치해야했습니다. 이후의 모든 단계가 완료된 후 12501 오류가 발생했습니다. 같은 시간에 같은 앱이 다른 휴대폰에서 제대로 작동했습니다. 그래서 재부팅 만 도움이되었습니다. 하지만 도움이


0

이 질문에 이미 많은 찬성 답변이 있지만 논리를 이해하는 데 어려움을 겪었습니다. 그래서 나는 내 연구를 생각해 냈습니다.

SHA-1을 얻으려면 터미널에서 다음을 실행하십시오.

keytool -exportcert -keystore path-to-debug-or-production-keystore -list -v

OAuth 2.0 client IDs

  • 웹용 OAuth (앱에서으로 사용됨 server_client_id)
  • Android 용 OAuth (올바른 패키지 이름 및 서명 인증서 지문 SHA-1을 사용하여 생성해야 함 ).

디버그 및 릴리스를 위해 다른 키 저장소를 사용하는 경우 OAuth 2.0 client IDs패키지 이름SHA-1을 사용하여 별도로 만들어야합니다 .

OAuth 2.0 client IDs여기 https://console.developers.google.com/apis/credentials?project=를 만들거나 편집 할 수 있습니다.

  1. 앱으로 이동합니다.
  2. Android 용 OAuth가 이미있는 경우 이름을 클릭하고 패키지 이름SHA-1을 확인합니다 .

키 저장소 세부 정보를 전역 (프로젝트 내부가 아닌 로컬)에 저장하고 아래와 같이 gradle.properties가져 와서 디버그 및 릴리스에 동일한 키 저장소를 사용할 수 있습니다 build.gradle.

def key_alias = ""
def key_password = ""
def store_file = ""
def store_password = ""

try {
    key_alias = YOUR_KEY_ALIAS
    key_password = YOUR_KEY_PASSWORD
    store_file = YOUR_KEYSTORE_PATH
    store_password = YOUR_KEYSTORE_PASSWORD
} catch (Exception exception) {
    throw new IllegalStateException('Failed to find key store details. Social Login is disabled');
}

android {
    signingConfigs {
        config {
            keyAlias key_alias
            keyPassword key_password
            storeFile file(store_file)
            storePassword store_password
        }
    }

    buildTypes {
        debug {
            signingConfig signingConfigs.config
            // ...
        }
        release {
            signingConfig signingConfigs.config
            // ...
        }
    }
}

아래 스 니펫을 사용할 수 있습니다.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            // ...
        } else if (result.getStatus().getStatusCode() == CommonStatusCodes.NETWORK_ERROR) {
            // No internet connection
        } else if (result.getStatus().getStatusCode() == CommonStatusCodes.DEVELOPER_ERROR) {
            // Wrong server OAuth key(server_client_id)
        } else if (result.getStatus().getStatusCode() == 12501) {
            // Wrong app signing-certificate fingerprint SHA1
        } else {
            Log.e("Google sign in error", result.getStatus().toString());
        }
    }
}

참고 : 구성 파일을 생성 할 때 Google 로그인 만 사용하도록 설정 한 경우 google-servies.json프로젝트에 파일 을 추가 할 필요가 없습니다 (파일 생성시 필요한 구성 단계가 수행됨).


0

다음 단계를 따르십시오.

  1. 다음 프로젝트 https://github.com/googlesamples/google-services를 복제합니다.

  2. https://developers.google.com/identity/sign-in/android/start 에서 가이드를 따르세요.

  3. 웹 클라이언트 (Google 서비스에서 자동 생성)를 사용하고 requestIdToken (...)에 추가합니다.

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
       .requestEmail()  
       .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com")
       .build();
    
  4. Google 프로젝트에 추가 된 것과 동일한 키 저장소를 사용하고 있는지 확인하십시오. 예를 들어 다음 명령을 사용하여 SHA-1 키를 생성 한 경우

    keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore    
    
  5. 그런 다음 android {...} 내부의 app / build.gradle 파일에 다음 코드를 추가합니다. [내 문제 해결]

    signingConfigs
    {
        debug 
        {
            storeFile file("/home/ashwin/.android/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
    
    buildTypes
    {
        release
        {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug
        {
            signingConfig signingConfigs.debug
        }
    }
    

참고 : keyPassword 및 keyAlias는 SHA-1 인증서 생성 중에 사용 된 것과 동일해야합니다.


0

1. gradle 파일에 signingConfigs 지정

signingConfigs {
        config {
            keyAlias 'appalias'
            keyPassword 'hunter123'
            storePassword 'hunter123'
            storeFile file('path/to/keystore.jks')
        }
}

2. Build Types in Project Structure (in Android Studio)로 이동하여 signingConfigs를 "config"로 지정합니다.

이제 프로젝트를 정리 하고 다시 빌드하십시오. 작동합니다.

위의 방법이 작동하지 않으면 아래가 마지막 수단입니다.
1 단계를 시도하고 빌드하고 확인하십시오. 작동하지 않으면 다음 단계로 이동하여 다시 빌드하십시오.

  1. 서명 된 APK를 빌드합니다 (암호 기억 선택).
  2. 서명하기 전에 키 저장소 파일의 파일 이름과 apk에 서명하는 동안 제공 한 파일 (Android 스튜디오에서)을 확인하십시오.
  3. 기기에 서명 된 APK를 설치합니다.
  4. 5 분간 기다립니다.
  5. Google에 노래 해보세요. 여전히 12501이 올 경우 5 분 더 기다리십시오. 그 히트 gradle sync를 수행하는 동안.
  6. 다시 시도하십시오. 작동합니다.

0

앱이 웹보기에서 Google 로그인을 요청하므로 웹 애플리케이션 인증 클라이언트 ID v2.0을 만들어야합니다.

  1. Google API 자격 증명으로 이동

    왼쪽 상단에서 Android 프로젝트를 선택하십시오.

    2

  2. 자격 증명 생성-> OAuth 클라이언트 ID-> 웹 애플리케이션 선택을 클릭합니다.

  3. 확인을 클릭하십시오.

  4. 이제 Android Studio를 Firebase (로그인)와 동기화 한 경우 프로젝트를 다시 빌드하세요. 그렇지 않으면 업데이트 된 google-services.json 파일을 다운로드 하고 기존 파일을 바꿉니다.

    잘 작동합니다.


0

나도 같은 문제가 있으며 다음과 같이 해결되었습니다.

  1. 이전에 생각했던 SHA1을 삭제하고 새 SHA1을 만들고 설정하도록 만들어졌습니다.

  2. 새로 생성 google-services.json하고 내 앱 디렉토리에 설정

  3. 정확히 Google 개발자 코드를 사용했습니다.

  4. result.isSucces()프로젝트를 실행 한 후 내 반환 사실

요약하면 이전 sha1을 삭제하고 새 sha1을 만들고 새 google-services.json을 다운로드합니다.


0

나는 같은 12501 status오류 에 직면했다 . 이는 릴리스 APK와 디버그 APK의 SHA-1 불일치 때문입니다.

  1. 서명 된 APK를 만듭니다. APK에 서명하려면 SHA-1 생성에 사용한 키 저장소의 기존 경로를 선택합니다. 예 :/.android/debug.keystore
  2. 별칭 이름 제공 : androiddebugkey
  3. storepass 및 keypass : android.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.