前言
历时半天时间,踏过无数个坑,终于吧google登录搞定了,有些坑是官方文档给挖的,但是大多数坑还是网上的其他同仁给挖的,在这我就不多说了,也可能是版本过于久远,在他们那个年代可行的方法到现在已经不可行了,所以在这里也加一些免责声明:本文章中的集成方式可能在未来某个时间段就失效了,所以,请大家最好还是以官方文档为准。
1.添加相关依赖:
firebase_auth: version
google_sign_in: version
插件地址:
https://pub.dev/packages/firebase_auth
https://pub.dev/packages/google_sign_in
2.注册Google账号
相关地址:
https://console.firebase.google.com
在firebase中创建自己的应用:
按照步骤填写就行了,最终进入项目管理页面:
点击有Flutter标识的图标:
进入如下页面:
按照上面的步骤完成项目的firebase插件的安装。
这里最主要的是第三步的初始化Firebase
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
// ...
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
如果加入这一步在运行的时候报错,可以替换成一下代码:
if (Firebase.apps.isEmpty) {
await Firebase.initializeApp(
name: 'app name',
options: DefaultFirebaseOptions.currentPlatform,
).then((value) {
logger.i('Firebase Initialized:${value.options}');
});
}
整体代码在main.dart 中设置
import 'package:bty_foundation/bty_foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:smart_lock_flutter/app.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// await SpUtil.getInstance();
if (Firebase.apps.isEmpty) {
await Firebase.initializeApp(
name: 'app name',
options: DefaultFirebaseOptions.currentPlatform,
).then((value) {
logger.i('Firebase Initialized:${value.options}');
});
}
SmartChannel.currentChannel=APPChannel.prod;
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((_) {
// Get.put(GlobalLogic());
runApp(const BytApp());
});
}
创建完应用后要将应用的包名以及Android签名信息加入到应用中,
设置好Firebase之后就是Google登录的部分了,google登录的代码如下:
void signInWithGoogle() async {
if (state.check == false) {
showToast(SmartIntlLocalizations.current.lock_name1059);
return;
}
try {
GoogleSignIn _googleSignIn = GoogleSignIn(
// Optional clientId254245928859-qt24ume2175h1183ruac8edned2u29kr.apps.googleusercontent.com
// clientId: '479882132969-9i9aqik3jfjd7qhci1nqf0bm2g71rm1u.apps.googleusercontent.com',
scopes: <String>[
'email',
'https://www.googleapis.com/auth/contacts.readonly',
],
);
logger.d("开始google登录");
// Trigger the authentication flow
final googleUser = await _googleSignIn.signIn();
logger.d("googleUser:${googleUser.toString()}");
// Obtain the auth details from the request
final googleAuth = await googleUser?.authentication;
logger.d("googleAuth:${googleAuth.toString()}");
if (googleAuth != null) {
// Create a new credential
logger.d("googleAuth: is not null");
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
print("获取google信息成功${googleUser.toString()}");
// to do 处理获取google用户信息后的登录操作
} catch (e) {
logger.d("Auth error !:${e.toString()}");
}
}