Flutter广告集成插件flutter_meta_appads_sdk的使用

Flutter广告集成插件flutter_meta_appads_sdk的使用

flutter_meta_appads_sdk 是一个 Flutter 插件,提供了与 Meta SDK(原 Facebook SDK)交互的简单接口。它允许你初始化 SDK、设置用户数据、记录标准事件、记录购买事件和记录自定义事件。

安装

创建应用

首先,你需要在 Meta 开发者平台创建一个应用:

iOS 安装

  1. 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>
    
  2. Info.plist 文件中设置以下代码以启用或禁用自动 SDK 事件:

    <key>FacebookAutoLogAppEventsEnabled</key>
    <false/>
    
  3. 决定是否禁用广告标识符跟踪,并在 Info.plist 文件中添加以下代码:

    <key>FacebookAdvertiserIDCollectionEnabled</key>
    <false/>
    

Android 安装

  1. 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>
    
  2. android/app/src/main/AndroidManifest.xml 文件中添加 INTERNET 权限:

    ...
    </application>
    
    <uses-permission android:name="android.permission.INTERNET"/>
    ...
    
  3. 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>
    
  4. android/app/src/main/AndroidManifest.xml 文件中设置以下代码以启用或禁用自动 SDK 事件:

    <application>
      ...
      <meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled"
                android:value="false"/>
      ...
    </application>
    
  5. 决定 SDK 是否在应用启动时自动初始化,或者通过 initSdk() 方法初始化,并在 android/app/src/main/AndroidManifest.xml 文件中添加以下代码:

    <application>
      ...
      <meta-data android:name="com.facebook.sdk.AutoInitEnabled"
                android:value="false"/>
      ...
    </application>
    
  6. 决定是否禁用广告标识符跟踪,并在 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

1 回复

更多关于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'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 测试广告单元ID:在生产环境中使用真实的Ad Unit ID之前,请确保使用Google AdMob提供的测试广告单元ID进行测试。
  2. 网络权限:确保你的AndroidManifest.xmlInfo.plist文件中已经添加了必要的网络权限,以便插件能够加载和显示广告。
  3. 广告请求频率:不要过于频繁地请求广告,以避免违反Google AdMob的政策。

这个示例展示了基本的广告集成流程,你可以根据实际需求进行进一步的定制和优化。

回到顶部