source

com.google.android.gms.common.api에 로그인하지 못했습니다.API 예외: 10:

manycodes 2023. 7. 15. 10:19
반응형

com.google.android.gms.common.api에 로그인하지 못했습니다.API 예외: 10:

그래서 저는 이 답답한 문제에 갇혀 있습니다.저는 Firebase에서 Google Auth를 처음 사용하지만 Google SignIn Auth를 통합하는 방법에 대해 Firebase 문서에서 지시한 모든 작업을 수행했지만 콘솔에서 다음 두 부분으로 구성된 이상한 오류 메시지가 표시됩니다.

12-03 11:07:40.090 2574-3478/com.google.android.gms E/TokenRequestor: You have wrong OAuth2 related configurations, please check. Detailed error: UNREGISTERED_ON_API_CONSOLE

그리고 또한

Google sign in failed com.google.android.gms.common.api.ApiException: 10:

스택 오버플로에 대해 이전에 질문했던 유사한 질문을 모두가 지적하기 전에 사용 가능한 모든 솔루션을 보고 지금까지 수행한 작업은 다음과 같습니다. 그러나 오류는 해결되지 않았습니다.

  • 프로젝트에 사용할 SHA1 지문이 있습니다.
  • 나는 나의 OAuth 2.0 클라이언트 ID, Android 클라이언트 ID, 웹 클라이언트 ID 및 requestId를 가지고 있습니다.토큰() 웹 클라이언트 ID를 입력했습니다.
  • 저는 구글 플레이 스토어에 제 프로젝트의 APK를 게시하지 않았습니다.그 말은 제가 실수로 또 다른 SHA1 지문을 생성하지 않았다는 뜻입니다.
  • Auth Firebase 문서에서 Google 서명을 단계별로 수행했습니다.

다음은 제 코드 조각입니다.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    ButterKnife.bind(this);

    String webClientId = getString(R.string.web_client_id);


    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestIdToken(webClientId)
            .build();

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();

    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);


    GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);


    googleLoginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent signInIntent = mGoogleSignInClient.getSignInIntent();
            startActivityForResult(signInIntent, RC_SIGN_IN);
        }
    });

}



@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        // The Task returned from this call is always completed, no need to attach
        // a listener.
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);

        try{

            GoogleSignInAccount account = task.getResult(ApiException.class);
            firebaseAuthWithGoogle(account);

        } catch (ApiException e) {
            // Google Sign In failed, update UI appropriately
            Log.w(TAG, "Google sign in failed", e);
            // [START_EXCLUDE]
            Toast.makeText(this, "Gooogle Auth failed", Toast.LENGTH_LONG);
            // [END_EXCLUDE]
        }

    }
}



private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
    // [START_EXCLUDE silent]
    //showProgressDialog();
    // [END_EXCLUDE]

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        Toast.makeText(LoginActivity.this, "Successful Auth", Toast.LENGTH_LONG).show();
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(LoginActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        //updateUI(null);
                    }

                    // [START_EXCLUDE]
                    //hideProgressDialog();
                    // [END_EXCLUDE]
                }
            });
}

는 기적으문제에 .SHA1콘솔에 올려진 키를 재생성하고 동일한 프로젝트를 올바르게 다시 설치하십시오.

정답은 실제 서명된 Android인지 확인하십시오.apk같은 것을 가지다SHA1의 Android Android를 다운로드할 수 있는 페이지)의 .google-services.json)

자세한 내용은 다음을 참조하십시오.플라우터 앱용 SHA-1 생성

그 위에 파이어베이스 프로젝트의 설정(왼쪽 상단 영역의 개요 오른쪽에 있는 기어 아이콘)으로 이동합니다.그런 다음 계정 연결 탭으로 전환합니다.해당 탭에서 Google Play를 프로젝트에 연결합니다.

편집: 계정 연결 탭이 더 이상 존재하지 않습니다. 대신:

  1. 파이어베이스에 로그인합니다.
  2. 설정 아이콘을 클릭한 다음 프로젝트 설정을 선택합니다.
  3. 통합 탭을 클릭합니다.
  4. 카드에서 Play를 클릭합니다.Link.

enter image description here

