Flutter Facebook登录功能插件flutter_facebook_plugin的使用

Flutter Facebook登录功能插件flutter_facebook_plugin的使用

Dart package: https://pub.dev/packages/flutter_facebook_plugin

Flutter Facebook登录和分享对话框

通过此插件可以轻松为您的应用添加Facebook登录功能,并在成功登录后调用Facebook分享对话框。

开始使用

要使用此插件,在pubspec.yaml文件中添加flutter_facebook_plugin作为依赖项。

dependencies:
  flutter_facebook_plugin: ^版本号

然后运行flutter pub get以获取依赖项。

安卓设置

第一步:访问Facebook开发者文档

前往Firebase文档页面。

第二步:完成步骤1

完成第一步配置。

第三步:跳过步骤2和步骤3

直接跳过第二步和第三步。

完成第四步:编辑资源和清单文件

/android/app/src/main/res/values/strings.xml中添加以下内容(如果文件不存在则创建):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="facebook_app_id">您的Facebook应用ID</string>
    <string name="fb_login_protocol_scheme">fb您的Facebook应用ID</string>
</resources>

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>

AndroidManifest.xml中添加以下权限:

<uses-permission android:name="android.permission.INTERNET"/>

完成第五步:将包名和默认活动类与您的应用关联

设置Package Name为您的Android应用的包名(AndroidManifest.xml中的package属性)。

设置Default Activity Class Name为您主活动类(带包名)。默认情况下应为LoginActivity.java

点击“保存”。

完成第六步:提供开发和发布密钥哈希

跳过接下来的步骤。

iOS设置

第一步:访问Facebook开发者文档

前往Firebase文档页面。

第二步:完成步骤1

选择一个应用或创建一个新的应用。如果您已经在Android设置过程中创建了一个应用,则可以使用它。

第三步:跳过步骤2和步骤3

跳过“设置您的开发环境”和“集成Facebook SDK”。

完成第四步:配置项目

ios/Runner/Info.plist中配置以下内容:

<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fbAPP-ID</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>APP-ID</string>
<key>FacebookClientToken</key>
<string>CLIENT-TOKEN</string>
<key>FacebookDisplayName</key>
<string>APP-NAME</string>

Info.plist中添加以下内容:

<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
<string>fbapi20160328</string>
<string>fbauth</string>
<string>fb-messenger-share-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>

完成第五步:连接应用程序委托

在Xcode中连接应用程序委托(Runner/Runner/AppDelegate),添加以下代码:

import Flutter
import FBSDKCoreKit

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
    override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    //Facebook支持
      FBSDKCoreKit.ApplicationDelegate.shared.application(
              application,
              didFinishLaunchingWithOptions: launchOptions
          )
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
    override func application(
            _ application: UIApplication,
            open url: URL,
            sourceApplication: String?,
            annotation: Any
        ) -> Bool {

            return ApplicationDelegate.shared.application(
                application, open: url,
                sourceApplication: sourceApplication,
                annotation: annotation
            )
        }
      
    override func application(
    _ app: UIApplication,
    open url: URL,
    options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
ApplicationDelegate.shared.application(
    app,
    open: url,
    sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
    annotation: options[UIApplication.OpenURLOptionsKey.annotation]
)
    }
        }

示例代码

以下是一个完整的示例代码,展示如何使用flutter_facebook_plugin进行Facebook登录和分享。

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

import 'package:flutter/services.dart';
import 'package:flutter_facebook_plugin/flutter_facebook_plugin.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

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

class _MyAppState extends State<MyApp> {
  String _facebookUserId = 'Unknown';

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Facebook Login and Share Plugin'),
        ),
        body: Column(
          children: [
            Center(
              child: GestureDetector(
                child: const Text("Log in Facebook"),
                onTap: () {
                  initFacebookLoginShare();
                },
              ),
            ),
            Text("Facebook User Id: $_facebookUserId"),
          ],
        ),
      ),
    );
  }

  /// 调用Facebook登录和分享
  Future<void> initFacebookLoginShare() async {
    String? facebookUserId = '';
    try {
      facebookUserId = await FlutterFacebookPlugin.facebookLogin(
          "https://developers.facebook.com");
    } on PlatformException {
      facebookUserId = '';
    }

    setState(() {
      _facebookUserId = facebookUserId!;
    });
  }
}

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

1 回复

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


在Flutter中实现Facebook登录功能,可以使用flutter_facebook_auth插件。这个插件提供了一个简单的方式来集成Facebook登录功能到你的Flutter应用中。以下是如何使用flutter_facebook_auth插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_facebook_auth: ^4.4.1+1

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

2. 配置Facebook应用

在Facebook开发者平台上创建一个应用,并获取App IDApp Secret。然后按照以下步骤配置:

  1. 添加平台:在Facebook开发者控制台中,选择你的应用,然后点击“设置” -> “基本”。在“平台”部分,点击“添加平台”,选择“Android”或“iOS”。

  2. 配置Android

    • 包名:输入你的Flutter应用的包名(例如:com.example.myapp)。
    • 默认活动类名:输入com.example.myapp.MainActivity(根据你的应用修改)。
    • 密钥哈希:生成并添加你的应用的密钥哈希。
  3. 配置iOS

    • Bundle ID:输入你的Flutter应用的Bundle ID(例如:com.example.myapp)。
    • URL Scheme:添加fb<APP_ID>,其中<APP_ID>是你的Facebook应用的App ID。

3. 配置Flutter项目

Android配置

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

<meta-data
    android:name="com.facebook.sdk.ApplicationId"
    android:value="@string/facebook_app_id" />

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

<string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>

iOS配置

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

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>fbYOUR_FACEBOOK_APP_ID</string>
    </array>
  </dict>
</array>
<key>FacebookAppID</key>
<string>YOUR_FACEBOOK_APP_ID</string>
<key>FacebookDisplayName</key>
<string>YOUR_APP_NAME</string>
<key>LSApplicationQueriesSchemes</key>
<array>
  <string>fbapi</string>
  <string>fbauth2</string>
</array>

4. 实现Facebook登录

在你的Flutter代码中,使用flutter_facebook_auth插件来实现登录功能。以下是一个简单的示例:

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

void main() {
  runApp(MyApp());
}

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

class FacebookLoginDemo extends StatefulWidget {
  @override
  _FacebookLoginDemoState createState() => _FacebookLoginDemoState();
}

class _FacebookLoginDemoState extends State<FacebookLoginDemo> {
  Map<String, dynamic>? _userData;

  Future<void> _login() async {
    final LoginResult result = await FacebookAuth.instance.login();

    if (result.status == LoginStatus.success) {
      final AccessToken accessToken = result.accessToken!;
      final userData = await FacebookAuth.instance.getUserData();
      setState(() {
        _userData = userData;
      });
    } else {
      print(result.status);
      print(result.message);
    }
  }

  Future<void> _logout() async {
    await FacebookAuth.instance.logOut();
    setState(() {
      _userData = null;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Facebook Login'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            _userData != null
                ? Text('Logged in as ${_userData!['name']}')
                : Text('Not logged in'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _login,
              child: Text('Login with Facebook'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _logout,
              child: Text('Logout'),
            ),
          ],
        ),
      ),
    );
  }
}

5. 运行应用

运行你的Flutter应用,点击“Login with Facebook”按钮,用户将被重定向到Facebook进行登录。登录成功后,用户的名称将显示在屏幕上。

6. 处理权限

你可以通过传递permissions参数来请求特定的权限。例如:

final LoginResult result = await FacebookAuth.instance.login(
  permissions: ['email', 'public_profile'],
);
回到顶部