Flutter Facebook OAuth登录插件firebase_ui_oauth_facebook的使用

Flutter Facebook OAuth 登录插件 firebase_ui_oauth_facebook 的使用

1. 简介

firebase_ui_oauth_facebook 是 Firebase UI for Flutter 提供的一个插件,用于通过 Facebook 进行 OAuth 登录。它简化了集成 Facebook 登录的过程,并与 Firebase Authentication 无缝对接。

2. 开始使用

2.1 配置 Firebase 项目

在使用 firebase_ui_oauth_facebook 之前,你需要确保已经完成了以下步骤:

  • 创建一个 Firebase 项目并将其与你的 Flutter 应用关联。
  • 在 Firebase 控制台中启用 Facebook 登录提供程序。
  • 在 Facebook Developer Console 中创建一个应用,并将 Firebase 项目的 OAuth 重定向 URI 添加到 Facebook 应用的设置中。
2.2 添加依赖项

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

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^2.4.0
  firebase_auth: ^4.2.0
  firebase_ui_auth: ^1.1.0
  firebase_ui_oauth_facebook: ^1.0.0

运行 flutter pub get 以安装依赖项。

2.3 配置 iOS 和 Android 平台
2.3.1 iOS 配置

ios/Runner/Info.plist 文件中添加以下内容:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>fb{your-facebook-app-id}</string>
    </array>
  </dict>
</array>
<key>FacebookAppID</key>
<string>{your-facebook-app-id}</string>
<key>FacebookDisplayName</key>
<string>{your-facebook-app-display-name}</string>
<key>LSApplicationQueriesSchemes</key>
<array>
  <string>fbapi</string>
  <string>fb-messenger-api</string>
  <string>fbauth2</string>
  <string>fbshareextension</string>
</array>

{your-facebook-app-id}{your-facebook-app-display-name} 替换为你的 Facebook 应用 ID 和显示名称。

2.3.2 Android 配置

android/app/build.gradle 文件中添加以下内容:

dependencies {
    implementation 'com.facebook.android:facebook-android-sdk:[5,6)'
}

android/app/src/main/AndroidManifest.xml 文件中添加以下内容:

<application>
    ...
    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />
    <activity
        android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name" />
    <activity
        android:name="com.facebook.CustomTabActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="@string/fb_login_protocol_scheme" />
        </intent-filter>
    </activity>
</application>

android/app/src/main/res/values/strings.xml 文件中添加以下内容:

<resources>
    <string name="facebook_app_id">{your-facebook-app-id}</string>
    <string name="fb_login_protocol_scheme">fb{your-facebook-app-id}</string>
</resources>

{your-facebook-app-id} 替换为你的 Facebook 应用 ID。

3. 使用示例代码

以下是一个完整的示例代码,展示了如何使用 firebase_ui_oauth_facebook 插件进行 Facebook 登录。

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
import 'package:firebase_ui_oauth_facebook/firebase_ui_oauth_facebook.dart';

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

  // 注册 Facebook 提供商
  FirebaseUIAuth.configureProviders([
    FacebookProvider(
      clientId: 'your-facebook-app-id', // 替换为你的 Facebook 应用 ID
    ),
  ]);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SignInScreen(
        providers: [
          FacebookProvider(
            clientId: 'your-facebook-app-id', // 替换为你的 Facebook 应用 ID
          ),
        ],
        actions: [
          AuthStateChangeAction<SignedIn>((context, state) {
            // 用户成功登录后的处理逻辑
            Navigator.pushReplacement(
              context,
              MaterialPageRoute(builder: (context) => HomeScreen()),
            );
          }),
        ],
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Welcome!'),
            ElevatedButton(
              onPressed: () async {
                // 注销用户
                await FirebaseAuth.instance.signOut();
                Navigator.pushReplacement(
                  context,
                  MaterialPageRoute(builder: (context) => MyApp()),
                );
              },
              child: Text('Sign Out'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用firebase_ui_oauth_facebook插件来实现Facebook OAuth登录的示例代码。这个插件通常与Firebase Authentication一起使用,以简化OAuth流程。

首先,确保你的Flutter项目已经配置好了Firebase和Facebook的认证。这包括在Firebase控制台中启用Facebook登录,并在Facebook开发者控制台中配置你的应用。

1. 添加依赖

在你的pubspec.yaml文件中添加firebase_ui_oauth_facebook依赖:

dependencies:
  flutter:
    sdk: flutter
  firebase_auth: ^3.3.3  # 确保版本与firebase_ui_oauth_facebook兼容
  firebase_ui_oauth: ^0.1.0  # 最新版本可能有所不同,请检查pub.dev
  firebase_core: ^1.6.0  # Firebase核心库

注意:firebase_ui_oauth_facebook实际上可能是firebase_ui_oauth包的一部分,或者你可能需要直接依赖firebase_auth并使用Firebase UI的OAuth功能。如果firebase_ui_oauth_facebook不是独立的包,以下示例将基于firebase_authfirebase_ui_oauth(如果存在的话)进行说明。

2. 配置Firebase和Facebook

在Firebase控制台中启用Facebook登录,并获取Web OAuth重定向URI和Facebook App ID。然后在Facebook开发者控制台中配置你的应用,包括添加Firebase提供的重定向URI。

3. 初始化Firebase

在你的main.dart文件或初始化代码中,初始化Firebase:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FacebookLoginScreen(),
    );
  }
}

4. 实现Facebook OAuth登录

创建一个新的屏幕或组件来处理Facebook登录:

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_auth/firebase_auth_platform_interface.dart';
import 'package:provider/provider.dart';  // 可选,用于状态管理

class FacebookLoginScreen extends StatefulWidget {
  @override
  _FacebookLoginScreenState createState() => _FacebookLoginScreenState();
}

class _FacebookLoginScreenState extends State<FacebookLoginScreen> {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  void _signInWithFacebook() async {
    // 注意:这里假设firebase_ui_oauth或firebase_auth直接支持Facebook登录
    // 实际上,你可能需要使用一个特定的URL Scheme或Web认证流程
    // 下面的代码是一个假设性的例子,具体实现可能有所不同
    try {
      // 创建一个OAuthProvider,如果firebase_auth直接支持的话
      OAuthProvider facebookProvider = OAuthProvider('facebook.com');
      final AuthCredential credential = await _auth.signInWithPopup(facebookProvider);
      
      // 获取Firebase用户
      final User? user = credential.user;
      
      // 更新UI或执行其他操作
      print('User signed in: ${user?.uid}');
    } catch (e) {
      print('Error signing in with Facebook: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Facebook Login'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _signInWithFacebook,
          child: Text('Sign in with Facebook'),
        ),
      ),
    );
  }
}

注意:上面的_signInWithFacebook方法是一个假设性的例子。实际上,firebase_auth包可能不直接支持OAuthProvider('facebook.com')这样的用法。如果你使用的是firebase_ui_oauth,你可能需要按照该库的文档进行配置和调用。

对于Facebook OAuth,你可能需要使用一个Web视图或URL Scheme来触发Facebook的OAuth流程,并在回调中处理认证结果。这通常涉及到更复杂的设置,包括配置Firebase的Web SDK和Facebook的登录回调URL。

由于firebase_ui_oauth_facebook可能不是一个独立的包,我强烈建议你查阅firebase_authfirebase_ui_oauth(如果存在)的最新文档,以获取最准确和最新的实现指南。

回到顶部