Google 로그인 오류 12500


106

내 앱에 Google 로그인을 통합하려고합니다. 백엔드 서버가 없습니다. 로그인 한 Google 계정의 세부 정보를 내 앱으로 가져 오는 중입니다.

먼저 Google 로그인 예제 를 사용하여 시도했지만 오류가 발생했습니다 (아래 스택 추적을 인쇄하는 것을 제외하고 코드 변경 사항 없음). 백엔드 서버가 없기 때문에 SignInActivity 예제를 사용했습니다.

 Exception com.google.android.gms.common.api.ApiException: 12500: 
 at com.google.android.gms.common.internal.zzb.zzz(Unknown Source)
 at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
 at com.ewise.android.api.MainActivity.onActivityResult(SignInActivity.java:89)     at android.app.Activity.dispatchActivityResult(Activity.java:7010)
 at android.app.ActivityThread.deliverResults(ActivityThread.java:4187)
 at android.app.ActivityThread.handleSendResult(ActivityThread.java:4234)
 at android.app.ActivityThread.-wrap20(ActivityThread.java)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1584)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:154)
 at android.app.ActivityThread.main(ActivityThread.java:6316)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

암호

 public class SignInActivity extends AppCompatActivity implements
         View.OnClickListener {

     private static final String TAG = "SignInActivity";
     private static final int RC_SIGN_IN = 9001;

     private GoogleSignInClient mGoogleSignInClient;
     private TextView mStatusTextView;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         // Views
         mStatusTextView = findViewById(R.id.status);

         // Button listeners
         findViewById(R.id.sign_in_button).setOnClickListener(this);
         findViewById(R.id.sign_out_button).setOnClickListener(this);
         findViewById(R.id.disconnect_button).setOnClickListener(this);

         // [START configure_signin]
         // Configure sign-in to request the user's ID, email address, and basic
         // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
         GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                 .requestEmail()
                 .build();
         // [END configure_signin]

         // [START build_client]
         // Build a GoogleSignInClient with the options specified by gso.
         mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
         // [END build_client]

         // [START customize_button]
         // Set the dimensions of the sign-in button.
         SignInButton signInButton = findViewById(R.id.sign_in_button);
         signInButton.setSize(SignInButton.SIZE_STANDARD);
         signInButton.setColorScheme(SignInButton.COLOR_LIGHT);
         // [END customize_button]
     }

     @Override
     public void onStart() {
         super.onStart();

         // [START on_start_sign_in]
         // Check for existing Google Sign In account, if the user is already signed in
         // the GoogleSignInAccount will be non-null.
         GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
         updateUI(account);
         // [END on_start_sign_in]
     }

     // [START onActivityResult]
     @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);
             handleSignInResult(task);
         }
     }
     // [END onActivityResult]

     // [START handleSignInResult]
     private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
         try {
             GoogleSignInAccount account = completedTask.getResult(ApiException.class);

             // Signed in successfully, show authenticated UI.
             updateUI(account);
         } catch (ApiException e) {
             // The ApiException status code indicates the detailed failure reason.
             // Please refer to the GoogleSignInStatusCodes class reference for more information.
             Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
             e.printStackTrace();
             updateUI(null);
         }
     }
     // [END handleSignInResult]

     // [START signIn]
     private void signIn() {
         Intent signInIntent = mGoogleSignInClient.getSignInIntent();
         startActivityForResult(signInIntent, RC_SIGN_IN);
     }
     // [END signIn]

     // [START signOut]
     private void signOut() {
         mGoogleSignInClient.signOut()
                 .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                     @Override
                     public void onComplete(@NonNull Task<Void> task) {
                         // [START_EXCLUDE]
                         updateUI(null);
                         // [END_EXCLUDE]
                     }
                 });
     }
     // [END signOut]

     // [START revokeAccess]
     private void revokeAccess() {
         mGoogleSignInClient.revokeAccess()
                 .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                     @Override
                     public void onComplete(@NonNull Task<Void> task) {
                         // [START_EXCLUDE]
                         updateUI(null);
                         // [END_EXCLUDE]
                     }
                 });
     }
     // [END revokeAccess]

     private void updateUI(@Nullable GoogleSignInAccount account) {
         if (account != null) {
             mStatusTextView.setText(getString(R.string.signed_in_fmt, account.getDisplayName()));

             findViewById(R.id.sign_in_button).setVisibility(View.GONE);
             findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE);
         } else {
             mStatusTextView.setText(R.string.signed_out);

             findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
             findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE);
         }
     }

     @Override
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.sign_in_button:
                 signIn();
                 break;
             case R.id.sign_out_button:
                 signOut();
                 break;
             case R.id.disconnect_button:
                 revokeAccess();
                 break;
         }
     }
  }

