
https://console.firebase.google.com
注册成功后在主页按照提示创建一个应用。

点击项目设置。

按照需求,选择需要配置的平台,每个平台的配置都需要单独配置,配置流程也有一定差异。


下载Firebase cli工具,推荐使用npm方式进行安装。
https://firebase.google.com/docs/cli
npm install -g firebase-tools执行登录命令,会提示使用自己的Google账号登录。
firebase login若还未创建Flutter项目和下载FlutterSDK,则还需要按照提示去完成操作。

从任何目录运行以下命令:
dart pub global activate flutterfire_cli然后,在Flutter 项目的根目录下,运行以下命令,需要修改--project参数中的ID,直接复制页面命令即可。
flutterfire configure --project=studied-point-xxx这会自动向 Firebase 注册您的每个平台应用,并向您的 Flutter 项目添加 lib/firebase_options.dart 配置文件。
如果在Windows平台下报错找不到flutterfire,则需要完整的执行路径,类似如下,按情况修改个人用户名。
 C:\Users\admin\AppData\Local\Pub\Cache\bin\flutterfire.bat configure --project=studied-point-xxx
在Flutter的程序启动入口处添加初始化Firebase的代码,参考如下:
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(const MyApp());
  logger.i("Starting app...");
}
软件包名称一般就是应用级 build.gradle 文件中的 applicationId,也就是MainActivity的包名。
生成签名证书的SHA-1
https://developers.google.com/android/guides/client-auth?hl=zh-cn
如需获取调试证书指纹,请执行以下操作,USERPROFILE为用户目录,如果报错,则自行修改实际目录。
debug.keystore的默认密码是android。
keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore如需获取发布证书指纹,请执行以下操作,keystore需要先生成,将生成的字符串拷贝到页面中。
keytool -list -v -alias <your-key-name> -keystore <path-to-production-keystore>如果没有证书,生成证书的命令如下,需要按实际情况填写信息,以及记住设置的密码。
keytool -genkey -v -keystore android.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sign
将下载的 google-services.json 文件移到您的模块(应用级/app目录)根目录中。
如果是Flutter项目,则可以跳过此步骤。

软件包ID可以在常规标签中找到 Xcode 中应用主目标的软件包标识符,一般和Android包名类似,名字中的下划线会替换为驼峰格式。


下载的“GoogleService-Info.plist”文件移至 Xcode 项目的根目录(Runner目录)并将其添加至所有目标。
如果是Flutter项目,则可以跳过此步骤。

如果是Flutter项目,则可以跳过此步骤。

选择左侧的Authentication菜单,点击“开始”。

选择Google提供方。

点击启用,添加项目的公开名称,用户可以看到,再选择项目支持邮箱,一般是当前登录的Google邮箱,最后保存即可。

插件的地址如下: https://pub.dev/packages/firebase_auth
https://pub.dev/packages/google_sign_in
pubspec.yaml中依赖配置如下:
firebase_auth: ^5.1.0
google_sign_in: ^6.2.1添加Google登录按钮。
// 其他登录方式
Row(
  mainAxisAlignment: MainAxisAlignment.center,
  children: [
    const Padding(
      padding: EdgeInsets.only(right: 16.0),
      child: Text(
        '其它登录',
        style: TextStyle(
          fontSize: 16.0,
          // fontWeight: FontWeight.bold,
        ),
      ),
    ),
    
    const SizedBox(width: 16.0),
    CircleAvatar(
      backgroundColor: Colors.white,
      child: IconButton(
        icon: Image.asset('assets/images/google-logo.png'),
          onPressed: () async {
            if(await signInWithGoogle()) {
              Navigator.pushAndRemoveUntil(
                context,
                MaterialPageRoute(builder: (context) => const MyHomePage()),
                    (route) => false,
              );
            }
          }
      ),
    ),
  ],
),新建google_login.dart,添加如下登录代码。
import 'package:chat_ai/common/common.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
// 登录并返回
Future<bool> signInWithGoogle() async {
  // 确保用户已经登录,并获取当前用户的身份验证令牌
  final currentUser = FirebaseAuth.instance.currentUser;
  if (currentUser != null) {
    // 这里处理您需要使用这个JWT令牌的逻辑,例如将它存储到本地存储中作为凭据。
    // final tokenResult = await currentUser.getIdToken();
    return true;
  } else {
    UserCredential userCredential = await loginGoogle();
    logger.d("user login google: ${userCredential.user?.displayName}");
    return true;
  }
}
// Google登录
Future<UserCredential> loginGoogle() async {
  final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
  // Obtain the auth details from the request
  final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication;
  // Create a new credential,
  final credential = GoogleAuthProvider.credential(
    accessToken: googleAuth?.accessToken,
    idToken: googleAuth?.idToken,
  );
  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithCredential(credential);
}
// 退出Google登录
Future<void> signOutGoogle() async {
  await FirebaseAuth.instance.signOut();
  await GoogleSignIn().signOut();
}Flutter集成Google第三方登录:https://blog.csdn.net/oZhuiMeng123/article/details/126795365
Flutter集成Firebase接入Google登录、FackBook登录、Apple登录:https://juejin.cn/post/7262615700564590651
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。