Flutter และปลั๊กอิน google_sign_in: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 10:, null)


95

กล่องโต้ตอบ (แบบฟอร์ม Google) สำหรับข้อมูลรับรองถูกเปิดสำเร็จ แต่หลังจากที่ฉันกรอกข้อมูลรับรองแล้วฉันก็ได้รับข้อผิดพลาดนี้ ผมทำตามคำแนะนำจากที่นี่ สร้างโครงการ Firebase เปิดใช้งาน Google Drive API (นั่นคือสิ่งที่ฉันต้องการในตอนนี้) จากคอนโซล Google APIs

รหัสส่งข้อยกเว้น:

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: [
    'https://www.googleapis.com/auth/drive',
  ],
);

await _googleSignIn.signIn();

นั่นคือการติดตามสแต็ก:

E/flutter ( 5068): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 5068): PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
E/flutter ( 5068): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:551:7)
E/flutter ( 5068): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:292:18)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #2      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:226:58)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #3      GoogleSignIn._addMethodCall (package:google_sign_in/google_sign_in.dart:268:20)
E/flutter ( 5068): #4      GoogleSignIn.signIn (package:google_sign_in/google_sign_in.dart:339:48)
E/flutter ( 5068): #5      ThatsMyComponentState.theSignInFuction.<anonymous closure> (package:my_app/widgets/my_file.dart:666:45)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #6      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
E/flutter ( 5068): #7      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
E/flutter ( 5068): #8      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter ( 5068): #9      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter ( 5068): #10     TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
E/flutter ( 5068): #11     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter ( 5068): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:184:20)
E/flutter ( 5068): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
E/flutter ( 5068): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
E/flutter ( 5068): #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
E/flutter ( 5068): #16     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
E/flutter ( 5068): #17     _invoke1 (dart:ui/hooks.dart:168:13)
E/flutter ( 5068): #18     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)

เวอร์ชันของปลั๊กอินgoogle_sign_inคือ 4.0.0

นั่นคือผลลัพธ์ของflutter doctot -v :

[√] Flutter (Channel stable, v1.0.0, on Microsoft Windows [Version 10.0.17763.253], locale en-US)
• Flutter version 1.0.0 at C:\src\flutter-0.7.3\flutter
• Framework revision 5391447fae (10 weeks ago), 2018-11-29 19:41:26 -0800
• Engine revision 7375a0f414
• Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
• Android SDK at C:\Users\myuser\AppData\Local\Android\Sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• ANDROID_HOME = C:\Users\myuser\AppData\Local\Android\Sdk
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
• All Android licenses accepted.

[√] Android Studio (version 3.3)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin version 32.0.1
• Dart plugin version 182.5124
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)

[!] IntelliJ IDEA Community Edition (version 2018.1)
• IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1.6
X Flutter plugin not installed; this adds Flutter specific functionality.
X Dart plugin not installed; this adds Dart specific functionality.
• For information about installing plugins, see
  https://flutter.io/intellij-setup/#installing-the-plugins

[!] VS Code, 64-bit edition (version 1.30.2)
• VS Code at C:\Program Files\Microsoft VS Code
• Flutter extension not installed; install from
  https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[√] Connected device (1 available)
• Android SDK built for x86 • emulator-5554 • android-x86 • Android 8.1.0 (API 27) (emulator)

! Doctor found issues in 2 categories.

ความช่วยเหลือใด ๆ จะได้รับการชื่นชมมาก ขอบคุณ!


สำหรับทุกคน: ให้ความสนใจกับรหัสข้อยกเว้นApiException: 10และอ้างถึงเอกสารก่อน - developers.google.com/android/reference/com/google/android/gms/…ตรวจสอบว่าคุณได้แก้ไขปัญหาที่ถูกต้อง ตัวอย่างเช่นรหัส 7 จะหมายถึง 'ไม่มีการเชื่อมต่ออินเทอร์เน็ต'
Kirill Karmazin

เรียกใช้. /gradlew signReport ซึ่งอยู่ในโฟลเดอร์ Android ของแอป เพิ่ม SHA1 ใน Google Firebase Google Sign in configuration developers.google.com/android/guides/client-auth คุณจะต้องมี SHA1 สำหรับคอมพิวเตอร์แต่ละเครื่องที่คุณทำงาน
live-love

