【发布时间】:2019-10-04 21:35:32
【问题描述】:
要崩溃的行:
GoogleSignInAccount googleUser = await _googleSignIn.signIn();
我尝试了什么:
- 我已经用这个命令生成了我的 SH1 密钥
keytool -list -v \ -alias androiddebugkey -keystore ~/.android/debug.keystore - 将 SH1 加密添加到 console.firebase.google.com
- 重新下载 google-service.json
- 将
debug.keystore从.android复制到MyProject/android - 在调试和发布中运行
-
添加到
android/build.gradle这些行:- 类路径'com.android.tools.build:gradle:3.2.1'
- 类路径 'com.google.gms:google-services:4.2.0'
-
添加到
android/app/build.gradle这行:- 在依赖项下实现'com.google.firebase:firebase-core:16.0.9'
- 在文件末尾应用插件:'com.google.gms.google-services'。
- 在我的项目文件夹下创建一个名为
release-signing.properties的文件,其中包含这些行。- storeFile=debug.keystore
- keyAlias=androiddebugkey
- storePassword=android
- keyPassword=android
另外,我搜索了 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 链接:
- Google sign in doesn't work after release of flutter app
- Flutter and google_sign_in plugin: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
- Google Sign In error 12500
我没有运气,请让我知道您的想法以及我该如何解决。
【问题讨论】:
-
你究竟是什么时候遇到这个错误的?
-
按下“使用 Google 登录”按钮后,我将打开一个弹出窗口,我需要在其中选择我的 google 帐户。在我按下我的 Google 帐户后,我会立即收到此错误消息。
-
我已经在问题中添加了将崩溃的行。
-
您是否检查了 logcat 以获得更详细的错误消息?由于是平台异常,所以在平台端失败了,所以有时你会在 android 或 iOS 日志中发现你在 Flutter 中找不到的错误消息
标签: dart flutter google-signin googlesigninapi googlesigninaccount