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&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