Flutter广告集成插件flutter_meta_appads_sdk的使用
Flutter广告集成插件flutter_meta_appads_sdk的使用
flutter_meta_appads_sdk
是一个 Flutter 插件,提供了与 Meta SDK(原 Facebook SDK)交互的简单接口。它允许你初始化 SDK、设置用户数据、记录标准事件、记录购买事件和记录自定义事件。
安装
创建应用
首先,你需要在 Meta 开发者平台创建一个应用:
- 访问 Meta Developers
- 获取你的
app id
和client token
iOS 安装
-
在
Info.plist
文件中添加以下代码,并将[APP-ID]
、[CLIENT-TOKEN]
和[APP-NAME]
替换为从 Meta 面板中提取的适当值:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb[APP-ID]</string> </array> </dict> </array> <key>FacebookAppID</key> <string>[APP-ID]</string> <key>FacebookClientToken</key> <string>[CLIENT-TOKEN]</string> <key>FacebookDisplayName</key> <string>[APP-NAME]</string>
-
在
Info.plist
文件中设置以下代码以启用或禁用自动 SDK 事件:<key>FacebookAutoLogAppEventsEnabled</key> <false/>
-
决定是否禁用广告标识符跟踪,并在
Info.plist
文件中添加以下代码:<key>FacebookAdvertiserIDCollectionEnabled</key> <false/>
Android 安装
-
在
android/app/src/main/AndroidManifest.xml
文件的<application>
元素内添加以下元数据元素,以指定你的应用 ID 和客户端访问 ID:<application android:label="string/app_name"> ... <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"/> ... </application>
-
在
android/app/src/main/AndroidManifest.xml
文件中添加INTERNET
权限:... </application> <uses-permission android:name="android.permission.INTERNET"/> ...
-
在
android/app/src/main/res/values/strings.xml
文件中添加以下代码,并将[APP-ID]
和[CLIENT-TOKEN]
替换为从 Meta 面板中提取的适当值:<?xml version="1.0" encoding="utf-8"?> <resources> <string name="facebook_app_id">[APP-ID]</string> <string name="facebook_client_token">[CLIENT-TOKEN]</string> </resources>
-
在
android/app/src/main/AndroidManifest.xml
文件中设置以下代码以启用或禁用自动 SDK 事件:<application> ... <meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled" android:value="false"/> ... </application>
-
决定 SDK 是否在应用启动时自动初始化,或者通过
initSdk()
方法初始化,并在android/app/src/main/AndroidManifest.xml
文件中添加以下代码:<application> ... <meta-data android:name="com.facebook.sdk.AutoInitEnabled" android:value="false"/> ... </application>
-
决定是否禁用广告标识符跟踪,并在
android/app/src/main/AndroidManifest.xml
文件中添加以下代码:<application> ... <meta-data android:name="com.facebook.sdk.AdvertiserIDCollectionEnabled" android:value="false"/> ... </application>
主要功能
- 初始化:
initSdk()
设置 SDK。 - 用户数据:
setUserData(FBSetUserDataCommand)
提供用户信息以用于定向广告。 - 事件跟踪:
logStandardEvent(FBLogStandardEventCommand)
: 跟踪标准事件(例如,等级提升)。logPurchase(FBLogPurchaseCommand)
: 记录购买事件。logEvents(FBLogEventCommand)
: 记录自定义事件。
- 匿名 ID:
getFbAnonId()
获取 Facebook 匿名 ID。 - 跟踪权限:
setAdvertiserTrackingEnabled(bool)
: 启用或禁用广告商跟踪,控制应用是否与 Meta 分享用户数据以用于定向广告目的。setAdvertiserIDCollectionEnabled(bool)
: 仅适用于 iOS(低于 iOS 17),与 ATT 权限请求一起使用,当用户允许时设置为True
,当用户不允许时设置为False
。setDataProcessingOptions(FBSetDataProcessingOptionsCommand)
: 配置各种数据处理选项,包括数据使用和共享偏好。请参阅 Meta 文档。
关于 Meta SDK
请遵循官方 Meta SDK 指南进行正确集成:Meta App Ads URL。如果你发现任何不符合官方文档的情况,请 报告问题。
示例代码
以下是一个完整的示例代码,展示了如何使用 flutter_meta_appads_sdk
插件:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_meta_appads_sdk/flutter_meta_appads_sdk.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _flutterMetaAppadsSdkPlugin = FlutterMetaAppAdsSdk();
String? fbAnonId;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Column(
children: [
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.initSdk(enableLogging: true),
),
child: const Text("Init SDK"),
),
const SizedBox(height: 8),
ElevatedButton(
child: const Text("Get FB AnonId"),
onPressed: () async {
var anonId = await _flutterMetaAppadsSdkPlugin.getFbAnonId();
setState(() {
fbAnonId = anonId;
});
},
),
Text("FB ANON ID: ${fbAnonId ?? "Not retrieved AnonId"}"),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.logEvents(
FBLogEventCommand(
eventName: "test_event",
eventParameters: {
"my_parameter": "1234",
},
),
),
),
child: const Text("Log Event"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.logStandardEvent(
FBLogStandardEventCommand(
event: FBStandardEvent.contact,
parameters: {
FBStandardParameter.parameterNameSuccess: "1",
},
),
),
),
child: const Text("Log Standard Event"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.logPurchase(
FBLogPurchaseCommand(
amount: 1,
currency: "USD",
eventParameter: {
"my_parameter": "1234",
},
),
),
),
child: const Text("Log Purchase"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.setUserData(
FBSetUserDataCommand(
type: FBUserDataType.country,
value: "6959097001d10501ac7d54c0bdb8db61420f658f2922cc26e46d536119a31126",
),
),
),
child: const Text("Set UserData"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.setAdvertiserTrackingEnabled(
isEnabled: true,
),
),
child: const Text("Set Advertiser Tracking Enabled - True"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.setAdvertiserTrackingEnabled(
isEnabled: false,
),
),
child: const Text("Set Advertiser Tracking Enabled - False"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.setAdvertiserIDCollectionEnabled(
isEnabled: true,
),
),
child: const Text("Set Advertiser ID Collection Enabled - True"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.setAdvertiserIDCollectionEnabled(
isEnabled: false,
),
),
child: const Text("Set Advertiser ID Collection Enabled - False"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.setDataProcessingOptions(
FBSetDataProcessingOptionsCommand(modes: []),
),
),
child: const Text("setDataProcessingOptions - empty modes"),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: () => unawaited(
_flutterMetaAppadsSdkPlugin.setDataProcessingOptions(
FBSetDataProcessingOptionsCommand(
modes: ["LDU"],
country: 0,
state: 0,
),
),
),
child: const Text("setDataProcessingOptions - LDU automatic geolocation"),
),
],
),
),
);
}
}
以上代码展示了如何初始化 SDK、获取 Facebook 匿名 ID、记录事件、设置用户数据以及管理广告跟踪权限。希望这些信息对你有所帮助!
更多关于Flutter广告集成插件flutter_meta_appads_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter广告集成插件flutter_meta_appads_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成并使用flutter_meta_appads_sdk
插件来显示广告的示例代码。请确保你已经设置好Flutter开发环境,并且已经添加了必要的依赖。
第一步:添加依赖
首先,在你的pubspec.yaml
文件中添加flutter_meta_appads_sdk
依赖:
dependencies:
flutter:
sdk: flutter
flutter_meta_appads_sdk: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
第二步:配置Google AdMob
确保你已经在Google AdMob控制台中创建了应用并获取了广告单元ID(Ad Unit ID)。
第三步:初始化插件并显示广告
下面是一个完整的示例代码,展示了如何初始化flutter_meta_appads_sdk
并在Flutter应用中显示横幅广告(Banner Ad)和插页式广告(Interstitial Ad)。
main.dart
import 'package:flutter/material.dart';
import 'package:flutter_meta_appads_sdk/flutter_meta_appads_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: AdDemo(),
);
}
}
class AdDemo extends StatefulWidget {
@override
_AdDemoState createState() => _AdDemoState();
}
class _AdDemoState extends State<AdDemo> {
BannerAd? bannerAd;
InterstitialAd? interstitialAd;
@override
void initState() {
super.initState();
// 初始化横幅广告
_createBannerAd();
// 初始化插页式广告
_createInterstitialAd();
}
void _createBannerAd() {
bannerAd = BannerAd.create(
adUnitId: 'ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx', // 替换为你的Ad Unit ID
adSize: AdSize.banner,
request: AdRequest(),
listener: BannerAdListener(
onAdLoaded: () => print('Banner Ad Loaded'),
onAdFailedToLoad: (error) => print('Banner Ad Failed to Load: $error'),
onAdOpened: () => print('Banner Ad Opened'),
onAdClosed: () => print('Banner Ad Closed'),
onAdLeftApplication: () => print('Banner Ad Left Application'),
),
)..load();
}
void _createInterstitialAd() {
interstitialAd = InterstitialAd.create(
adUnitId: 'ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx', // 替换为你的Ad Unit ID
request: AdRequest(),
listener: InterstitialAdListener(
onAdLoaded: () => print('Interstitial Ad Loaded'),
onAdFailedToLoad: (error) => print('Interstitial Ad Failed to Load: $error'),
onAdOpened: () => print('Interstitial Ad Opened'),
onAdClosed: () => {
print('Interstitial Ad Closed');
_createInterstitialAd(); // 重新加载插页式广告以便下次显示
},
onAdLeftApplication: () => print('Interstitial Ad Left Application'),
),
)..load();
}
void _showInterstitialAd() {
if (interstitialAd?.isLoaded ?? false) {
interstitialAd?.show();
} else {
print('Interstitial Ad is not ready yet.');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter AdMob Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
bannerAd?.widget ?? Container(), // 显示横幅广告
SizedBox(height: 20),
ElevatedButton(
onPressed: () => _showInterstitialAd(),
child: Text('Show Interstitial Ad'),
),
],
),
),
);
}
}
注意事项
- 测试广告单元ID:在生产环境中使用真实的Ad Unit ID之前,请确保使用Google AdMob提供的测试广告单元ID进行测试。
- 网络权限:确保你的
AndroidManifest.xml
和Info.plist
文件中已经添加了必要的网络权限,以便插件能够加载和显示广告。 - 广告请求频率:不要过于频繁地请求广告,以避免违反Google AdMob的政策。
这个示例展示了基本的广告集成流程,你可以根据实际需求进行进一步的定制和优化。