Flutter社交媒体登录插件firebase_social_login的使用

Flutter社交媒体登录插件firebase_social_login的使用

Firebase Social Login Plugin 是一个用于简化 Flutter 应用程序中社交媒体登录集成的 Flutter 包。通过该插件,您可以轻松实现 Google、Facebook 和 Apple 账户的社交登录功能,而无需单独处理复杂的认证流程。

认证支持

功能/平台 Android iOS Web macOS Windows Linux
邮箱
手机号码 × × ×
邮件链接 × × × ×
邮件验证
使用 Apple 登录 × ×
使用 Google 登录
使用 Twitter 登录 × × × × × ×
使用 Facebook 登录 × ×

注:

  1. 没有深度链接到应用,因此邮件验证链接会在网页上打开。
  2. 需要在浏览器中进行验证。

开始使用

连接您的 Flutter 应用到 Firebase

要将您的 Flutter 应用连接到 Firebase,请遵循以下步骤:

步骤 1: 创建 Firebase 项目
  1. 前往 Firebase 控制台
  2. 点击“添加项目”,然后按照设置说明创建新的 Firebase 项目。
  3. 创建完成后,您会被重定向到项目的控制面板。
步骤 2: 注册您的应用到 Firebase
对于 Android:
  1. 点击 Android 图标以向项目中添加 Android 应用。
  2. 输入您的 Android 包名(通常可以在 Flutter 项目的 android/app/build.gradle 文件中找到)。
  3. 可选地,您还可以提供其他详细信息,如应用别名和调试签名证书的 SHA-1。
  4. 点击“注册应用”以下载 google-services.json 文件。
对于 iOS:
  1. 点击 iOS 图标以向项目中添加 iOS 应用。
  2. 输入您的 iOS Bundle ID(通常可以在 Flutter 项目的 ios/Runner.xcodeproj/project.pbxproj 文件中找到)。
  3. 可选地,您还可以提供其他详细信息,如应用别名。
  4. 点击“注册应用”以下载 GoogleService-Info.plist 文件。
步骤 3: 在您的 Flutter 项目中添加 Social Login 插件

pubspec.yaml 文件中添加以下依赖项:

dependencies:
  social_login_plugin: ^0.0.4
步骤 4: 在使用任何社交媒体登录功能之前初始化 Firebase
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await SocialLoginPlugin().iniFirebase();
  runApp(MyApp());
}

使用 Google 登录

var googleData = await SocialLoginPlugin().signInWithGoogle();

使用 Facebook 登录

var facebookData = await SocialLoginPlugin().signInWithFacebook();

使用 Apple 登录

var appleData = await SocialLoginPlugin().signInWithApple();

示例代码

以下是完整的示例代码,展示了如何在 Flutter 应用中实现上述功能。

import 'dart:developer';

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:social_login_plugin/social_login_plugin.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await SocialLoginPlugin().iniFirebase();
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _socialLoginPlugin = SocialLoginPlugin();

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(40.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              socialLoginButtonWidget(
                  title: 'Google',
                  onPressed: () async {
                    var data = await _socialLoginPlugin.signInWithGoogle();
                    log("data : ${data.toString()}");
                  }),
              const SizedBox(
                height: 20,
              ),
              socialLoginButtonWidget(
                  title: 'Facebook',
                  onPressed: () async {
                    var data = await _socialLoginPlugin.signInWithFacebook();
                    log("data : ${data.toString()}");
                  }),
              const SizedBox(
                height: 20,
              ),
              socialLoginButtonWidget(
                  title: 'Apple',
                  onPressed: () async {
                    var data = await _socialLoginPlugin.signInWithApple();
                    log("data : ${data.toString()}");
                  }),
            ],
          ),
        ),
      ),
    );
  }

  Widget socialLoginButtonWidget(
      {required String title, required Function() onPressed}) {
    return ElevatedButton(
      onPressed: () {
        onPressed();
      },
      style: ElevatedButton.styleFrom(
          elevation: 12.0, textStyle: const TextStyle(color: Colors.white)),
      child: Text(title),
    );
  }
}

