ข้อผิดพลาดในการลงชื่อเข้าใช้ Google 12500


107

ฉันกำลังพยายามรวมการลงชื่อเข้าใช้ Google เข้ากับแอปของฉัน ฉันไม่มีเซิร์ฟเวอร์ส่วนหลังฉันเพิ่งได้รับรายละเอียดของบัญชี Google ที่เข้าสู่ระบบไปยังแอปของฉัน

ฉันลองใช้ครั้งแรกโดยใช้ตัวอย่างการลงชื่อเข้าใช้Googleแต่ฉันพบข้อผิดพลาด (ไม่มีการเปลี่ยนแปลงรหัสใด ๆ ยกเว้นการพิมพ์ stacktrace ด้านล่าง) ฉันเพิ่งใช้ตัวอย่าง 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 รุ่น

ฉันทำตามคู่มือฉบับสมบูรณ์แต่ดูเหมือนว่ามันใช้ไม่ได้

ฉันคัดลอก SHA1 จาก gradle signReport

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

อะไรคือสาเหตุที่เป็นไปได้ของสิ่งนี้?

ขอบคุณ

ปล. นี่อาจเป็นสาเหตุได้หรือไม่?

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

คำตอบ:


38

เพียงอัปเดตบริการ Google Play ของคุณเป็นเวอร์ชันล่าสุด (หรือ 11720000 ในกรณีนี้) หากคุณใช้ภาพ AVD, Nexus 5 และ 5X สนับสนุน Google Play เมื่อโปรแกรมจำลองเริ่มทำงานแล้วให้ไปที่เมนู Extended Controls> Google Play จากนั้นอัปเดต


จะทำบนอุปกรณ์ Samsung ได้อย่างไร?
— Pinkesh Darji

7
นี่ไม่ใช่ปัญหาในกรณีของฉัน บริการ Google Play เป็นข้อมูลล่าสุดแล้ว
— Adam Hurwitz

วิธีแก้ปัญหาของ @ zub0r เกี่ยวกับโครงการและลิงก์ความเป็นส่วนตัวควรได้รับการยอมรับว่าเป็นคำตอบที่ถูกต้อง
— Adam Hurwitz

โปรดเมนูการควบคุมเพิ่มเติมบนโปรแกรมจำลองหรือสตูดิโอภาพอยู่ที่ไหน
— George Udosen

129

ข้อผิดพลาด PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, null)

ข้อผิดพลาด 12500 นี้สามารถแก้ไขได้โดยเพิ่มที่อยู่อีเมลสนับสนุน ในโครงการของคุณในการตั้งค่าโครงการ เปิดลิ้งค์ https://console.firebase.google.com/

เลือกโครงการของคุณและเปิดแท็บการตั้งค่า

ระบุอีเมลสนับสนุนที่ถูกต้องและรีสตาร์ทแอปพลิเคชันของคุณทันที

ป้อนคำอธิบายภาพที่นี่


