FacebookSdk 禁用 SDK 自动初始化功能

禁用 SDK 自动初始化功能

版本不同 安卓的处理需要不同
// 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]
        )
    }
}






©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容