@KirillKarmazin ความคิดอะไร 12500 คืออะไร? E / flutter (23795): [ERROR: flutter / lib / ui / ui_dart_state.cc (157)] Unhandled Exception: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, null)
raiton

คำตอบ:


143

ฉันพบปัญหาเดียวกันในตอนนี้ กรณีนี้อาจเกิดขึ้นหากคุณใช้การดีบักและคุณไม่ได้ลงทะเบียนSHAลายนิ้วมือใน firebase ฉันแก้ไขโดยสร้างdebug.keystoreและลงทะเบียนภายในแอปบน Firebase อย่าลืมดาวน์โหลดใหม่google-services.jsonหลังจากนั้น ดูสิ่งนี้ด้วย

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

แก้ไข หากคุณไม่สามารถใช้การพิสูจน์ตัวตนในโหมดรีลีสให้ลองทำดังต่อไปนี้:

- เพิ่มลายนิ้วมือใบรับรอง SHA ของคีย์รีลีส

keytool -exportcert -list -v \ -alias <your-key-name> -keystore <path-to-production-keystore>

สำหรับรายละเอียดเพิ่มเติมโปรดดูที่หัวข้อ"get release certificate" https://developers.google.com/android/guides/client-auth

หากการตรวจสอบสิทธิ์ของคุณยังใช้งานไม่ได้อาจเป็นเพราะคุณดาวน์โหลดแอปจาก Playstore และคุณเปิดใช้งาน "App Signing by Google Play Feature" จากนั้นในกรณีนี้ให้ไปที่คอนโซลการเผยแพร่ของ play store และไปที่การลงนามแอปภายใต้การจัดการรุ่น คุณจะพบลายนิ้วมือใบรับรอง SHA เพื่อลงทะเบียนในคอนโซล Firebase

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


17
ขอบคุณสำหรับสิ่งนี้. สิ่งนี้ช่วยได้ ที่น่าสังเกตว่าต้องเพิ่มทั้งคีย์ SHA1 และ SHA256 เพื่อให้การตรวจสอบสิทธิ์ทำงาน
Srini

2
ยอมรับสิ่งนี้เป็นคำตอบ
Muruganandham K

@TSR สิ่งนี้ใช้ได้ แต่ฉันไม่ต้องดาวน์โหลด google-services.json ใหม่
Darren Cole

2
FYI ฉันมีข้อผิดพลาดเดียวกันแม้ว่าจะกำหนดค่าลายนิ้วมือ sha แล้วก็ตาม ปรากฎฉันยังมีการเพิ่มที่อยู่อีเมลที่สนับสนุนต่อgithub.com/flutter/flutter/issues/25909#issuecomment-497378619
Michael Nelson

@MichaelNelson นี่เป็นปัญหาของฉันเช่นกัน
wwwwwwwwwwww

38

วิธีแก้ปัญหาต่อไปนี้ใช้ได้ในโครงการ flutter:

ขั้นตอนที่ 1: สร้างคีย์SHA1และSHA256
ขั้นตอนที่ 2: เพิ่มทั้ง SHA1 และ SHA256 ลงใน firebase (ในการตั้งค่าแอปของคุณ)
ขั้นตอนที่ 3: ดาวน์โหลดgoogle-services.jsonไปยังandroid / appในโฟลเดอร์โครงการของคุณ
ขั้นตอนที่ 4: flutter cleanในขั้วของคุณทำงานคำสั่ง
ขั้นตอนที่ 5: เรียกใช้แอปพลิเคชันของคุณ

ดูข้อมูลเพิ่มเติมได้ที่
https://developers.google.com/android/guides/client-auth
https://firebase.google.com/docs/flutter/setup


8
ความสะอาดสำคัญมาก
mkkhedawat

25

เมื่อฉันพบปัญหานี้ฉันได้ลองวิธีแก้ปัญหาอื่น ๆ ทั้งหมดที่อธิบายไว้ในโพสต์นี้ สิ่งเหล่านี้ไม่ได้ผล ในที่สุดฉันก็คิดออก: ในสถานการณ์ของฉันฉันต้องแน่ใจว่าได้ตั้งค่า "อีเมลสนับสนุน" ไว้แล้ว