11
ขอบคุณ! ข้อผิดพลาดนี้ค่อนข้างคลุมเครืออาจหมายถึงสิ่งใด ๆ ที่กล่าวถึงในคำตอบที่นี่ ปัญหาของฉันคือปัญหานี้ :(
— Billda

3
ฉันทำทุกอย่างที่กล่าวถึงใน Developer Console developers.google.com/identity/sign-in/android/sign-inและหลังจากใช้เวลาหนึ่งวันในการลองใส่ลายนิ้วมือ SHA-1 และทั้งหมดนี้คือปัญหา คุณช่วย ขอบคุณมาก!
— คลาส Android

ลองเพิ่มคีย์ SHA1 สำหรับโครงการของคุณ @RohitSingh
— Maddu Swaroop

1
@MadduSwaroop ถ้ามีวิธีในการโหวตสองครั้ง ... ขอบคุณครับ
— Lefty

2
คุณช่วยวันของฉัน
— 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

หมายเหตุ: อย่าลืมแทนที่ google-services.json ด้วย google-services.json ที่อัปเดตด้วยลายนิ้วมือใหม่ ฉันหายไปสองวันในนั้น

ในขณะที่แก้ไขข้อบกพร่อง

Android studio จะสร้าง โดยอัตโนมัติ~/.android/debug.keystoreในการแก้ไขข้อบกพร่องบิวด์แรกและใช้เพื่อลงนามแอป

ในการเรียกใช้ SHA-1 (รหัสผ่านandroid) ( doc ):

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

นี้SHA-1ควรจะเพิ่มการตั้งค่า app ที่firebaseจะช่วยให้การใช้งานของสัญญาณ google ในความสามารถในการแก้ปัญหาขณะที่การทดสอบสร้าง


2
คุณแน่ใจได้อย่างไรว่าเขาใช้ Firebase
— PaulG

คาดเดาได้ (ความคล้ายคลึงกันในรหัสและเซิร์ฟเวอร์) โครงการ Firebase เชื่อมต่อกับคอนโซล GCP ด้วย นอกจากนี้เรายังสามารถเปลี่ยนลายนิ้วมือในข้อมูลรับรอง GCP
— Niyas Nazar

ข้อผิดพลาดเดียวกันกับ แต่ในกรณีของฉันมันไม่เกี่ยวข้องกับ firebase (ฉันไม่ได้ใช้มัน)
— Majed DH

ไปที่console.developers.google.com/apis/credentials เพิ่มข้อมูลรับรองใหม่ (O Auth Client) ด้วยคีย์ SHA (Firebase ทำสิ่งนี้โดยอัตโนมัติสำหรับโครงการ firebase ของเรา)
— Niyas Nazar

ไฟล์ google-services.json สามารถพบได้ในไดเรกทอรีแอปภายในโครงการของคุณ (ผ่าน Finder / File Explorer)
— Mehul Tandale

44

 สำหรับข้อผิดพลาด 12500 คุณต้องเพิ่มการสนับสนุน gmail ในการตั้งค่าของ firebase เท่านั้นและสำหรับข้อผิดพลาด 10 ให้เพิ่มลายนิ้วมือ ssh ในคอนโซล firebase ดังที่คุณเห็นในภาพ


คำตอบที่ดีและตรงไปตรงมาเพียงแค่กำหนดค่าบัญชี gmail ของฉันและแบมก็ทำส่วนที่เหลือ
— Ajeett

"สำหรับข้อผิดพลาด 12500 คุณต้องเพิ่มการสนับสนุน gmail ในการตั้งค่าของ firebase เท่านั้นและสำหรับข้อผิดพลาด 10 ให้เพิ่มลายนิ้วมือ ssh ในคอนโซล firebase ดังที่คุณเห็นในภาพ" สิ่งนี้ช่วยได้มาก ฉันได้รับ 12500 ใช้ลายนิ้วมือ SHA1 แล้วก็ยังใช้งานไม่ได้ การเพิ่มอีเมลสนับสนุนช่วยได้ ขอบคุณ!
— คลาส Android

44

อีเมลสนับสนุนและลิงก์โปรเจ็กต์และความเป็นส่วนตัวทั้งหมดจำเป็นสำหรับการลงชื่อเข้าใช้ Google เพื่อให้ทำงานได้มิฉะนั้นจะส่ง 12500

ตั้งค่าใน https://console.developers.google.com/apis/credentialsที่ด้านล่างของแท็บที่สองชื่อ "หน้าจอคำยินยอม OAuth" - คุณจะพบลิงก์สามลิงก์ที่ต้องกำหนดค่า

สิ่งนี้ไม่ได้กล่าวถึงที่ใดก็ได้ในคำแนะนำ Firebase


3
ขอบคุณมันใช้งานได้สำหรับฉัน ฉันเสียเวลาเกือบทั้งวันในการแก้ไขปัญหา
— krishan kumar Sharma

2
ขอบคุณฉันเพิ่งเพิ่มหนึ่งใน 'โดเมนที่ได้รับอนุญาต' ในลิงก์ความเป็นส่วนตัวและทุกอย่างก็ใช้ได้ คุณช่วยฉันได้หลายชั่วโมงในการลองผิดลองถูก💌
— Coco

คำตอบนี้ควรได้รับการยอมรับ ฉันดิ้นรนกับ 2 วันนั้นไม่ประสบความสำเร็จเลย Google ควรอัปเดตคำแนะนำเนื่องจากตอนนี้เอกสารของพวกเขาทำให้เข้าใจผิดคำแนะนำของพวกเขาจะไม่ทำงานและรหัสข้อผิดพลาดจะบอกอะไรเลย
— user1209216

1
จะเพิ่มลิงค์ความเป็นส่วนตัวได้ที่ไหน?
— Shihab Uddin

4
ในแท็บที่สองชื่อ "หน้าจอคำยินยอม OAuth" ที่ด้านล่างของแบบฟอร์มคุณมีลิงก์สามลิงก์
— zub0r

21

ลองอัปเดตหน้าจอคำยินยอม OAuth บน https://console.developers.google.com/apis/credentials


3
ฉันต้องเพิ่มอีเมลสนับสนุนแล้วมันก็เริ่มทำงาน นี่คือความกระพือปีก
— adarsh

นอกจากนี้ยังจำเป็นต้องมีการเชื่อมโยงโครงการและความเป็นส่วนตัวทั้งหมดมิฉะนั้นจะพ่น 12500 ซึ่งไม่ได้กล่าวถึงที่ใดก็ได้
— zub0r

ลิงก์ @ zub0r ไม่จำเป็น ที่มา: ฉันเพิ่งทำโดยไม่มีพวกเขา
— easycheese

18

ฉันติดอยู่ในขณะนี้

ตรวจสอบให้แน่ใจว่าทำตามขั้นตอนเหล่านี้แล้ว -

  • คีย์ SHA ที่ถูกต้องจะถูกบันทึกไว้ใน Firebase Console
  • ดาวน์โหลด google-service.json ล่าสุด
  • และสุดท้ายและสำคัญที่สุด บันทึกคำยินยอม OAuth ภายใต้ข้อมูลรับรองใน google api หน้าจอ OAuthสิ่งนี้ใช้เวลานานในการคิดออก และทำงานได้ดีหลังจากนี้

6
ดี. นี่ควรเป็นคำตอบที่ยอมรับสำหรับปี 2019 ที่นี่ Google "ต้อง" อย่างแปลกประหลาดอัปเดตเนื้อหาภายในOAuth Consent
— mochadwi

1
ฮึโหวตอีกเรื่องนี้ ปัญหาที่คลุมเครือของฉันทั้งหมด
— easycheese

12

ดูเหมือนว่า SHA1 ของคุณจะถูกเขียนทับโดย Google play store ตรวจสอบใน Google Play Store ของคุณแผงการเปิดตัวภายใต้การลงนามแอปดูว่า Google Play มีการเพิ่ม SHA1 เพิ่มเติมหรือไม่

และคัดลอก SHA1 นั้นเพิ่มในสถานที่ที่เกี่ยวข้องของคุณจะทำงานได้


1
โอ้พระเจ้า! ขอบคุณสำหรับเคล็ดลับนี้! App Bundle สร้าง SHA1 ของตัวเองดังนั้นคีย์รุ่นที่ใช้ในเครื่อง (เมื่อสร้าง APK) จึงไม่ใช่คีย์ที่ถูกต้องอีกต่อไป
— Jia Tse

นี่เป็นขั้นตอนการทำงานที่สับสนที่สุดเท่าที่เคยมีมา แต่ขอบคุณสำหรับเคล็ดลับ
— DarkNeuron

5

หากยังมีใครที่มีปัญหาคล้าย ๆ กันหากคุณกำลังเพิ่มขอบเขตที่กำหนดเองตรวจสอบให้แน่ใจว่าเป็นขอบเขตที่ถูกต้อง ในกรณีของฉันฉันผสมขอบเขตของ Facebook กับขอบเขตของ Google และใช้เวลาสักพักหนึ่งในการคิดออก!


5

ฉันใช้ Firebase Authentication SHA-1 ของฉันถูกระบุอย่างถูกต้องรหัสไคลเอ็นต์ก็ถูกต้องเช่นกัน แต่ฉันยังได้รับ 12500

ปรากฎว่าปัญหาของฉันคือฉันไม่ได้ระบุอีเมลการสนับสนุนในการตั้งค่าโครงการของฉัน (การตั้งค่า -> แท็บทั่วไป -> ส่วนโครงการของคุณ (การตั้งค่าสาธารณะ))


3
สิ่งเดียวกันที่เกิดขึ้นสำหรับฉันเช่นกัน มีปัญหาด้านเอกสารที่ร้ายแรงเกี่ยวกับบริการของ Google ฉันหวังว่าพวกเขาจะบันทึกปัญหาดังกล่าวหรืออย่างน้อยก็แสดงข้อผิดพลาดที่เป็นมิตรกับผู้ใช้
— ashish-goel

4

ฉันคิดว่าข้อผิดพลาดมาจากผิด SHA1 โปรดอย่าลืมว่า SHA1 นั้นแตกต่างกันระหว่างโหมดรีลีสและโหมดดีบักใน Android Studio แทนที่จะใช้ keytool เพื่อรับ SHA1 คุณสามารถใช้ Gradle project -> Task -> android -> signReport ใน android studio (สามารถเปิดได้จากเมนู View -> Toolwindow -> gradle) เพื่อรับรีลีสและดีบัก SHA1 หลังจากนั้นเพื่อให้ใช้งานได้ง่ายคุณต้องสร้างข้อมูลรับรอง 2 รายการแยกกันโดยมี SHA1 สองรายการบนคอนโซลคลาวด์ของ Google (Google เพียงสั่งให้สร้าง 1 โดยใช้ SHA1 รีลีสเมื่อเราพัฒนามันจะไม่ทำงานเนื่องจากใช้การดีบัก SHA1)


4

ไปที่โครงการของคุณในคอนโซล Firebase เปิดการตั้งค่าโครงการเพิ่มลายนิ้วมือใบรับรอง SHA ที่นั่น ดาวน์โหลดไฟล์ google-services.json ที่อัปเดตแล้วเพิ่มลงในโฟลเดอร์แอป Projects ของคุณ

สิ่งนี้ได้ผลสำหรับฉัน

ภาพหน้าจอคอนโซล Firebase


4

ขั้นแรกตรวจสอบให้แน่ใจว่าคุณได้ลงทะเบียนแอปของคุณในคอนโซลนักพัฒนาของ Google

ตรวจสอบว่าคุณมีทั้งคีย์debugและreleaseคีย์ในแอปพลิเคชัน Firebase หากข้อผิดพลาดนี้ปรากฏขึ้นในการใช้งานจริงให้เพิ่ม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 () ส่งคืนเท็จและรหัส 12500 ในที่สุดก็มีคนอื่นตั้งค่า OAuth ของฉันด้วย SHA1 แทนที่จะเป็นคีย์การแก้ปัญหาของฉัน สิ่งนี้แก้ไขได้
— ประมาท

@Reckless ฉันดีใจที่ช่วยได้!
— Denn

2

สำหรับฉันปัญหาคือการใช้ ClientID 'release' กับแอปที่กำหนดค่าดีบักของฉัน ตรวจสอบให้แน่ใจว่าคุณมีรีลีสและคีย์ดีบักโดยใช้ SHA-1 แต่ละอันตามลำดับ


2

หากคุณมาที่นี่จากการกระพือปีก : นี่เป็นหนึ่งในกรณีสำคัญที่เราต้องแก้ไขตามเอกสารที่นี่: https://pub.dev/packages/google_sign_in ป้อนคำอธิบายภาพที่นี่

  • ไปที่Google APIs & Sevices
  • เลือกแอปที่คุณต้องการใช้การลงชื่อเข้าใช้ Google
  • จากนั้นคลิกที่เปิดใช้งาน APIS และบริการ

ป้อนคำอธิบายภาพที่นี่

  • จากนั้นค้นหา Google Peoples API

ป้อนคำอธิบายภาพที่นี่

  • เปิดการ์ด Google People API แล้วคลิกเปิดใช้งานแอปของคุณอาจกำจัดปัญหาได้

2

เมื่อแอปของคุณตรวจสอบสิทธิ์กับเซิร์ฟเวอร์แบ็กเอนด์หรือเข้าถึง Google API จากเซิร์ฟเวอร์แบ็กเอนด์คุณจะต้องส่งรหัสไคลเอ็นต์ OAuth 2.0 ที่สร้างขึ้นสำหรับเซิร์ฟเวอร์ของคุณไปยังเมธอด requestIdToken เมื่อคุณสร้างออบเจ็กต์ GoogleSignInOptions เพื่อเข้าถึงข้อมูลโปรไฟล์พื้นฐานของผู้ใช้ . นอกจากนี้อย่าลืมส่งอีเมลสนับสนุนในหน้าจอคำยินยอม OAuth ที่พบในหน้าข้อมูลรับรองในคอนโซล API


2

ในกรณีของฉันข้อผิดพลาดนี้เกิดขึ้นเนื่องจากการตรวจสอบสิทธิ์ Android ถูกลบออกโดยทีมอาวุโสเนื่องจากดูเหมือนว่าไม่จำเป็นต้องใช้รหัส Android ในการตรวจสอบสิทธิ์แบ็กเอนด์ ดังนั้นจึงต้องใช้ทั้งคีย์ไคลเอ็นต์ Android และเว็บในการเข้าสู่ระบบของ Google


1
ขอบคุณสำหรับสิ่งนี้! ฉันลบรหัสไคลเอ็นต์ Android ของฉันด้วยเพราะฉันคิดว่าไม่จำเป็นเนื่องจากเราต้องการเพียงรหัสไคลเอนต์เว็บเท่านั้น
— zeenosaur

1

นอกจากนี้ยังสามารถเกิดขึ้นได้ว่าคอมไพเลอร์ Cordova ไม่พบไฟล์ที่เก็บคีย์ที่เหมาะสม



วิธีแก้ไข:ก่อนดำเนินการให้ionic cordova build androidระบุคุณสมบัติการลงนาม

ขั้นตอนที่ 1 : สร้างไฟล์ที่เก็บคีย์การดีบัก

ดำเนินการคำสั่ง

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

ใช้รหัสผ่าน: android

ขั้นตอนที่ 2:คัดลอกไฟล์ที่เก็บคีย์ ( debug.keystore) จาก~/.androidไปยังplatform/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 Assistant ซึ่งฉันเคยใช้ในการตั้งค่า Firebase ในตอนแรก เปิด Firebase Assistant (Tools> Firebase) แล้วเลือก Authentication> Connect สิ่งนี้ได้เชื่อมต่อโครงการกับ Firebase อีกครั้งและอัปเดตการกำหนดค่า


1

ฉันติดปัญหาการเข้าสู่ระบบ Google ตั้งแต่ 2 สัปดาห์ในที่สุดก็เรียงลำดับได้ดีช่วยอธิบายเหตุผลให้ฉันฟัง ปัญหานี้เกี่ยวข้องกับ firebase ใน 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 ไม่ถูกต้อง ฉันเปลี่ยนคีย์เป็นคีย์ที่อยู่ในรายการgoogle-services.json(ภายใต้oauth_clientวัตถุ)


0

ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าสิ่งต่อไปนี้อย่างถูกต้อง:

  1. สร้างรหัสลูกค้าในโครงการ Google ของคุณ
  2. ระบุคีย์ SHA-1 ที่เหมาะสมสำหรับรหัสลูกค้านั้น (debug / release)
  3. ระบุชื่อแพ็กเกจที่เหมาะสมสำหรับรหัสลูกค้านั้น
  4. ให้แน่ใจว่าคุณได้สร้างรหัสลูกค้าใน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

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 มีปัญหาในการซิงโครไนซ์คีย์ SHA-1 ไปมาจากคอนโซลนักพัฒนา Firebase และ Google ดังนั้นฉันจึงตัดสินใจสร้างโปรเจ็กต์ก่อนบนคอนโซลนักพัฒนาซอฟต์แวร์ของ Google จากนั้นเลือกเมื่อสร้างโปรเจ็กต์ใหม่บนคอนโซล Firebase

ฉันยังทำบทช่วยสอนสำหรับสิ่งนี้ซึ่งอาจช่วยคุณได้


0

ในกรณีของฉันปัญหาคือโปรแกรมจำลองของฉันไม่มี Play Store ฉันได้สร้างโปรแกรมจำลอง (ชื่อ API 23) ผ่าน Visual Studio เพราะฉันพัฒนาโดยใช้ Xamarin.Forms เช่นกันและในโปรแกรมจัดการอุปกรณ์ Android ของ Visual Studio คุณสามารถเลือกได้ว่าโปรแกรมจำลองของคุณควรมี Google Play Store หรือไม่

ต้องสร้างโปรแกรมจำลองผ่าน AVD ของ Android Studio และตรวจสอบให้แน่ใจว่ามี Play Store:

ป้อนคำอธิบายภาพที่นี่


-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.