如何为Flutter应用集成Facebook SDK以追踪广告带来的安装量?
Flutter集成Facebook SDK实现应用安装量追踪方案
一、原生项目基础配置
Android 端配置
- 在
android/app/src/main/AndroidManifest.xml的<application>标签内添加以下配置:<!-- 配置Facebook应用ID --> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <!-- 启用自动应用事件上报 --> <meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled" android:value="true"/> <!-- 处理Facebook相关页面跳转 --> <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> - 在
android/app/src/main/res/values/strings.xml中添加你的Facebook应用信息:<string name="facebook_app_id">你的Facebook应用ID</string> <string name="fb_login_protocol_scheme">fb你的Facebook应用ID</string>
iOS 端配置
- 在
ios/Runner/Info.plist中添加以下配置:<!-- Facebook应用ID与显示名称 --> <key>FacebookAppID</key> <string>你的Facebook应用ID</string> <key>FacebookDisplayName</key> <string>你的应用名称</string> <!-- 启用自动事件上报 --> <key>AutoLogAppEventsEnabled</key> <true/> <!-- 允许访问Facebook相关Scheme --> <key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-share-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array> <!-- 配置深层链接Scheme --> <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb你的Facebook应用ID</string> </array> </dict> </array> <!-- iOS14+ ATT权限申请说明 --> <key>NSUserTrackingUsageDescription</key> <string>我们需要追踪应用安装来源,以优化广告投放效果</string>
二、Flutter 端代码完善
基于你提供的代码,补充SDK初始化、事件上报等核心逻辑,确保安装量追踪生效:
import 'package:flutter_facebook_sdk/flutter_facebook_sdk.dart'; import 'package:shared_preferences/shared_preferences.dart'; // 用于判断首次启动 class MyAppState extends State<MyApp> { String _deepLinkUrl = 'Unknown'; FlutterFacebookSdk? facebookSdk; Future<void> initPlatformState() async { String? deepLinkUrl; try { // 初始化Facebook SDK facebookSdk = FlutterFacebookSdk(); // 启用自动事件上报 await facebookSdk!.setAutoLogAppEventsEnabled(true); // 监听深层链接 facebookSdk!.onDeepLinkReceived!.listen((event) { setState(() { _deepLinkUrl = event; }); // 上报深层链接打开事件 _logFacebookEvent('deeplink_open', params: {'url': event}); }); deepLinkUrl = await facebookSdk!.getDeepLinkUrl; if (deepLinkUrl != null) { setState(() { _deepLinkUrl = deepLinkUrl!; }); _logFacebookEvent('deeplink_open', params: {'url': deepLinkUrl!}); } // 开启广告追踪权限 await facebookSdk!.setAdvertiserTracking(isEnabled: true); // 仅在首次启动时上报APP_INSTALL事件 final prefs = await SharedPreferences.getInstance(); final hasReportedInstall = prefs.getBool('has_reported_install') ?? false; if (!hasReportedInstall) { await _logFacebookEvent('APP_INSTALL'); await prefs.setBool('has_reported_install', true); } } on PlatformException catch (e) { print('Facebook SDK初始化失败: ${e.message}'); } if (!mounted) return; } // 封装Facebook事件上报方法 Future<void> _logFacebookEvent(String eventName, {Map<String, dynamic>? params}) async { try { await facebookSdk!.logEvent( name: eventName, parameters: params, ); } on PlatformException catch (e) { print('事件上报失败: ${e.message}'); } } @override void initState() { super.initState(); initPlatformState(); } @override Widget build(BuildContext context) { return Observer( builder: (_) => MaterialApp( debugShowCheckedModeBanner: false, navigatorKey: navigatorKey, navigatorObservers: [ FirebaseAnalyticsObserver(analytics: analytics), ], home: SplashScreen(), theme: AppTheme.lightTheme, darkTheme: AppTheme.darkTheme, themeMode: appStore.isDarkMode ? ThemeMode.dark : ThemeMode.light, scrollBehavior: SBehavior(), supportedLocales: LanguageDataModel.languageLocales(), localizationsDelegates: [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate ], localeResolutionCallback: (locale, supportedLocales) => locale, locale: Locale(appStore.selectedLanguage!.languageCode.validate(value: DEFAULT_LANGUAGE)), ), ); } }
三、验证与注意事项
- 首次启动判断:通过
shared_preferences标记是否已上报安装事件,避免重复上报影响数据准确性。 - 权限验证:iOS需确保用户授权ATT权限,Android需保证Google Play服务正常(用于获取广告ID),否则Facebook无法关联广告来源。
- 数据验证:可通过Facebook后台的
Events Manager查看事件上报情况,或使用测试设备模拟广告跳转安装,验证追踪链路是否正常。 - 版本兼容:确保
flutter_facebook_sdk版本与原生Facebook SDK版本匹配,避免出现兼容性问题。
内容的提问来源于stack exchange,提问作者Adnane ROUHI
相关产品推荐
相关产品推荐