Google Play Firebase별 App Signing 사용 시 App 서명 인증서(Google Play Console/Release Management/App 서명 인증서에 있음)의 SHA-1 지문을 Firebase Console/Settings/SHA 인증서 지문에 추가해야 합니다.

: SHA는 다음과 .Google Play Console > Release > Setup > App integrity

저의 경우에는 문제가 없습니다.SHA-1

는 난했을 .GoogleAuth용사를 Firebase.

추가하는 것을 잊었습니다.implementation 'com.firebaseui:firebase-ui-auth:4.3.1'

그리고 저는 제 열쇠를 대신 넣었습니다.R.string.default_web_client_id그래서 그게 문제였습니다.에 의존성을 하고 대체했습니다.R.string.default_web_client_id내 열쇠로.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

업데이트: 2020년 12월 18일

는 또한 수할도있다니 없이 할 수 .requestIdToken.이를 위해서는 SHA1을 구글 콘솔에 추가해야 합니다.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();

저도 같은 문제에 직면했습니다. 해결책을 찾기 위해 지문 재생에서부터 파이어베이스의 앱을 구글 플레이 콘솔에 연결하고 서명된 앱을 게시하는 것까지, 문제는 사실 파이어베이스 콘솔에서 릴리스 SHA-1을 사용했기 때문이었습니다.

  • 여전히 디버그 모드에 있는 경우 디버그를 사용합니다.키 저장소 SHA1
  • 운영 모드인 경우에만 SHA1 릴리스를 사용하십시오.

https://developer.android.com/studio/publish/app-signing.html

내 해결책은 조금 달랐지만,

몇 시간 동안 다양한 것들을 시도한 후에.솔루션을 찾았습니다.

https://stackoverflow.com/a/34223470/10575896 에 나열된 단계를 사용합니다.

  1. 안드로이드 스튜디오 열기
  2. 프로젝트 열기
  3. Gradle 클릭(오른쪽 측면 패널에서 Gradle Bar가 표시됨)
  4. 새로 고침을 클릭합니다(그라들바에서 새로 고침을 클릭하면 프로젝트의 그라들 스크립트 목록이 표시됩니다).
  5. 프로젝트 클릭(프로젝트 이름 양식 목록(루트))
  6. 작업 클릭
  7. Android 클릭
  8. 서명 보고서를 두 번 클릭합니다(실행 표시줄에 SHA1 및 MD5가 표시됩니다(때로는 Gradle 콘솔에 표시되기도 함).

콘솔은 디버그 및 릴리스 모두에 대한 SHA 키를 출력합니다.저는 과거에 디버그 키를 파이어베이스에 추가했지만 릴리스 키는 추가하지 않았습니다.

저는 단지 SHA1과 SHA256 키를 소방서에 추가했고, 저는 괜찮습니다.

SHA-1과 같은 Firebase에서 모든 구성이 유효하고 올바른 Google-services.json 파일을 가져온 경우에도 오류가 발생하면 Firebase 콘솔에 지원 이메일을 추가합니다.

파이어베이스 콘솔에서 지원 이메일을 추가해야 합니다. 프로젝트로 이동 -> 설정 -> 일반 -> 공용 설정 지원 이메일 추가

저는 이 문제를 이틀 동안 다루고 있었습니다! 문제는 제가 사용한 clientId, 제가 사용한 clientId, 제가 웹 애플리케이션 유형의 clientid를 사용해야 하는 동안 안드로이드 유형이었습니다. 같은 문제가 있다면 고려해주세요;)

  1. 사하게함을 사용하게 ..requestIdToken(getString(R.string.default_web_client_id))이 가너언제▁you▁when제가Build GoogleSignInOptions:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();
  1. 추가할 항목debug.keystore다음 단계를 통해 의 SHA1 및 SHA256 지문을 Firebase 프로젝트에 입력합니다.
  2. 지문: -keystore 지문: Linux/Mac -keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore- Windows -keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore
  3. Firebases 프로젝트의 Android 앱 섹션에 다음 지문을 추가합니다. https://support.google.com/firebase/answer/9137403?hl=en

2022년인데 이걸 디버깅하는데 7시간이나 걸렸어요!저는 안드로이드 개발자가 아니기 때문에 지금까지 무엇이 무엇인지 몰랐습니다.