내가 읽은 바에 따르면 문제는 SHA1 세대 로 인해 발생할 수 있습니다 .

나는 완전한 가이드를 따랐 지만 분명히 작동하지 않습니다.

gradle signingReport 에서 SHA1을 복사했습니다.

Variant: debug
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: release
Config: none
----------
Variant: debugAndroidTest
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: debugUnitTest
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047

이것의 가능한 원인은 무엇일까요?

감사

PS 이것이 가능한 원인 일 수 있습니까?

Google Play services out of date.  Requires 11720000 but found 10932470

이봐, 당신은 당신의 코드를 게시하시기 바랍니다 수 있습니다
딜립

안녕하세요 @Dilip 저는 말 그대로 이것을 사용했습니다 :) github.com/googlesamples/google-services/tree/master/android/… . 어쨌든 업데이트
Aaron

1
따라서 동일한 오류가 발생하거나 다른 일이 발생하면 한 번 더 SHA1을 수동으로 만들고 앱에 대해 개발자 콘솔에 넣고 패키지 이름을 교차 확인하고 google-services.json 파일을 다운로드하여 앱 수준에 넣으십시오.
Dilip

예 @Dilip 동일한 오류가 발생합니다. 확인 된 패키지 이름을 교차했습니다. 다른 키 저장소를 사용해 보았지만 결과는 동일합니다.
Aaron

API 키 를 얻으 려면 코드를 변경해야합니다 . 그리고 네, 플레이 서비스를 업데이트해야합니다
OneCricketeer

답변:


37

Google Play 서비스를 최신 버전 (이 경우 11720000)으로 업데이트하기 만하면됩니다. AVD를 사용하는 경우 Nexus 5 및 5X 이미지는 Google Play를 지원합니다. 에뮬레이터가 실행되면 확장 된 컨트롤 메뉴> Google Play로 이동 한 다음 업데이트합니다.


삼성 기기에서 어떻게하나요?
Pinkesh Darji 19

7
제 경우에는 이것이 문제가 아닙니다. Google Play 서비스는 이미 최신 상태입니다.
Adam Hurwitz

프로젝트 및 개인 정보 링크 에 관한 @ zub0r의 솔루션 이 정답으로 받아 들여 져야합니다.
Adam Hurwitz

확장 된 컨트롤 메뉴는 에뮬레이터 또는 Visual Studio에서 어디에 있습니까?
George Udosen

122

오류 PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException : 12500 :, null)

이 12500 오류는 프로젝트 설정 에서 프로젝트에 지원 이메일 주소 를 추가하여 해결할 수 있습니다 . https://console.firebase.google.com/ 링크 열기

프로젝트를 선택하고 설정 탭을 엽니 다.

유효한 지원 이메일을 제공하고 지금 애플리케이션을 다시 시작하십시오.

여기에 이미지 설명 입력