อีเมลสนับสนุนการตั้งค่าสาธารณะ


21

คุณต้องกำหนดค่าโปรเจ็กต์ Google Cloud Api ด้วยแพ็คเกจของคุณ

https://developers.google.com/identity/sign-in/android/start-integrating#configure_a_project

ตรวจสอบให้แน่ใจว่าได้ลงชื่อเข้าใช้ด้วยบัญชี Firebase เดียวกัน

  1. เลือกโครงการ firebase ของคุณ
  2. เลือก Android
  3. เปิด Terminal ภายในโครงการ Flutter ของคุณ
  4. cd android
  5. ./gradlew signingReport หรือ gradlew signingReport
  6. วางชื่อแพ็กเกจและคีย์ SHA1 ของคุณ
  7. ดาวน์โหลดข้อมูลลูกค้า
  8. ดาวน์โหลดและแทนที่ไฟล์ google-services.json
  9. flutter clean

IOS:

  1. เลือกโครงการ Firebase ของคุณ
  2. เลือก IOS
  3. ป้อน Bundle ID ของคุณ
  4. ดาวน์โหลดหนังสือรับรอง
  5. ดาวน์โหลดและแทนที่ GoogleService-info.plist

2
gradlew signReport ช่วยฉันได้มากเพราะตอนแรกฉันใช้ที่เก็บคีย์ผิด และด้วยคำสั่งนั้นคุณจะได้คำสั่งที่ถูกต้อง
BHuelse

17

ฉันใช้เวลาหลายปีในการพยายามแก้ไขปัญหานี้

1. เปิด grade.propertiesไฟล์นี้อยู่ใต้: {{YOUR PROJECT}} / android / gradle.properties

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

2. เพิ่มอาร์กิวเมนต์ต่อไปนี้ใน 'org.gradle.jvmargs' ตามที่แสดงในภาพหน้าจอ

-XX: MaxHeapSize = 256 ม. -Xmx256m

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

3. คลิกขวาที่ "gradlew" และไปที่ "Open in Terminal" ไฟล์นี้อยู่ใน {{YOUR PROJECT}} / android / gradlew

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

4. พิมพ์คำสั่งต่อไปนี้

gradlew signingReport

หากไม่ได้ผลก่อนอื่นให้ลองใช้คำสั่งที่สอง:

./gradlew signingReport

5. รอให้การคอมไพล์เสร็จสิ้นและควรพิมพ์คีย์ SHA ให้คุณ

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

ใช้คีย์เหล่านี้เพื่อตรวจสอบสิทธิ์แอปของคุณในhttps://console.firebase.google.com/


1
สำหรับฉันนั่นเป็นสิ่งเดียวที่ใช้ได้ผลคือ keytool ของฉันไม่ทำงาน SHA-1 / SHA-256
PRO GRAMMER

4
หากขั้นตอนที่ 4 ไม่ได้ผลให้เรียก gradlew แบบนี้แทน: ./gradlew signReport
Tincho825

1
Chiming กล่าวว่านี่เป็นสิ่งเดียวที่เหมาะกับฉัน พยายามอย่างอื่นและใช้เวลาหลายวันในการพยายามแก้ไขปัญหาก่อนที่จะพบสิ่งนี้
Mark Rawlingson

รับข้อผิดพลาดนี้: ไม่สามารถเริ่มต้นคลาส org.codehaus.groovy.runtime.InvokerHelper
Ramis

นี่เป็นวิธีที่ง่ายที่สุด! สิ่งนี้ควรได้รับการยอมรับ
reverie_ss

11

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

การเปิดใช้วิธีการลงชื่อเข้าใช้ของ Google ในคอนโซล Firebase


7

ขั้นตอนเพิ่มเติมที่คุณอาจต้องดำเนินการเพื่อให้ google_sign_in ทำงาน:

] [2]

  • หากคุณสามารถเรียกใช้ Google Sign In ในระหว่างการดีบัก แต่ไม่ได้อยู่ในรุ่นมีโอกาสสูงที่คุณจะไม่ได้เพิ่ม SHA1 และ SHA256 ของคีย์รีลีสลงใน firebase หากต้องการรับ SHA ของคีย์รีลีสให้ใช้keytool -list -v -keystore ~/key.jks -alias key

