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

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

安装

在您的Flutter项目中,您需要声明一个pubspec依赖项。此外,还需要进行一些最小限度的Android和iOS特定配置,否则您的应用程序可能会崩溃。

在您的Flutter项目中

参见 安装说明

Android

如果您已经完成了Facebook登录文档中提到的“关联您的包名称和默认类与您的应用”以及“为您的应用提供开发和发布密钥哈希”步骤,那么接下来需要找到您的Facebook App ID。您可以在Facebook开发者控制台中的Facebook应用仪表板里找到您的Facebook App ID。

一旦找到了Facebook App ID,您需要执行以下两个操作:

首先,在您的字符串资源文件中复制粘贴以下内容。如果没有该文件,则创建它。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">您的应用名称。</string>

    <!-- 替换这里的 "000000000000" 为您自己的Facebook App ID -->
    <string name="facebook_app_id">000000000000</string>

    <!--
      替换这里的 "000000000000" 为您自己的Facebook App ID。
      **注意**:该方案需要以 `fb` 开头,然后跟您的ID。
    -->
    <string name="fb_login_protocol_scheme">fb000000000000</string>
</resources>

然后,将以下内容复制粘贴到您的Android Manifest文件中:

<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文件示例可以参见 这里

iOS

这假设您已经在Facebook登录文档中完成了“注册并配置您的应用与Facebook”步骤(注意:您可以跳过“第2步:设置您的开发环境”和“第5步:连接您的AppDelegate”)。

完成后,找到您的Facebook App ID。您可以在Facebook开发者控制台中的Facebook应用仪表板里找到您的Facebook App ID。

一旦找到了Facebook App ID,您只需将以下内容复制粘贴到您的Info.plist文件中,放在结束标签</dict></plist>之前。(注意:如果您正在将此插件与其他插件(例如google_sign_in插件)一起使用,这些插件也需要您向Info.plist文件添加CFBundleURLTypes键,您需要将它们合并在一起)。

<key>CFBundleURLTypes</key>
<array>
    <!--
    <dict>
    ... 其他CFBundleURLTypes定义。
    </dict>
    -->
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <!--
              替换这里的 "000000000000" 为您自己的Facebook App ID。
              **注意**:该方案需要以 `fb` 开头,然后跟您的ID。
            -->
            <string>fb000000000000</string>
        </array>
    </dict>
</array>

<key>FacebookAppID</key>
<!-- 替换这里的 "000000000000" 为您自己的Facebook App ID -->
<string>000000000000</string>
<key>FacebookDisplayName</key>
<!-- 替换这里的 "YOUR_APP_NAME" 为您自己的Facebook App 名称 -->
<string>YOUR_APP_NAME</string>

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-share-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
</array>

完整的Info.plist文件示例可以参见 这里

如何使用它?

该库尽可能地匹配原生Android和iOS登录SDK的API。对于完整的API文档,可以查看 源代码。一切都已在那里记录。

由于示例代码比一页文档更有用,以下是涵盖的常见情况:

import 'package:flutter_facebook_login/flutter_facebook_login.dart';

final facebookLogin = FacebookLogin();
final result = await facebookLogin.logInWithReadPermissions(['email']);

switch (result.status) {
  case FacebookLoginStatus.loggedIn:
    _sendTokenToServer(result.accessToken.token);
    _showLoggedInUI();
    break;
  case FacebookLoginStatus.cancelledByUser:
    _showCancelledMessage();
    break;
  case FacebookLoginStatus.error:
    _showErrorOnUI(result.errorMessage);
    break;
}

您还可以更改登录对话框的视觉外观。例如:

// 让用户使用基于Web视图的登录对话框登录。Yay!
facebookLogin.loginBehavior = FacebookLoginBehavior.webViewOnly;

完整的API文档位于源代码中,可以在这里找到

获取已登录用户的Facebook个人资料

目前,此功能不会集成到此插件中。参见 讨论

