Mir*_*cea 12 dart google-signin flutter googlesigninaccount googlesigninapi
将要崩溃的行:
GoogleSignInAccount googleUser = await _googleSignIn.signIn();
Run Code Online (Sandbox Code Playgroud)
我试过什么:
keytool -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystoredebug.keystore从.android到MyProject/android添加到android/build.gradle这些行中:
添加到android/app/build.gradle这一行:
release-signing.properties在我的项目文件夹下创建一个文件,其中包含这些行。
另外,我已经在所有 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
Run Code Online (Sandbox Code Playgroud)
认证类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
主要类:
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(),
),
],
),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你们中的任何人能指出我正确的方向,我将不胜感激。
以下是我已经尝试过的一些 stackoverflow 链接:
我对他们中的任何一个都没有运气,请让我知道您的想法以及我该如何解决。
Mig*_*Mac 25
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 设置的屏幕截图。
您需要完成“ Oauth 同意屏幕”
我去了这个页面 ( https://console.developers.google.com/apis/credentials ) 不要忘记在列表中选择你的项目(左上角)。然后进入“Oauth 同意屏幕”
我填写了应用程序徽标和应用程序主页链接和应用程序隐私政策链接(与 project.firebaseapp.com)并保存。
现在它工作了,我可以登录了。
这必须在文档中解释。人们会发疯的,不要因为缺乏这种文档而尝试慌张。
就我而言,问题是由于模拟器不兼容造成的。模拟器没有playstore。
我创建了一个新的 AVD,其中有 Playstore。然后就成功了!
另外,验证您是否已在 firebase 控制台上添加 SHA1 密钥。
| 归档时间: |
|
| 查看次数: |
14693 次 |
| 最近记录: |