이것이 제가 일을 하기 위한 방법입니다.

dev와 prod 사이에 빌드 번호가 달라야 합니다!

세상에는 3가지 빌드/앱이 있습니다.

  1. Google Play Store에서 설치할 수 있는 파일입니다.Play Store와 App -> Hold -> info 모두에 빌드 번호가 연결되어 있습니다.
  2. Android Studio 빌드에서 릴리스 빌드 버전이 있는
  3. Android Studio 빌드에 디버그 빌드 버전이 있는

enter image description here

debug 아이콘와 디버거를 첨부할 수 있는 입니다.release당신이 할 수 없는 것입니다.

여러분이 무엇을 하든, 이것들이 다르다는 것을 확인하세요, 그렇지 않으면 여러분은 왜 그것이 여기서 작동하는지 그리고 저기서 작동하지 않는지 여러분의 머리를 잡아당길 것입니다!

Android:태그 > 빌드 > 릴리스 > 즉시 버전 범프

저는 출시 직전에 태그와 버전을 지정하는 배경에서 왔습니다. (예: 백엔드) 여기서 그렇게 하면 모든 것이 엉망이 됩니다!따라서 태그를 지정한 다음 릴리스하고 버전을 즉시 범프해야 합니다!

가 이상적입니다1.1.7▁be이어야 합니다.1.1.8에 한 ) 버전은 (으, 네할버기때한버앞에전합)이어야 합니다.1.1.8-debug.

그렇게 하지 않고 동일한 패키지/APK를 Android OS에서 캐시합니다.따라서 PlayStore에서 앱을 설치하더라도 자체 인증서와 함께 캐시에 저장된 Android Studio 버전을 사용할 수 있습니다. (PlayStore에서 동일한 앱을 두 대의 전화기에 설치하면 다른 동작이 발생하는 이유를 알 수 없었습니다. 하나는 Android Studio USB 빌드에서 캐시된 APK를 사용하고 있었습니다.)

GCP에서 최소 4개의 다른 Oauth 클라이언트 ID 키가 필요합니다!

이 시점에서 Android용 "웹" OAuth Client ID와 더미 Android ID를 만들어야 한다는 미친 시스템을 인식해야 합니다!이거 보세요.

예, Google SignIn이 작동하려면 "웹" 키와 "안드로이드" 키가 하나 필요합니다."Web"은 거의 모든 곳에서 사용해야 합니다(JWT의 대상/발행자를 확인하는 서버 측 토큰 검증은 제외).그럼에도 불구하고, 사용하지 않는 더미 "안드로이드" 없이는 작동하지 않을 것입니다.

그런데 제가 몰랐던 부분은 안드로이드 3개 + 웹 1개가 필요하다는 것이었습니다!

Android OAuth Client ID를 생성하면 SHA-1을 요청합니다.

enter image description here

그리고 이 3개의 앱은 각각 자체 인증서, 즉 SHA-1s를 가지고 있습니다.

3대의 SHA-1을 얻는 방법은?

의 경우(2 의 3 우 경 및 의 경 우 ( ▁for 2)release그리고.debugAndroid Studio의 경우) 이 솔루션을 통해 Gradle에서 얻을 수 있습니다.

enter image description here

> Integrity > App Signing" (는 귀하의 "App signing" 인증서와 .)release가장 가능성이 높은 하나.)

enter image description here

이제 이 3개의 Android Ouath Client ID + 1 for Web을 생성하면 Google SignIn이 모든 곳에서 작동할 수 있기를 바랍니다.

enter image description here

각 답변에 문제가 있었기 때문에 다음과 같은 해결책이 제시되었습니다.

먼저 프로젝트에 Firebase를 추가합니다.

파이어베이스 웹사이트로 이동 -> 프로젝트 추가 -> 새 프로젝트를 생성하면 앱 추가로 이동하여 안드로이드 앱을 추가합니다.

정확한 패키지 이름과 디버그 SHA-1 키를 추가해야 합니다.

Android Studio에서 다음을 수행하여 디버그 SHA-1 키를 생성할 수 있습니다.

오른쪽에서 Gradle 패널을 엽니다 -> 작업 -> 안드로이드 -> 서명 보고서 실행