但是,您可以使用以下四行Dart代码来获取此信息:

final result = await facebookSignIn.logInWithReadPermissions(['email']);
final token = result.accessToken.token;
final graphResponse = await http.get(
            'https://graph.facebook.com/v2.12/me?fields=name,first_name,last_name,email&amp;access_token=${token}');
final profile = JSON.decode(graphResponse.body);

变量profile现在将包含以下信息:

{
   "name": "Iiro Krankka",
   "first_name": "Iiro",
   "last_name": "Krankka",
   "email": "iiro.krankka\u0040gmail.com",
   "id": "<用户ID>"
}

故障排除

如果您没有在Flutter项目中完成AndroidX设置,您的项目可能无法构建。简单的解决方案是在您的android/gradle.properties中添加两行:

android.useAndroidX=true
android.enableJetifier=true

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

1 回复

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


flutter_facebook_login 是一个用于在 Flutter 应用中实现 Facebook 登录的插件。它允许用户通过他们的 Facebook 账户登录到你的应用程序,并获取用户的 Facebook 信息(如姓名、电子邮件等)。

以下是如何在 Flutter 项目中使用 flutter_facebook_login 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 flutter_facebook_login 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_facebook_login: ^3.0.0

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

2. 配置 Facebook 开发者平台

Facebook 开发者平台 上创建一个新的应用,并配置相关信息:

  1. 创建一个新的应用。
  2. 在应用仪表板中,找到 “Settings” -> “Basic”,添加你的应用的 包名默认活动类名
  3. 在 “Facebook Login” 设置中,启用 “Facebook Login”。
  4. 生成并配置 Facebook App IDFacebook Client Token

3. 配置 Android 项目

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

<application
    android:label="YourAppName"
    android:icon="@mipmap/ic_launcher">
    
    <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="YourAppName" />
    
    <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">fbYOUR_FACEBOOK_APP_ID</string>
</resources>

4. 配置 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>YourAppName</string>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-share-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
</array>

5. 实现 Facebook 登录

在 Flutter 应用中实现 Facebook 登录的逻辑:

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

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

class _FacebookLoginDemoState extends State<FacebookLoginDemo> {
  final FacebookLogin facebookLogin = FacebookLogin();

  String _message = 'Log in with Facebook';

  Future<void> _login() async {
    final FacebookLoginResult result = await facebookLogin.logIn(['email']);

    switch (result.status) {
      case FacebookLoginStatus.loggedIn:
        final FacebookAccessToken accessToken = result.accessToken;
        _showMessage('Logged in successfully!');
        break;
      case FacebookLoginStatus.cancelledByUser:
        _showMessage('Login cancelled by the user.');
        break;
      case FacebookLoginStatus.error:
        _showMessage('Something went wrong with the login process.\n'
            'Here\'s the error Facebook gave us: ${result.errorMessage}');
        break;
    }
  }

  Future<void> _logout() async {
    await facebookLogin.logOut();
    _showMessage('Logged out.');
  }

  void _showMessage(String message) {
    setState(() {
      _message = message;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Facebook Login Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(_message),
            ElevatedButton(
              onPressed: _login,
              child: Text('Log in with Facebook'),
            ),
            ElevatedButton(
              onPressed: _logout,
              child: Text('Log out'),
            ),
          ],
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: FacebookLoginDemo(),
));

6. 运行应用

现在你可以运行你的 Flutter 应用,并测试 Facebook 登录功能。点击 “Log in with Facebook” 按钮,用户将被引导到 Facebook 登录页面,登录成功后,你可以获取用户的 Facebook 信息。

7. 获取用户信息

登录成功后,你可以通过 Facebook Graph API 获取用户的详细信息。例如:

final graphResponse = await http.get('https://graph.facebook.com/v12.0/me?fields=name,email&access_token=${accessToken.token}');
final profile = json.decode(graphResponse.body);
print(profile);
回到顶部