คอนโซล คุณควรลงเอยด้วยข้อมูลรับรอง SHA อย่างน้อย 6 รายการ : 2 จากคีย์การแก้ปัญหา 2 จากการเชื่อมโยง Google Play และ 2 จากรหัสรุ่น โปรดทราบว่าคุณไม่จำเป็นต้องดาวน์โหลดไฟล์ google-services.json อีกครั้งหลังจากเพิ่มข้อมูลประจำตัว SHA รุ่นลงใน firebase

Firebase

# Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

# GooglePlay Services
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.android.gms.**
-keep class com.google.common.** { *; }
-dontwarn com.google.common.**

7

คุณพลาดขั้นตอนการกำหนดค่าที่เปิดใช้งานการเข้าสู่ระบบ Google บน firebase

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

เพียงทำตามขั้นตอนด้านล่างให้เพียงพอ

  1. เปิดใช้งานGoogle Auth Method
  2. กำหนดค่าลายนิ้วมือใบรับรองproject-level settingในโครงการปัจจุบันของคุณที่ วิธีการสร้างใบรับรอง
  3. เลือกอีเมลสำหรับอีเมลสนับสนุนโครงการ
  4. ดาวน์โหลดgoogle-service.jsonลงในโครงการของคุณ
  5. วิ่ง flutter clean
  6. เริ่มต้น flutter run

ภาพ


6

"Flutter clean" เป็นชิ้นส่วนที่ทุกคนขาดหายไปหลังจากลงทะเบียน SHA1 ใน Firebase Console!


3

สาเหตุหนึ่งที่คุณอาจพบข้อผิดพลาดนี้คือหากคุณไม่ได้กรอกแบบฟอร์มยินยอม OAuth ของ Google นี่คือการเปลี่ยนแปลงใหม่ของ Firebase