SHA-1 키가 실행 창에 표시됩니다.

앱을 등록하면 구성 파일을 다운로드합니다.config.json 파일에서 client_id : client -> oauth_client -> client_id를 찾을 수 있습니다.

의 client_id가 있으므로 주의하십시오."client_type": 3을 가진 사람은 다음 코드로 저를 위해 일했습니다.

private fun requestSignIn(context: Context) {

    GoogleSignIn.getLastSignedInAccount(context)?.also { account ->
        onSignedIn(account)
        return
    }

    val signInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestScopes(Scope("https://www.googleapis.com/auth/spreadsheets"))
        .requestEmail()
        .requestIdToken("client_id_goes_here")
        .build()
    val client = GoogleSignIn.getClient(context, signInOptions)

    startActivityForResult(client.signInIntent, REQUEST_SIGN_IN)
}

그런 다음 onActivityResult:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == REQUEST_SIGN_IN) {
         if( resultCode == RESULT_OK) {
            GoogleSignIn.getSignedInAccountFromIntent(data)
                .addOnSuccessListener { account ->
                    onSignedIn(account)
                }
                .addOnFailureListener { e ->
                    Log.d("Fail", "Fail")
                }
          }
    }
}

OnSignedIn에서 Google Sheet API 호출을 수행해야 합니다.

SHA1 및 SHA256 앱 서명 인증서를 추가한 후에도 여전히 작동하지 않았습니다.SHA1업로드 인증서를 추가하자 작동했습니다 :)

여러분, 안드로이드 스튜디오 SDK 매니저에 구글 플레이 서비스를 설치했는지 확인하세요.제가 한 후에, 통합 프로젝트를 다시 시작합니다. 모든 것이 잘 작동합니다.enter image description here

저는 동일한 오류에 직면했고 이를 해결하기 위해 값을 수정했습니다.WEB_CLIENT_ID값은 다음에서 확인할 수 있습니다.인증 -> 로그인 방법 -> 공급자(예: Google) -> 웹 SDK 구성 -> 웹 클라이언트 ID

이것이 원인인지는 모르겠지만, 게시하기 전에 Android App에서 웹 클라이언트 ID를 사용해야 할 수도 있습니다. 다음 기사를 읽어 보십시오.

https://android-developers.googleblog.com/2016/03/registering-oauth-clients-for-google.html

SHA1 및 SHA256 앱 서명 인증서를 추가하면 작동합니다.

저의 경우 에뮬레이터 작업을 위해 https://stackoverflow.com/a/46767856/6800637, 단계를 수행했고, https://console.firebase.google.com projectName/settings/general을 입력하는 것 외에도 제 시그니처 키 sha1과 sha256을 [ssha1]에서 sha1 키를 입력했습니다.keystore](키스토어)는 위에서 언급한 단계를 따를 때 표시됩니다.

이 상태 코드는 알 수 없는 서버 클라이언트 ID를 제공하고 있음을 의미합니다.

Android 클라이언트에서 OAuth Client ID를 변경하여 이 문제를 해결할 수 있었습니다.

googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken("web application client id")
            .requestEmail()
            .build()

프로젝트의 https://console.developers.google.com/apis/credentials 에서 다음을 생성해야 할 수 있습니다.OAuth 클라이언트 ID -> Web Application을 작성하고 Android 앱에서 이 웹 애플리케이션 클라이언트 ID를 사용합니다.

enter image description here

최근 Firebase를 사용하여 Google 사인을 사용하려고 할 때 이 문제가 발생했습니다.requestId를 업데이트하여 수정할 수 있습니다.Google-services.json 파일에서 client_id로 제공된 토큰에 대한 GoogleSignInOptions 옵션.

이것들은 모두 훌륭한 답변입니다. 다른 사람이 하나의 앱에 대해 여러 파이어베이스 프로젝트를 수행하려고 하는 경우, 즉 개발 및 프로덕션을 테스트하려는 경우 앱 서명을 관리하기 위해 Google Play를 사용하는 경우 APK를 Google Play에 업로드해야 합니다.내부 테스트 트랙을 사용했는데 작동하기 시작했습니다.

APK가 Firebase의 프로덕션 키와 일치하지 않기 때문에 디버그 키로만 장치에 설치할 수 없습니다.