10
감사합니다! 이 오류는 매우 비밀스럽고 여기 답변에 언급 된 내용을 의미 할 수 있습니다. 내 문제는 이거 야 :(
Billda

3
개발자 콘솔 developers.google.com/identity/sign-in/android/sign-in 에서 언급 한 모든 작업을 수행했으며 SHA-1 지문을 입력하는 데 하루를 보낸 후이 모든 것이 문제였습니다. 당신이 도왔습니다. 감사합니다!
클래스 Android

프로젝트 @RohitSingh에 대한 SHA1 키를 추가하십시오
Maddu Swaroop에게

1
@MadduSwaroop 두 번 upvote하는 방법이 있었다면 ... 감사합니다 선생님
Lefty

1
내 하루를 구했습니다
Houssem

46

SHA-1 지문이 Firebase 프로젝트 설정에 추가되었는지 확인합니다. 그렇지 않은 경우 다음을 사용하여 SHA-1 지문을 찾습니다.

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

또한 다음을 사용하여 릴리스 키의 SHA-1 지문을 찾습니다.

keytool -list -v -keystore <keystore path>

<keystore path>키 저장소의 경로로 제거하십시오 .

그런 다음 두 SHA-1 지문을 모두 Firebase 프로젝트 설정에 추가합니다.

NB : google-services.json을 업데이트 된 google-services.json을 새 지문으로 바꾸는 것을 잊지 마십시오. 나는 그것에 이틀을 잃었다.

디버그 중

Android 스튜디오 는 첫 번째 디버그 빌드 에서 자동으로 생성 ~/.android/debug.keystore 되고 이를 사용하여 앱에 서명합니다.

SHA-1 실행을 가져 오려면 (password android) ( doc ) :

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

이것은 SHA-1에서 응용 프로그램 설정에 추가해야합니다 firebase디버그 빌드를 테스트하는 동안 기능에 구글 기호의 사용을 허용 할 수 있습니다.


2
그가 Firebase를 사용하고 있는지 어떻게 확신하나요?
PaulG

추측했습니다 (코드와 서버리스의 유사성). Firebase 프로젝트는 GCP 콘솔에도 연결됩니다. GCP 사용자 인증 정보에서 지문을 변경할 수도 있습니다.
Niyas 나자르

같은 오류가 있지만 제 경우에는 firebase와 관련이 없었습니다 (사용하지 않습니다).
Majed DH

console.developers.google.com/apis/credentials로 이동하여 SHA 키를 사용하여 새 사용자 인증 정보 (O Auth Client)를 추가합니다. (Firebase는 Firebase 프로젝트에 대해이 작업을 자동으로 수행합니다.)
Niyas Nazar

google-services.json 파일은 프로젝트 내 앱 디렉토리에서 찾을 수 있습니다. (이동 파인더를 통해 / 파일 탐색기)
Mehul Tandale

43

 오류 12500의 경우 firebase 설정에서만 지원 Gmail을 추가하고 오류 10의 경우 그림에서 볼 수 있듯이 firebase 콘솔에 ssh 지문을 추가해야합니다.


좋고 솔직한 답변, 방금 내 gmail 계정을 구성하고 나머지는 처리합니다
Ajeett

43

Google 로그인이 작동하려면 지원 이메일과 모든 프로젝트 및 개인 정보 링크 가 필요합니다. 그렇지 않으면 12500이 발생합니다.

"OAuth 동의 화면"이라는 두 번째 탭 하단의 https://console.developers.google.com/apis/credentials 에서 설정합니다. 여기에서 구성해야하는 세 개의 링크를 찾을 수 있습니다.

이것은 Firebase 가이드에서 어디에도 언급되어 있지 않습니다.


3
고마워, 그것은 나를 위해 일하고 있습니다. 나는 문제 해결에 거의 모든 일을 낭비
크리 산 쿠마르 샤르마

2
감사합니다. 방금 '승인 된 도메인'중 하나를 개인 정보 링크에 추가했고 모든 것이 작동했습니다. 당신은 나에게 💌 시행 착오를 몇 시간 저장
코코를

이것은 받아 들여진 대답이어야합니다. 나는 그 이틀 동안 아무런 성공도없이 고군분투하고있다. 구글은 이제 문서는 오해의 소지를 들어, 자신의 가이드 작업 및 오류 코드는 아무것도 이야기하지 않습니다, 가이드를 업데이트해야합니다
user1209216

1
개인 정보 링크를 어디에 추가합니까?
Shihab Uddin 19

4
"OAuth 동의 화면"이라는 두 번째 탭-양식 하단에 3 개의 링크가 있습니다
zub0r

21

https://console.developers.google.com/apis/credentials 에서 OAuth 동의 화면을 업데이트 해보세요.


3
지원 이메일을 추가해야했고 작동하기 시작했습니다. 이것은 설레였다.
adarsh

또한 모든 프로젝트 및 개인 정보 링크가 필요합니다. 그렇지 않으면 12500이 발생합니다. 이것은 어디에도 언급되지 않습니다.
zub0r

@ zub0r 링크는 필요하지 않습니다. 출처 : 나는 그들없이 그것을했다.
easycheese 19

18

나는 잠시 동안 이것에 갇혀 있었다.

이 단계가 수행되었는지 확인하십시오.

  • Firebase 콘솔에 올바른 SHA 키가 저장되었습니다.
  • 최신 google-service.json 다운로드
  • 그리고 마지막이자 가장 중요한 Google api의 자격 증명 아래 OAuth 동의 저장, OAuth 화면 이것은 알아내는 데 오랜 시간이 걸렸습니다. 그리고 그 후에는 잘 작동했습니다.

6
잘. 여기에서 2019 년에 허용되는 답변이어야합니다. Google은 이상하게 "반드시" OAuth 동의
mochadwi

1
어, 이것에 대한 또 다른 투표. 완전히 내 모호한 문제였습니다.
easycheese 19

12

Google Play 스토어에서 SHA1을 덮어 쓴 것 같습니다. Google Play 스토어, 실행 패널, 앱 서명 아래에서 Google Play에 추가 SHA1이 추가되었는지 확인합니다.

그리고 SHA1을 복사하여 관련 장소에 추가하면 작업을 수행 할 수 있습니다.


1
세상에! 이 팁에 감사드립니다! App Bundle은 자체 SHA1을 만들었으므로 로컬에서 사용되는 릴리스 키 (APK 생성시)가 더 이상 올바른 키가 아닙니다.
Jia Tse '

이것은 지금까지 가장 혼란스러운 워크 플로우입니다. 하지만 팁 주셔서 감사합니다
DarkNeuron

5

여전히 비슷한 문제가있는 사람이있는 경우 사용자 지정 범위를 추가하는 경우 유효한 범위인지 확인합니다. 제 경우에는 Facebook 스코프와 Google 스코프를 혼합하여 알아내는 데 시간이 걸렸습니다!


5

Firebase 인증을 사용하고 있습니다. 내 SHA-1이 올바르게 표시되고 클라이언트 ID도 정확했지만 여전히 12500을 얻었습니다.

내 문제는 내 프로젝트 설정에서 지원 이메일 을 표시하지 않았다는 것이 밝혀졌습니다 . (설정-> 일반 탭-> 프로젝트 (공용 설정) 섹션).


3
나에게도 같은 일이 일어났습니다. Google 서비스에 심각한 문서 문제가 있습니다. 나는 그들이 그러한 문제를 문서화하거나 적어도 사용자 친화적 인 오류를 보여주기를 바랍니다.
인 Ashish - 고엘

4

Firebase 콘솔에서 프로젝트로 이동하여 프로젝트 설정을 열고 거기에 SHA 인증서 지문을 추가합니다. 업데이트 된 google-services.json 파일을 다운로드하고 프로젝트 앱 폴더에 추가합니다.

이것은 나를 위해 일했습니다.

Firebase 콘솔 스크린 샷


3

잘못된 SHA1에서 오류가 발생한 것 같습니다. Android 스튜디오의 릴리스 모드와 디버그 모드에서 SHA1이 다르다는 점을 잊지 마십시오. keytool을 사용하여 SHA1을 얻는 대신 Android 스튜디오에서 Gradle 프로젝트-> 작업-> android-> signingReport를 사용하여 (메뉴보기-> 도구 창-> gradle에서 열 수 있음) SHA1을 릴리스하고 디버그 할 수 있습니다. 그런 다음 쉽게 작업하려면 Google 클라우드 콘솔에서 두 개의 SHA1을 사용하여 별도의 자격 증명 2 개를 만들어야합니다 (Google은 릴리스 SHA1을 사용하여 1 개를 만들도록 지시합니다. 개발시 디버그 SHA1을 사용하므로 작동하지 않습니다).


3

먼저 Google 개발자 콘솔에 앱을 등록했는지 확인하세요.

Firebase 애플리케이션에 debugrelease키 가 모두 있는지 확인하세요 . 이 오류가 프로덕션에 나타나면 SHA-1 release key기본 앱에 추가하십시오 . 개발중인 경우 SHA-1 debug key.

SHA-1 지문을 추가 할 위치

디버그 / 릴리스 키 얻기 :

keytool -exportcert -list -v -alias [your alias] -keystore [path/to/debug or release.keystore]

google-services.json앱에 업데이트 된 파일을 다운로드하십시오 .


GoogleSignInResult.getSuccess ()가 false 및 코드 12500을 반환하면서 실패했습니다. 궁극적으로 다른 사람이 내 디버그 키 대신 SHA1을 사용하여 내 OAuth를 설정 한 것입니다. 이것은 그것을 고쳤습니다.
Reckless

@Reckless 나는 이것이 도움이되어 기쁘다!
Denn

2

나에게 문제는 디버그 구성 앱에서 '릴리스'ClientID를 사용하는 것이 었습니다. 각 SHA-1을 각각 사용하여 릴리스 및 디버그 키가 있는지 확인하십시오.


2

flutter 에서 여기 로 오시는 경우 : 이것은 여기 문서에 따라 수정해야하는 코너 케이스 중 하나입니다 : https://pub.dev/packages/google_sign_in 여기에 이미지 설명 입력

  • Google API 및 서비스로 이동
  • Google 로그인을 구현할 앱을 선택하십시오.
  • 그런 다음 APIS 및 서비스 활성화를 클릭하십시오.

여기에 이미지 설명 입력

  • 그런 다음 Google Peoples API를 검색합니다.

여기에 이미지 설명 입력

  • Google People API 카드를 열고 사용을 클릭하면 앱에서 문제를 해결할 수 있습니다.

2

앱이 백엔드 서버로 인증하거나 백엔드 서버에서 Google API에 액세스하는 경우 사용자의 기본 프로필 정보에 액세스하기 위해 GoogleSignInOptions 객체를 생성 할 때 서버용으로 생성 된 OAuth 2.0 클라이언트 ID를 requestIdToken 메소드에 전달해야합니다. . 또한 API 콘솔의 자격 증명 페이지에있는 OAuth 동의 화면에서 지원 이메일을 제출하는 것을 잊지 마십시오.


1

Cordova 컴파일러가 적절한 키 저장소 파일을 찾지 못할 수도 있습니다.



솔루션 : 실행하기 전에 서명 속성ionic cordova build android 지정

1 단계 : 디버그 키 저장소 파일 생성

명령 실행

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

비밀번호 사용 : android

스텝 2 : (키 저장소 파일을 복사 debug.keystore에서) ~/.androidplatform/android현재 프로젝트의 디렉토리

스텝 3 : 파일을 이름 만들기 release-signing.properties 에서 platform/android디렉토리를

4 단계 : 파일에 내용 추가

storeFile=debug.keystore
keyAlias=androiddebugkey
storePassword=android
keyPassword=android

참고 : 이것이 기본값입니다. 사용자 지정 별칭과 암호를 제공 한 경우 적절하게 사용하십시오.

5 단계 : 이제 빌드ionic cordova build android


1

다른 컴퓨터 (다른 Android Studio)에서 프로젝트를 연 후에도 동일한 문제가 발생했습니다. 제 경우에는 처음에 Firebase를 설정하는 데 사용한 Firebase Assistant를 사용하여 문제를 해결했습니다. Firebase Assistant (도구> Firebase)를 열고 인증> 연결을 선택합니다. 이렇게하면 프로젝트가 Firebase에 다시 연결되고 구성이 업데이트되었습니다.


1

2 주 이후로 Google 로그인 문제에 갇혀 마침내 잘 분류했습니다. 이유를 설명하겠습니다. 이 문제는 firebase와 관련이 있습니다. 파이어베이스에서 그들은 "지원 이메일"필드를 선택 사항으로 언급했습니다. 그러나 일단 추가하면 (개인 이메일 중 하나) 문제가 분류되고 응답을 받았습니다. 12501 오류가 발생하면 Google 계정의 설정과 관련된 것입니다.


1

나는 잠시 동안 이것에 갇혀 있었다.

이 단계가 수행되었는지 확인하십시오.

Correct SHA key is saved on Firebase Console.
Valid reversed client id.
from fcm console=>select app=>from authentication=>enable google sign-in method

0

제 경우에는 잘못된 Google 클라이언트 ID 때문입니다. 내 키를 google-services.json( oauth_client객체 아래 )에 나열된 키로 변경 합니다.


0

다음 사항이 올바르게 설정되었는지 확인하십시오.

  1. Google 프로젝트에서 클라이언트 ID를 생성합니다.
  2. 해당 클라이언트 ID에 적절한 SHA-1 키를 제공하십시오. (디버그 / 릴리스)
  3. 해당 클라이언트 ID에 대한 적절한 패키지 이름을 제공하십시오.
  4. 만들기 확실히 당신은 고객 ID에서 생성 한 strings.xml, google-services.json또는 credentials.json파일을.

0

https://developers.google.com/identity/sign-in/android/sign-in 은이 API 문서를 따르지만 WEB_CLIENT_ID 내부에서는 google-services.json 파일 내부에서 생성 된 클라이언트 ID 값을 사용한다는 점에 유의하세요.

class MainActivity : AppCompatActivity(), GoogleApiClient.OnConnectionFailedListener {
private val TAG = "JSAGoogleSignIn"
private val REQUEST_CODE_SIGN_IN = 1234
private val WEB_CLIENT_ID = "354298333018-XXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
private var mAuth: FirebaseAuth? = null

private var mGoogleApiClient: GoogleApiClient? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    var txt_register = findViewById<TextView>(R.id.txt_register)
    txt_register.setOnClickListener {
        var intent = Intent(this@MainActivity, RegisterActivity::class.java)
        finish()
        startActivity(intent)
    }
    val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(WEB_CLIENT_ID)
            .requestEmail()
            .build()
    mGoogleApiClient = GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build()

    mAuth = FirebaseAuth.getInstance()
    sign_in_button.setOnClickListener {
        val intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)
        startActivityForResult(intent, REQUEST_CODE_SIGN_IN)
    }

}


