要崩溃的行:
GoogleSignInAccount googleUser = await _googleSignIn.signIn();
我尝试过什么:
keytool -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore
debug.keystore
从.android
复制到MyProject/android
将这些行添加到android/build.gradle
中
将以下行添加到android/app/build.gradle
中:
release-signing.properties
的文件,其中包含这些行。
此外,我已经搜索了我可以找到的 ALL StackOverflow 问题,但没有一个对我有用。
我的pubspec.yaml:
firebase_core: ^0.4.0+1
firebase_analytics: ^3.0.1
cloud_firestore: ^0.11.0+2
firebase_auth: ^0.11.1
google_sign_in: ^4.0.1+3
rxdart: ^0.22.0
验证类别:
class AuthService {
final GoogleSignIn _googleSignIn = GoogleSignIn();
final FirebaseAuth _auth = FirebaseAuth.instance;
final Firestore _db = Firestore.instance;
Observable<FirebaseUser> user;
Observable<Map<String, dynamic>> profile;
PublishSubject loading = PublishSubject();
AuthService() {
user = Observable(_auth.onAuthStateChanged);
profile = user.switchMap((FirebaseUser user) {
if (user != null) {
return _db
.collection('user')
.document(user.uid)
.snapshots()
.map((snap) => snap.data);
} else {
return Observable.just({});
}
});
}
Future<FirebaseUser> googleSignIn() async {
loading.add(true);
GoogleSignInAccount googleUser = await _googleSignIn.signIn();
GoogleSignInAuthentication googleAuth = await googleUser.authentication;
// FirebaseUser user = await _auth.signInWithGoogle(
// accessToken: googleAuth.accessToken, idToken: googleAuth.idToken);
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
FirebaseUser user = await _auth.signInWithCredential(credential);
updateUserData(user);
print("Sign in" + user.displayName);
loading.add(false);
return user;
}
}
主类:
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
AuthService authService = AuthService();
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blueGrey,
),
home: Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
MaterialButton(
child: Text("Log in with Google"),
color: Colors.blueGrey,
textColor: Colors.deepOrange,
onPressed: () => authService.googleSignIn(),
),
MaterialButton(
child: Text("LogOut"),
color: Colors.redAccent,
textColor: Colors.purple,
onPressed: () => authService.signOut(),
),
],
),
),
),
);
}
}
现在,如果您能向我指出正确的方向,我将非常感激。
以下是我已经尝试过的一些stackoverflow链接:
我都没有运气,请告诉我您的想法以及如何解决。
答案 0 :(得分:1)
我也尝试了几乎所有可以从Internet搜索的答案。因此,我决定尝试ios端,它仍然给我错误“ 403受限制的客户端”。然后,我确定是服务器端问题。最后,我发现忘记了设置在Google Developers Console> API和服务>证书>用户同意屏幕link中提供支持的电子邮件地址,并且在Firebase项目设置中也可以使用此选项。设置完成后,一切都会正常。希望对您有所帮助。
答案 1 :(得分:1)
按照文档中提到的所有步骤操作后,即使我遇到了同样的问题。对我有用的一件事是在Firebase控制台的设置页面中添加支持电子邮件
答案 2 :(得分:1)
OP @Mircea特别提到了错误12500。这就是我克服该错误的方法:
最近几天,我遇到了同样的问题。我将代码重构了数十次,添加了断点,重置了SHA-1,SHA-256,并且几乎可以找到所有其他基于“代码”的解决方案。我经常遇到错误:
E/flutter (11935): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 12500: , null)
我失去了理智,所以我决定从全新的眼睛开始,再慢慢地通过解决方案。我注意到一个模糊的帖子隐藏在一个线程的深处,其中提到了有关支持电子邮件的内容。直到我添加了所说的支持电子邮件,事情才“神奇地”开始起作用。我已在项目的Firebase设置下方附上了屏幕截图。
答案 3 :(得分:1)
答案 4 :(得分:0)
我遇到了同样的问题,为我解决了这个问题的是在SHA-1上另外添加了SHA-256指纹
希望对您也有用!
答案 5 :(得分:0)
您需要完成“ Oauth同意屏幕”
我转到了此页面(https://console.developers.google.com/apis/credentials) 不要忘记在列表中选择您的项目(左上方)。然后进入“ Oauth同意屏幕”
我填写了应用程序徽标,应用程序主页链接和应用隐私策略链接(以及project.firebaseapp.com)并保存。
现在可以使用了,我可以登录。
这必须在文档中进行解释。人们会发疯,并且不要因缺乏此类文档而动fl。
答案 6 :(得分:0)
当我改用android studio时,使用Visual Studio遇到了相同的问题。我猜是因为我已经用android studio登录到firebase了,如果我可以使用VS做同样的事情,我会徘徊,哦,希望这对某人有帮助
答案 7 :(得分:0)
我遇到了同样的问题,我通过使用Keytool添加调试/发布SHA1和SHA256证书指纹来解决了这个问题
发布
keytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>
调试
keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore
此处有更多详细信息:https://developers.google.com/android/guides/client-auth