다른 사람들이 언급한 것처럼 어떤 이유로 Android OAuth 클라이언트가 아닌 "웹" OAuth 클라이언트 ID를 사용해야 합니다.이것은 구글이 하기에는 정말 혼란스러운 일입니다.

튜토리얼과 구성 페이지에서는 매니페스트 파일에서 패키지 이름을 가져오라고 제안하지만 "app/build.gradle" 파일의 "applicationId"에 대해 확인된 것 같습니다.

제가 지금까지 찾은 패키지 이름을 설정할 곳은 두 곳입니다.

app/src/main/AndroidManifest.xml

app/build.grade roid.defaultConfig.application이드

제 경우에는 그 두 이름이 달랐습니다.이전에 첫 번째 파일에서 패키지 이름을 업데이트했지만 build.gradle 파일에서 업데이트하는 것을 잊었습니다.

만약 당신이 불안하다면, 당신의 구글 사인인을 초기화한 곳을 보세요, iOS에서 작동했던 clientId 매개 변수를 추가하지만 안드로이드를 깨트리는 것도 시도해 보세요.

Firebase에서 동일한 Project 아래에 여러 개의 앱이 있는 경우 올바른 (App) com에 있는지 확인합니다.xxx.yyy, 당신이 안드로이드 스튜디오에서 하고 있는 당신의 현재 프로젝트와 일치합니다.그런 다음 적절한 (App)com에서 Firebase 설정의 sha1을 변경합니다.xxx.yyyy를 다운로드하고 프로젝트 수준에서 앱을 봅니다->빌드->소스.

프로젝트에 대해 SHA-1/SHA-256 해시를 설정하지 않은 경우 이 문제가 발생할 수 있습니다.

저는 파이어베이스 콘솔에서 모든 것을 다시 확인했고, SHA 키를 올바르게 추가했는데 오류가 발생했습니다.몇 시간을 소비한 결과 오류는 Google 콘솔에서 OAuth Console을 설정하지 않았기 때문이라는 것을 알게 되었습니다.따라서 동일한 문제에 직면한 경우 이 단계도 확인하십시오. 이것이 도움이 될 수 있습니다.

enter image description here

에서 해고하는 수 이 될 수 : 에서 파일 "build. (:, 파일 경로 변경, 위의도이말이구글당을신는서움면회하고없에다을수것을막사이이움도서:을일우에를집락된하파고드누이경이편로드안다니습있수될래아의말움도해grad):leapp"(build▁if▁may▁be▁can▁help▁you:▁below{▁change▁add▁file을우storePassword,keyAlias,keyPassword

 signingConfigs {
        debug {
            storeFile file('E:\\keystore.jks')
            storePassword '123456'
            keyAlias 'key0'
            keyPassword '123456'
        }
        release {
            storeFile file('E:\\keystore.jks')
            storePassword '123456'
            keyAlias 'key0'
            keyPassword '123456'
        }
    }
 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.debug
        }
    }

지금 프로젝트 동기화 빌드/정리

그래도 작동하지 않으면 디버그를 실행합니다.app이 입니다.

저도 이 문제에 직면하여 여러 번 검색했지만 극복하지 못했습니다.소방 기지 인증을 시도해 봤는데 성공했습니다.다음 단계를 수행해 보십시오.

파이어베이스로 이동 - 콘솔로 이동(오른쪽 상단 모서리) - 내장된 앱 카드를 클릭한 다음 인증을 클릭하고 ID를 인증합니다.

먹어봐.

저도 같은 문제에 직면했습니다. 생성된 resources folder values.xml 파일 내에서 default_web_client_id를 사용하고 있는지 확인하십시오.그렇게 함으로써 저는 제 실수를 해결했습니다.

나의 경우, 나는 새로운 웹 클라이언트 ID idcp 콘솔을 만들었는데, 이것은 작동하지 않습니다.

타입 3으로 표시된 구글 서비스.json의 것을 사용하면 문제가 해결됩니다.

이 문서는 이것에 대해 매우 모호합니다.

언급URL : https://stackoverflow.com/questions/47619229/google-sign-in-failed-com-google-android-gms-common-api-apiexception-10

반응형