override fun onConnectionFailed(p0: ConnectionResult) {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}


private fun updateUI(user: FirebaseUser?) {
    if (user != null) {
        Log.e("Email", "Value" + user.email)
    }

}

fun signIn() {

}

override fun onStart() {
    super.onStart()
    val currentUser = mAuth!!.currentUser
    updateUI(currentUser)
}

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

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == REQUEST_CODE_SIGN_IN) {
        val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
        if (result.isSuccess) {
            // successful -> authenticate with Firebase
            val account = result.signInAccount
            firebaseAuthWithGoogle(account!!)
        } else {
            // failed -> update UI
            updateUI(null)
            Toast.makeText(applicationContext, "SignIn: failed!" + result.status,
                    Toast.LENGTH_SHORT).show()
        }
    }
}

private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount) {
    Log.e(TAG, "firebaseAuthWithGoogle():" + acct.id!!)

    val credential = GoogleAuthProvider.getCredential(acct.idToken, null)
    mAuth!!.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success
                    Log.e(TAG, "signInWithCredential: Success!")
                    val user = mAuth!!.currentUser
                    updateUI(user)
                } else {
                    // Sign in fails
                    Log.w(TAG, "signInWithCredential: Failed!", task.exception)
                    Toast.makeText(applicationContext, "Authentication failed!",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
            }
}

