版本不同 安卓的处理需要不同
// Facebook SDK
implementation 'com.facebook.android:facebook-android-sdk:[8,9)'
// Facebook SDK
implementation 'com.facebook.android:facebook-android-sdk:latest.release'
image.png
image.png
image.png
Android
string.xml
<!-- Facebook SDK配置 -->
<!-- 这些是默认值,实际值会在运行时通过Remote Config获取 -->
<string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>
<string name="facebook_client_token">YOUR_FACEBOOK_CLIENT_TOKEN</string>
AndroidManifest.xml
<!-- Facebook SDK // START-->
<meta-data android:name="com.facebook.sdk.AutoInitEnabled" android:value="false"/>
<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 SDK // END-->
MainActivity
package com.example.bushy
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import com.facebook.FacebookSdk
import com.facebook.appevents.AppEventsLogger
import com.facebook.LoggingBehavior
class MainActivity : FlutterActivity() {
private val CHANNEL = "facebook_sdk_channel"
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(
flutterEngine.dartExecutor.binaryMessenger,
CHANNEL
).setMethodCallHandler { call, result ->
when (call.method) {
"initializeFacebookSDK" -> {
try {
val appId = call.argument<String>("appId")
val clientToken = call.argument<String>("clientToken")
// 禁用自动初始化
FacebookSdk.setAutoInitEnabled(false)
if (appId != null && clientToken != null) {
// 设置应用ID和客户端令牌
FacebookSdk.setApplicationId(appId)
FacebookSdk.setClientToken(clientToken)
FacebookSdk.sdkInitialize(applicationContext)
FacebookSdk.fullyInitialize()
// 激活应用事件记录
AppEventsLogger.activateApp(application)
println("初始化Facebook SDK appId:$appId clientToken:$clientToken")
// 设置日志行为,类似iOS的loggingBehaviors设置
FacebookSdk.setIsDebugEnabled(true)
FacebookSdk.addLoggingBehavior(LoggingBehavior.APP_EVENTS)
FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS)
FacebookSdk.addLoggingBehavior(LoggingBehavior.DEVELOPER_ERRORS)
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS)
result.success("Facebook SDK initialized successfully")
} else {
result.error(
"INVALID_ARGUMENTS",
"App ID and Client Token are required",
null
)
}
} catch (e: Exception) {
result.error(
"INITIALIZATION_ERROR",
"Failed to initialize Facebook SDK: ${e.message}",
null
)
}
}
"isFacebookSDKInitialized" -> {
try {
val isInitialized = FacebookSdk.isInitialized()
result.success(isInitialized)
} catch (e: Exception) {
result.error(
"CHECK_ERROR",
"Failed to check Facebook SDK status: ${e.message}",
null
)
}
}
else -> {
result.notImplemented()
}
}
}
}
}
iOS
info.plist
<key>FacebookAppID</key>
<string></string>
<key>FacebookAutoLogAppEventsEnabled</key>
<true/>
<key>FacebookClientToken</key>
<string></string>
import Flutter
import UIKit
import FBSDKCoreKit
@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
// FB SDK 初始化
let reslut = ApplicationDelegate.shared.application(
application,
didFinishLaunchingWithOptions: launchOptions
)
// 设置Facebook SDK延迟初始化的方法通道
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
let facebookChannel = FlutterMethodChannel(name: "facebook_sdk_channel",
binaryMessenger: controller.binaryMessenger)
facebookChannel.setMethodCallHandler { (call: FlutterMethodCall, result: @escaping FlutterResult) in
if call.method == "initializeFacebookSDK" {
guard let args = call.arguments as? [String: Any],
let appId = args["appId"] as? String,
let clientToken = args["clientToken"] as? String else {
result(FlutterError(code: "INVALID_ARGUMENTS", message: "Missing appId or clientToken", details: nil))
return
}
// 配置Facebook SDK
Settings.shared.appID = appId
Settings.shared.clientToken = clientToken
Settings.shared.loggingBehaviors = [.appEvents, .networkRequests, .developerErrors, .informational]
print("初始化Facebook SDK appId:\(appId) clientToken:\(clientToken)");
if #available(iOS 14, *) {
if (ATTrackingManager.trackingAuthorizationStatus == .authorized){
Settings.shared.isAdvertiserTrackingEnabled = true
} else if(ATTrackingManager.trackingAuthorizationStatus == .notDetermined){
} else {
Settings.shared.isAdvertiserTrackingEnabled = false
}
}
AppEvents.shared.logEvent(.init("test_event_init_succ"))
// 添加应用事件激活
AppEvents.shared.activateApp()
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
AppEvents.shared.flush()
}
result("Facebook SDK initialized successfully")
} else if call.method == "isFacebookSDKInitialized" {
// 检查Facebook SDK是否已初始化
let isInitialized = Settings.shared.appID != nil && !Settings.shared.appID!.isEmpty
result(isInitialized)
} else {
result(FlutterMethodNotImplemented)
}
}
return true
}
override func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
return ApplicationDelegate.shared.application(
app,
open: url,
sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplication.OpenURLOptionsKey.annotation]
)
}
}