更多关于Flutter社交媒体登录插件firebase_social_login的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter社交媒体登录插件firebase_social_login的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中使用 firebase_social_login 插件可以实现通过社交媒体(如 Google、Facebook、Twitter 等)进行用户登录的功能。以下是使用 firebase_social_login 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 firebase_social_login 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  firebase_core: latest_version
  firebase_auth: latest_version
  firebase_social_login: latest_version

然后运行 flutter pub get 来安装依赖。

2. 初始化 Firebase

在你的 Flutter 项目中,初始化 Firebase。通常是在 main.dart 文件中进行初始化:

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Firebase Social Login',
      home: SocialLoginScreen(),
    );
  }
}

3. 配置社交媒体登录

在使用 firebase_social_login 插件之前,你需要在 Firebase 控制台和各个社交媒体平台上进行配置。

  • Google: 在 Firebase 控制台中启用 Google 登录,并配置 OAuth 客户端 ID。
  • Facebook: 在 Firebase 控制台中启用 Facebook 登录,并在 Facebook 开发者控制台中创建应用并配置 appIdappSecret
  • Twitter: 在 Firebase 控制台中启用 Twitter 登录,并在 Twitter 开发者控制台中创建应用并配置 apiKeyapiSecretKey

4. 使用 firebase_social_login 插件

在你的 Flutter 应用中使用 firebase_social_login 插件来实现社交媒体登录。

import 'package:flutter/material.dart';
import 'package:firebase_social_login/firebase_social_login.dart';
import 'package:firebase_auth/firebase_auth.dart';

class SocialLoginScreen extends StatefulWidget {
  @override
  _SocialLoginScreenState createState() => _SocialLoginScreenState();
}

class _SocialLoginScreenState extends State<SocialLoginScreen> {
  final FirebaseSocialLogin _socialLogin = FirebaseSocialLogin();
  FirebaseAuth _auth = FirebaseAuth.instance;

  Future<void> _signInWithGoogle() async {
    try {
      final user = await _socialLogin.signInWithGoogle();
      if (user != null) {
        // 用户登录成功
        print('Google User: ${user.displayName}');
      }
    } catch (e) {
      print('Google Sign In Error: $e');
    }
  }

  Future<void> _signInWithFacebook() async {
    try {
      final user = await _socialLogin.signInWithFacebook();
      if (user != null) {
        // 用户登录成功
        print('Facebook User: ${user.displayName}');
      }
    } catch (e) {
      print('Facebook Sign In Error: $e');
    }
  }

  Future<void> _signInWithTwitter() async {
    try {
      final user = await _socialLogin.signInWithTwitter();
      if (user != null) {
        // 用户登录成功
        print('Twitter User: ${user.displayName}');
      }
    } catch (e) {
      print('Twitter Sign In Error: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Social Login'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _signInWithGoogle,
              child: Text('Sign in with Google'),
            ),
            ElevatedButton(
              onPressed: _signInWithFacebook,
              child: Text('Sign in with Facebook'),
            ),
            ElevatedButton(
              onPressed: _signInWithTwitter,
              child: Text('Sign in with Twitter'),
            ),
          ],
        ),
      ),
    );
  }
}

5. 处理用户登录状态

使用 FirebaseAuth 来处理用户的登录状态。你可以监听 authStateChanges 来获取当前用户的登录状态:

@override
void initState() {
  super.initState();
  _auth.authStateChanges().listen((User? user) {
    if (user != null) {
      // 用户已登录
      print('User is signed in: ${user.uid}');
    } else {
      // 用户未登录
      print('User is signed out');
    }
  });
}

6. 处理用户注销

你可以通过调用 signOut 方法来注销用户:

Future<void> _signOut() async {
  await _auth.signOut();
  print('User signed out');
}
回到顶部