ขั้นตอนที่คุณต้องปฏิบัติตามเพื่อกรอกแบบฟอร์มยินยอมสำหรับแอปของคุณมีดังนี้

  1. ไปที่คอนโซล google api (ปัจจุบันอยู่ที่https://console.developers.google.com ) ตรวจสอบให้แน่ใจว่าคุณได้ลงชื่อเข้าใช้บัญชีของคุณที่สร้างโครงการ Firebase ภายใต้
  2. เลือกโครงการของคุณจากเมนูแบบเลื่อนลง "เลือกโครงการ" ที่ด้านบนซ้ายของคอนโซลนักพัฒนาซอฟต์แวร์
  3. ในบานหน้าต่างด้านซ้ายให้เลื่อนไปที่ "ข้อมูลรับรอง" จากนั้นเปลี่ยนเป็น "หน้าจอคำยินยอม OAuth"
  4. ภายใต้ "ชื่อแอปพลิเคชัน" ป้อนชื่อสาธารณะของแอปพลิเคชันของคุณ
  5. ภายใต้ "โลโก้แอปพลิเคชัน" อัปโหลดไฟล์ภาพในเครื่องของแอปพลิเคชันของคุณ
  6. ในส่วน "อีเมลสนับสนุน" ให้ป้อนอีเมลสนับสนุนเดียวกันกับที่ระบุไว้ในแอปพลิเคชัน Firebase ของคุณ

ตอนนี้หน้าจอของคุณควรมีลักษณะตามตัวอย่างนี้ในขั้นตอนที่ 6

  1. เลื่อนลงและกรอกข้อมูลใน "ลิงก์หน้าแรกของแอปพลิเคชัน" "ลิงก์นโยบายความเป็นส่วนตัวของแอปพลิเคชัน" และ "ลิงก์ข้อกำหนดในการให้บริการของแอปพลิเคชัน" โดยเพิ่มhttp: //ก่อนโดเมนที่ได้รับอนุญาตซึ่งแอป firebase ของคุณอาศัยอยู่ที่

นี่คือตัวอย่างที่ไฮไลต์ของวิธีการกรอกข้อมูลภูมิภาคเหล่านี้ในขั้นตอนที่ 7

  1. คลิกบันทึก

ขั้นตอนเหล่านี้ใช้ได้ผลสำหรับฉัน! แม้ว่าลิงก์อาจยังไม่มีอยู่ แต่ฉันต้องการอ้างอิงแหล่งที่มาของโซลูชันนี้ที่นี่


เป็นคำตอบของคำถามจริงหรือ?
Bulat

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

1
คุณต้อง "ส่งเพื่อยืนยัน" หรือแค่ "บันทึก"
เรียบง่ายกว่า

3

สำหรับข้อยกเว้นแพลตฟอร์ม 10 ให้ลองทำดังนี้:

  1. สร้างลายนิ้วมือ SHA1 ใหม่บนเครื่องของคุณ
  2. ไปที่การตั้งค่าแอป firebase สำหรับ Android ใน Firebase Console
  3. คลิกเพิ่มลายนิ้วมือใหม่ในการตั้งค่าแอป Android ของคุณ
  4. วางลายนิ้วมือ SHA1 ใหม่ลงในช่อง
  5. สร้างไฟล์ config json ใหม่
  6. แทนที่ไฟล์ config ในไดเรกทอรี android
  7. ทำความสะอาดกระพือปีก
  8. ดำเนินโครงการของคุณ

2

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


ฉันจะเปิดใช้งาน thant ได้ที่ไหน
Ahmed Albarody

@AhmedAlbarody ในคอนโซล firebase ของคุณ - เลือกการรับรองความถูกต้องจากนั้นคุณต้องเปิดใช้งานบริการที่คุณต้องการใช้
Guy

1

ตรวจสอบให้แน่ใจว่า SHA-1 ต้องเป็นคีย์ดีบักที่สร้างขึ้นในระบบของคุณเท่านั้นจากนั้นดาวน์โหลดไฟล์ google-services.json ต่อท้ายโปรเจ็กต์ของคุณ


1

ตรวจสอบให้แน่ใจว่าคุณได้เพิ่ม

 dependencies {
    classpath 'com.google.gms:google-services:4.2.0'
}

ใน android / build.gradle และ

apply plugin: 'com.google.gms.google-services'

ในAndroid / app / build.gradle ตรวจสอบให้แน่ใจว่า applicationId ในandroid / app / build.gradleเหมือนกับชื่อแพ็กเกจของคุณในAndroidManifest.xml (คุณอาจลืมเปลี่ยน applicationId หลังจากเปลี่ยนชื่อแพ็กเกจในบางครั้ง) ชื่อแอปพลิเคชันนี้หรือชื่อแพ็กเกจในไฟล์รายการควรเป็นชื่อของชื่อแพ็กเกจ Android ของคุณในแอป firebase


1

คุณควรสร้าง SHA-1 และ SHA-256 สำหรับพีซีแต่ละเครื่องที่คุณใช้ และเพิ่มทั้งหมดลงในการตั้งค่าโปรเจ็กต์ firebase

และคุณควรกรอกแบบฟอร์มในแท็บคำยินยอม OAuth


1

ถ้ามันทำงานก่อนหน้านี้ แต่ตอนนี้กำลังใช้เครื่องคอมพิวเตอร์ที่แตกต่างกันคุณจะต้องเพิ่มใหม่ SHA-1 / SHA-256 ลายนิ้วมือที่เกิดจากคอมพิวเตอร์ที่ใช้ในโครงการของคุณในFirebase ตัวอย่างทีละขั้นตอนที่ดีในการทำเช่นนั้น: https://stackoverflow.com/a/56091158/5365164


1

ในกรณีของฉันมันเป็นความผิดพลาดโง่ ๆ ตรวจสอบให้แน่ใจว่า applicationId ของคุณใน firebase เช่น: 'com.example.appname' ตรงกับ applicationId ในไฟล์ app / src / build.gradle ของคุณภายใต้ defaultConfig {} ไม่มีข้อผิดพลาดในการสะกด ไม่มีตัวพิมพ์ใหญ่ตัวพิมพ์เล็กขัดแย้งกันในกรณีของฉันตัวอักษรตัวเดียวเป็นตัวพิมพ์ใหญ่ซึ่งทำให้เกิดปัญหาทั้งหมด


0

ในandroid / app / build.gradleฉันเปลี่ยนการอ้างอิงจากcom.android.tools.build:gradle:3.1.3 / com.google.gms: google-services: 3.2.1เป็นcom.android.tools.build:gradle 3.2.1 / com.google.gms: google-services: 4.2.0 และมันได้ผล


0

ขณะลงทะเบียนแอปใน Firebase ฉันได้เปลี่ยน applicationId เป็นสิ่งที่เหมาะกับแอปของฉัน อย่างไรก็ตามสิ่งนี้ส่งผลให้มีการติดตั้งแอปพลิเคชัน Flutter ตัวที่สองบนโทรศัพท์ของฉันเมื่อฉันรันโปรแกรมดีบั๊ก (แน่นอนว่าเกิดจากการเปลี่ยนแปลง applicationId) ดังนั้นสิ่งที่ใช้ได้กับสถานการณ์ของฉันคือremoveทั้งการติดตั้งและre-installแอป


0

ฉันลองทุกอย่างข้างต้นแล้วและไม่มีอะไรได้ผล ความผิดพลาดของฉันคือฉันมีโฟลเดอร์เวอร์ชันสตูดิโอ Android หลายโฟลเดอร์ในไดรฟ์และฉันป้อนคีย์ SHA1 ผิดในการตั้งค่า firebase



0

ฉันมีปัญหาและใช้เวลา 5 ชั่วโมงในการแก้ไข ฉันจำได้ว่าฉันอ่านที่ไหนสักแห่งว่า API Exception 10 หมายความว่ามีปัญหากับลายนิ้วมือ ดังนั้นจึงต้องเป็นที่เก็บคีย์หรือการกำหนดค่าผิดใน firebase ในที่สุดก็เป็นที่เก็บคีย์ ฉันยังไม่แน่ใจว่าทำไมถึงได้ผล แต่นี่คือสิ่งที่ฉันทำโดยวิธีนี้ฉันใช้ Windows 10:

1. ) ตรวจสอบให้แน่ใจว่าในไฟล์android / build.gradleฉันมีสิ่งต่อไปนี้:

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
        classpath 'com.google.gms:google-services:4.2.0'
    }
}