0

제 경우에는 Firebase 콘솔에 지문을 추가 한 후 Google 개발자 콘솔에서 자동으로 선택하여 지문을 표시했습니다. 그러나 로그인이 작동하지 않았습니다. 모든 단계를 살펴본 후 Google이 내 매니페스트 파일 패키지를 이와 같이 뒤집 었다는 것을 알았습니다 com.xxxxxxxx.app. 그러나 실제로 app.xxxxxxxx.com는 Google 개발자 콘솔에서입니다. 그래서 자동 생성 지문을 삭제하고 올바른 패키지 이름으로 지문을 추가했습니다. 팔!!. 효과가있었습니다.


0

이미지와 같이 Google 옵션이 활성화되지 않았을 때 오류가 나타났습니다 .

Google 계정을 변경하고 Google 연결 옵션을 설정하는 것을 잊었을 때 발생했습니다.


0

프로젝트에 숫자 또는 기호를 포함한 특수 문자가 포함되지 않아야합니다 (프로젝트 이름은 com.google.testproject와 같이 간단해야합니다).


의하지 프로젝트 이름 프로젝트의 패키지 이름을 부르는
B devloper

0

필자의 경우 비 프로덕션 앱에서 작업하고 있었는데 문제는 firebase 콘솔에서 프로젝트를 만들 때 Firebase 및 Google 개발자 콘솔에서 SHA-1 키를 앞뒤로 동기화하는 데 문제가 있다는 것입니다. 그래서 먼저 Google Developer Console에서 프로젝트를 만든 다음 Firebase 콘솔에서 새 프로젝트를 만들 때 선택하기로 결정했습니다.

나는 또한 이것에 대한 튜토리얼 을 만들었습니다 .


0

제 경우에는 에뮬레이터에 Play 스토어가 없다는 것이 문제였습니다. Xamarin.Forms를 사용하여 개발하기 때문에 Visual Studio를 통해 에뮬레이터 (API 23으로 명명 됨)를 만들었으며 Visual Studio의 Android 장치 관리자에서 에뮬레이터에 Google Play 스토어가 있어야하는지 선택할 수 있습니다.

Android Studio의 AVD를 통해 에뮬레이터를 만들고 Play 스토어가 있는지 확인해야했습니다.

여기에 이미지 설명 입력


0

제 경우에는 백엔드 인증에 안드로이드 키가 필요하지 않은 것처럼 보이므로 수석 팀이 안드로이드 인증을 제거했기 때문에이 오류가 발생했습니다. 따라서 Google 로그인에는 Android 및 웹 클라이언트 키가 모두 필요합니다.


-1

다음 옵션을 시도하십시오.

keytool -list -v -keystore C:\Users\MG\Desktop\test.jks -alias test

암호를 묻는 메시지가 표시되고 암호 만 입력하면됩니다. SHA1, MD5 지문을 볼 수 있습니다.

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.