Flutter社交媒体认证插件facebook_auth的使用
Flutter社交媒体认证插件facebook_auth的使用
配置
假设你的Facebook应用ID为1234567890
,客户端令牌为abcde12345
,应用名称为My App
。
Android
官方文档:https://developers.facebook.com/docs/facebook-login/android/
在android/app/src/main/res/values/strings.xml
文件中定义以下字符串资源:
<string name="facebook_app_id">1234567890</string>
<string name="fb_login_protocol_scheme">fb1234567890</string>
<string name="facebook_client_token">abcde12345</string>
在AndroidManifest.xml
文件中添加以下内容:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:label="myapp"
android:icon="@mipmap/ic_launcher">
<!-- Facebook应用ID和令牌 -->
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
<!-- Facebook Chrome Custom Tabs -->
<activity android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="${applicationLabel}" />
<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>
<!-- Facebook Chrome Custom Tabs结束 -->
</application>
</manifest>
iOS
官方文档:https://developers.facebook.com/docs/facebook-login/ios/
在Info.plist
文件中添加以下内容:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb1234567890</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>1234567890</string>
<key>FacebookClientToken</key>
<string>abcde12345</string>
<key>FacebookDisplayName</key>
<string>My App</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-share-api</string>
</array>
使用
- 将插件添加到
pubspec.yaml
文件中:
dependencies:
facebook_auth: ^x.y.z
运行flutter pub get
命令以获取依赖项。
- 在Dart代码中导入插件:
import 'package:facebook_auth/facebook_auth.dart';
- 进行用户认证:
FacebookAuth().login(['public_profile', 'email']);
此函数返回一个包含以下信息的Future
对象:
{
'token': String,
'userId': String,
'expires': int, // 时间戳(自1970年1月1日以来的毫秒数)
'applicationId': String,
'lastRefresh': int, // 时间戳(自1970年1月1日以来的毫秒数)
'isExpired': Boolean,
'grantedPermissions': List<String>,
'declinedPermissions': List<String>,
'dataAccessExpirationTime': int // 时间戳(自1970年1月1日以来的毫秒数)
}
- 登出用户:
FacebookAuth().logout();
- 处理可能的错误:
try {
return {'idToken': await FacebookAuth().login(permissions)};
} on PlatformException catch (e) {
if (e.code == 'USER_CANCELLED') {
throw AppError('用户已取消');
}
rethrow;
}
SDK版本
Android
implementation 'com.facebook.android:facebook-login:16.0.1'
// implementation 'com.facebook.android:facebook-login:latest.release'
iOS
s.dependency 'FBSDKCoreKit', '~> 16.1'
s.dependency 'FBSDKLoginKit', '~> 16.1'
s.dependency 'FBSDKShareKit', '~> 16.1'
完整示例Demo
以下是完整的示例代码,展示了如何使用facebook_auth
插件进行用户认证和登出操作。
import 'dart:async';
import 'package:facebook_auth/facebook_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
Map<String, dynamic>? _userData;
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 初始化平台状态
Future<void> initPlatformState() async {
String platformVersion;
try {
// 登出当前用户
await FacebookAuth().logout();
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
// 如果小部件从树中移除,则忽略回复
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
// 用户认证
Future<void> login() async {
final result = await FacebookAuth().login(['public_profile', 'email']);
if (result.status == LoginStatus.success) {
final userData = await FacebookAuth.instance.getUserData();
setState(() {
_userData = userData;
});
}
}
// 用户登出
Future<void> logout() async {
await FacebookAuth().logout();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Facebook Auth Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: login,
child: const Text('登录'),
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: logout,
child: const Text('登出'),
),
const SizedBox(height: 20),
if (_userData != null)
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('User ID: ${_userData!['userId']}'),
Text('Token: ${_userData!['token']}'),
Text('Expires: ${_userData!['expires']}'),
Text('Application ID: ${_userData!['applicationId']}'),
Text('Last Refresh: ${_userData!['lastRefresh']}'),
Text('Is Expired: ${_userData!['isExpired']}'),
Text('Granted Permissions: ${_userData!['grantedPermissions'].join(', ')}'),
Text('Declined Permissions: ${_userData!['declinedPermissions'].join(', ')}'),
Text('Data Access Expiration Time: ${_userData!['dataAccessExpirationTime']}'),
],
),
],
),
),
),
);
}
}
更多关于Flutter社交媒体认证插件facebook_auth的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter社交媒体认证插件facebook_auth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用facebook_auth
插件来实现Facebook社交媒体认证的代码示例。这个示例将涵盖基本的认证流程,包括初始化插件、请求权限、获取用户信息等步骤。
首先,确保你的Flutter项目已经添加了facebook_auth
依赖。在pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
facebook_auth: ^3.5.0 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你需要配置Facebook开发者平台。创建一个Facebook应用,获取App ID和App Secret,并在Facebook开发者平台上配置你的应用包名和重定向URI。
配置Android
在android/app/src/main/AndroidManifest.xml
中添加以下配置:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<!-- Add the following lines inside the <application> tag -->
<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>
</manifest>
在android/app/src/main/res/values/strings.xml
中添加Facebook App ID:
<resources>
<string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>
<string name="fb_login_protocol_scheme">fbYOUR_FACEBOOK_APP_ID</string>
</resources>
配置iOS
在ios/Runner/Info.plist
中添加以下配置:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<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>
Flutter代码实现
在你的Flutter代码中,使用facebook_auth
插件进行认证:
import 'package:flutter/material.dart';
import 'package:facebook_auth/facebook_auth.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _userInfo = '';
@override
void initState() {
super.initState();
_loginWithFacebook();
}
Future<void> _loginWithFacebook() async {
try {
final AccessToken accessToken = await FacebookAuth.instance.login();
if (accessToken != null) {
final FacebookAuthCredential credential =
FacebookAuthCredential(accessToken.token);
// 在这里你可以使用credential进行进一步的认证流程,比如与Firebase集成
// 例如:FirebaseAuth.instance.signInWithCredential(credential);
// 获取用户信息(可选)
final GraphResponse graphResponse = await FacebookAuth.instance
.api('/me?fields=id,name,email', accessToken.token);
setState(() {
_userInfo = graphResponse.data.toString();
});
}
} catch (e) {
print(e);
// 处理错误
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Facebook Auth Demo'),
),
body: Center(
child: Text(_userInfo.isEmpty ? 'Logging in...' : _userInfo),
),
),
);
}
}
这个示例展示了如何使用facebook_auth
插件进行Facebook认证,并获取用户的基本信息。请注意,实际应用中你需要处理更多的错误情况,并根据你的应用需求调整用户信息的获取和使用方式。此外,确保你的应用遵循Facebook平台政策,并在Facebook开发者平台上正确配置你的应用。