2. ) ฉันเพิ่มสองบรรทัดนี้ไปยังไฟล์android / gradle.properties

android.useAndroidX=true
android.enableJetifier=true

3. ) ไปที่C: \ Users \ YOURUSER \ .androidและลบสิ่งต่อไปนี้:

debug.keystore
debug.keystore.lock

4. ) เปิดเทอร์มินัลในฐานะผู้ดูแลระบบและสร้างที่เก็บคีย์การดีบักในไดเร็กทอรีนี้

$ keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000

ได้รับลายนิ้วมือ:

$ keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android 

5. ) เพิ่มลายนิ้วมือ SHA1 ในการกำหนดค่าใน firebase

นั่นคือจุดจบของฉัน ฉันหวังว่ามันจะช่วยใครสักคน


0

โปรดตรวจสอบให้แน่ใจว่าใบรับรองการลงนามที่คุณใช้บนคอนโซล firebase ตรงกับที่ใช้ในการกำหนดค่าการดีบัก signConfigs >> ในไฟล์ app / build.gradle ขณะที่ยังอยู่ในระหว่างการพัฒนา Missmatch ทำให้เกิดข้อผิดพลาด


0

สิ่งนี้แก้ไขให้ฉัน ฉันทำ refactor ขนาดเล็กในโครงการใหม่ ฉันคิดว่าฉันกำลังใช้google-services.jsonไฟล์เก่าของฉันแต่ฉันใช้ไฟล์ผิด ฉันลองทำอย่างอื่นเป็นเวลาสองวันก่อนที่จะตระหนักถึงข้อผิดพลาดง่ายๆนี้


0

สิ่งนี้ช่วยฉันได้ (เป็นปัญหาในการนำเข้า SHA1)

cd .android ฉันใช้และคัดลอกคีย์ SHA1 และวางใน firebase, การกำหนดค่าโครงการ, แอปพลิเคชัน Android, ใบรับรอง SHA

keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android

และฉันได้สร้างกุญแจขึ้นมาด้วย:

keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkeytwo -keypass android -keyalg RSA -keysize 2048 -validity 10000

และใช้สิ่งนี้เพื่อรับคีย์ SHA อีกหนึ่งคีย์:

keytool -list -v -keystore debug.keystore -alias androiddebugkeytwo -storepass android -keypass android

ฉันคัดลอกและวางเพิ่มอีกหนึ่งคีย์ในโปรเจ็กต์ firebase ของฉัน

ดาวน์โหลด google-services.json และวางใน Android / app ภายในโครงการ flutter

สิ่งนี้ใช้งานได้อย่างถูกต้อง pubspec.yml ของฉัน:

  http: ^0.12.0+2
  cupertino_icons: ^0.1.2
  firebase_auth: ^0.15.1
  firebase_analytics: ^5.0.6
  firebase_core: ^0.4.2+1
  google_sign_in: ^4.0.14

รหัสของฉัน:

    Widget _signInButton() {
    return OutlineButton(
      splashColor: Colors.grey,
      onPressed: () async {
        await signInWithGoogle()
            .then((FirebaseUser user) => print(user.displayName))
            .catchError((e) => print(e));

      },

    );
  }

import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';

final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = new GoogleSignIn();

Future<FirebaseUser> signInWithGoogle() async {
  final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
  final GoogleSignInAuthentication googleSignInAuthentication =
      await googleSignInAccount.authentication;

  final AuthCredential credential = GoogleAuthProvider.getCredential(
    accessToken: googleSignInAuthentication.accessToken,
    idToken: googleSignInAuthentication.idToken,
  );

  final AuthResult authResult = await _auth.signInWithCredential(credential);
  final FirebaseUser user = authResult.user;
  print(user.displayName.toString());
  assert(!user.isAnonymous);
  assert(await user.getIdToken() != null);

  final FirebaseUser currentUser = await _auth.currentUser();
  assert(user.uid == currentUser.uid);

  return user;
}

void signOutGoogle() async {
  await googleSignIn.signOut();

  print("User Sign Out");
}

ฉันหวังว่างานนี้


0

โปรดตรวจสอบว่าคุณได้ดำเนินการดังกล่าว:

  • เปิดใช้งานการลงชื่อเข้าใช้ Google จากคอนโซล Firebase ของคุณ

  • ใส่ SHA-1 ของคุณเมื่อตั้งค่าแอพ android firebase

  • หลังจากลงชื่อเข้าใช้ด้วยบัญชีเดียวกับที่คุณสร้างโปรเจ็กต์ Firebase แล้วคุณได้กรอก https://console.developers.google.com/apis/credentials/consent นี้

0

ฉันได้รับข้อผิดพลาดนี้: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 7 null) วิธีแก้ปัญหาอาจจะดีสำหรับคุณ

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

ตัวแปรที่ส่งคืนต้องตรวจสอบก่อนใช้


ฉันคิดว่ามันยากที่จะทำตามคำตอบของคุณ: คุณสามารถขอความช่วยเหลือในการใช้ภาษาอังกฤษ (ไม่ใช่ภาษาที่ 1 ของฉัน ) ได้ไหม
greybeard

0

ในกรณีของฉันไม่มีคำตอบใดที่ช่วยแก้ปัญหาได้ หลังจากที่ความคิดบางอย่างที่ฉันตระหนักว่าบางครั้งที่ผ่านมาผมได้เปลี่ยนชื่อแพคเกจของแอพลิเคชันของฉัน หากเป็นกรณีของคุณคุณควรสร้างแอปพลิเคชันอื่นในโปรเจ็กต์ Firebase ด้วยชื่อแพ็กเกจใหม่และดาวน์โหลดไฟล์ google-services.json อีกครั้ง


0

อย่างไรก็ตามคำตอบที่ให้ไว้ข้างต้นนั้นถูกต้อง แต่ถึงกระนั้นหากคุณประสบปัญหาอย่าลืมตรวจสอบส่วนการลงนาม Config {} ของ app / build.gradle ไม่ควรมีการอ้างอิงไฟล์ที่เก็บคีย์ที่ไม่ต้องการซึ่งอาจทำให้เกิดความไม่ตรงกันกับ google-services.json และที่เก็บคีย์


0

หากแอปที่คุณวางจำหน่ายทำงานไม่ถูกต้องและคุณกำลังใช้ Google Play Signing ให้คัดลอก SHA จากบัญชี Play Storeของคุณแอปจากรหัสในเครื่องของคุณจะไม่ทำงาน ป้อนคำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.