Flutter广告流插件fluent_adflow_widget的使用

Flutter广告流插件fluent_adflow_widget的使用

引言

本指南提供了详细的步骤,帮助Flutter移动应用发布者通过adflow Flutter SDK无缝地将广告流体验集成到他们的移动应用中。

概述

adflow Flutter SDK简化了集成过程,使你的Flutter移动应用能够轻松启用广告流功能。该SDK因其轻量级、安全性及用户友好的设计而受到称赞。

开始使用

如果你还没有与Fluent代表联系以成为我们的合作伙伴之一,请发送邮件至sales@fluentco.com开始合作。完成所有必要的合同协议后,你将会被分配一个唯一的合作伙伴ID。

电子商务集成

作为宝贵的adflow合作伙伴,通过我们的Flutter SDK提升你的应用前端体验。集成电子商务增强功能,并用顶级第三方优惠吸引用户。根据你的应用布局,SDK可以在现有应用体验中的任何位置有机地展示adflow插件。

将Fluent Flutter adflow SDK集成到你的Flutter应用中

添加为依赖项

在你的Flutter项目中安装adflow Flutter SDK,使用以下命令:

flutter pub add fluent_adflow_widget

这将在你的包的pubspec.yaml文件中添加一行(并运行隐式的flutter pub get):

dependencies:
  fluent_adflow_widget: ^[latest_version]

或者,你的编辑器可能支持flutter pub get。查阅你的编辑器文档了解更多详情。

导入它

现在在你的Dart代码中可以使用:

import 'package:fluent_adflow_widget/FluentAdFlowWidget.dart';

配置SDK用于iOS

如果你的项目中没有ios文件夹,请参阅下面的故障排除步骤。

iOS SDK需要版本13或更高版本。请确保你的应用程序Podfile中的iOS版本设置为13.0或更高(通常位于Flutter应用的ios目录下的顶层)。例如,你可能需要更改:

platform :ios, min_ios_version_supported

为:

platform :ios, '13.0'

此外,你需要在Xcode中更新部署目标到13.0: [Xcode]

你还需要更新签名证书。

安装完dart包后,你需要安装iOS依赖:

cd ios && pod install

注意: 对于Mac M1架构问题,请使用:

sudo arch -x86_64 gem install ffi
arch -x86_64 pod install

配置SDK用于Android

Android SDK需要minSdkVersion 24或更高版本。你可能需要在app/build.gradle文件中进行以下更新:

...
android {
    ...
    defaultConfig {
        ...
        multiDexEnabled true,
        minSdkVersion 24
    }
    ...
}
...

初始化SDK

SDK暴露了一个组件,你可以将其添加到你的应用代码中。

要导入该组件,请添加以下语句:

import 'package:flutter/material.dart';
import 'package:fluent_adflow_widget/FluentAdFlowWidget.dart';

SDK暴露了一个方法来初始化SDK(init)。此方法需要你的API密钥和引用。SDK初始化后,你就可以在应用中使用FluentAdFlowWidgetView组件。

你可以使用以下代码初始化SDK:

FluentAdFlowWidget.init("api-key", "referer");

注意: 我们建议在应用启动时初始化SDK(而不是在计划使用SDK的地方调用show()方法)。

然后,你可以构造参数传递给SDK。这些参数如下所示(见此处),但这里是一个如何构造值传递给SDK的例子。这些参数是关于用户的数据,有助于为每个客户提供更独特的广告流体验。

var userDetails = {
    "email": "jsmith@gmail.com",
    "firstname": "John",
    "lastname": "Smith",
    "orderId": "123abc456def",
    "transactionValue": "99.99",
    "zip": "11211",
};

FluentAdFlowWidgetView(params: userDetails)

下面是实现SDK的完整示例,既可以嵌入视图也可以弹出视图:

import 'package:flutter/material.dart';
import 'package:fluent_adflow_widget/FluentAdFlowWidget.dart';

void main() {
  runApp(const MyApp());
}

class PopupModule extends StatefulWidget {
  final Function(bool)? onAdShow;
  Map<String, String>? params;
  PopupModule({this.onAdShow, this.params});
  @override
  State<PopupModule> createState() => PopupModuleState();
}

class PopupModuleState extends State<PopupModule> {
  bool isDialogOpen = false;
  @override
  Widget build(BuildContext context) {
    return Container(
      color: isDialogOpen
          ? const Color.fromARGB(100, 0, 0, 0)
          : const Color(0x01000000),
      constraints: const BoxConstraints.expand(),
      child: Center(
        widthFactor: 0.8,
        child: Padding(
          padding: const EdgeInsets.symmetric(vertical: 0, horizontal: 20),
          child: FluentAdFlowWidgetView(
            onAdShow: (isAdShown) {
              // 显示背景层当广告加载时
              setState(() {
                isDialogOpen = isAdShown;
              });
              // 当广告隐藏时关闭对话框
              if (!isAdShown) {
                if (Navigator.canPop(context)) {
                  Navigator.of(context, rootNavigator: true).pop(context);
                }
              }
              // 调用父组件的onAdShow回调
              if (widget.onAdShow != null) {
                widget.onAdShow!(isAdShown);
              }
            },
            params: widget.params,
          ),
        ),
      ),
    );
  }
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'AdFlow Flutter App',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool isDialogOpen = false;
  bool showEmbededAd1 = false;
  bool showEmbededAd2 = false;
  bool showPopUpAd = false;
  // 用户详细信息
  var userDetails = {
    "email": "jsmith@gmail.com",
    "firstname": "John",
    "lastname": "Smith",
    "orderId": "123abc456def",
    "transactionValue": "99.99",
    "zip": "11211",
  };

  @override
  void initState() {
    super.initState();
    FluentAdFlowWidget.init(
        "e8699957-af84-479d-af1e-dd95e800da77", "sdk_prod_test");
  }

  void onAdShownEmbeded1(bool isShown) {
    print("^^^^^^^^^ onAdShown ^^^^^^^^^" + (isShown ? "true" : "false"));
    setState(() {
      if (!isShown) showEmbededAd1 = false;
    });
  }

  void onAdShownEmbeded2(bool isShown) {
    print("^^^^^^^^^ onAdShown ^^^^^^^^^" + (isShown ? "true" : "false"));
    setState(() {
      if (!isShown) showEmbededAd2 = false;
    });
  }

  void onAdShownPopup(bool isShown) {
    print("^^^^^^^^^ onAdShown ^^^^^^^^^" + (isShown ? "true" : "false"));
    setState(() {
      showPopUpAd = false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Stack(children: [
          ListView(children: [
            showEmbededAd1
                ? FluentAdFlowWidgetView(
                    onAdShow: onAdShownEmbeded1,
                    params: userDetails,
                  )
                : Container(),
            Container(
              height: 50,
              color: Colors.amber[600],
              child: const Center(child: Text('上部视图')),
            ),
            // 嵌入式广告视图

            Container(
              height: 50,
              color: Colors.amber[600],
              child: const Center(child: Text('下部视图')),
            ),
            showEmbededAd2
                ? FluentAdFlowWidgetView(
                    onAdShow: onAdShownEmbeded2,
                    params: userDetails,
                  )
                : Container(),
            ElevatedButton(
              onPressed: () => {
                // 在弹出对话框中打开广告视图
                showDialog(
                    context: context,
                    barrierColor: Color(0x01000000),
                    builder: (context) => PopupModule(
                        onAdShow: onAdShownPopup, params: userDetails)),
              },
              child: const Text('弹出视图'),
            ),

            ElevatedButton(
              onPressed: () => {
                setState(() {
                  showEmbededAd1 = true;
                })
              },
              child: const Text('嵌入式视图 1'),
            ),
            ElevatedButton(
              onPressed: () => {
                setState(() {
                  showEmbededAd2 = true;
                })
              },
              child: const Text('嵌入式视图 2'),
            ),
          ]),
        ]));
  }
}

可选事件处理器

onAdShow - 如果从SDK返回的isAdShown为true,则会向用户展示广告。如果isAdShown为false,则不会向用户展示广告。你的应用可以根据这些值执行任何逻辑。在用户查看完所有广告或没有任何广告可展示时,isAdShown将为false。

const optionalEvent = (isAdShown) => {
    // 你的逻辑在这里
};

FluentAdFlowWidgetView(onAdShow: onAdShown, params: userDetails)

更多关于Flutter广告流插件fluent_adflow_widget的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter广告流插件fluent_adflow_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


fluent_adflow_widget 是一个用于在 Flutter 应用中展示广告流的插件。它通常用于在应用中嵌入广告内容,如横幅广告、插页式广告等。以下是如何使用 fluent_adflow_widget 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 fluent_adflow_widget 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  fluent_adflow_widget: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化广告流

在使用 fluent_adflow_widget 之前,通常需要初始化广告流。你可以在 main.dart 文件中进行初始化。

import 'package:fluent_adflow_widget/fluent_adflow_widget.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化广告流
  await FluentAdFlowWidget.initialize(
    appId: 'YOUR_APP_ID',  // 替换为你的应用ID
  );
  
  runApp(MyApp());
}

3. 使用广告流组件

在你的应用中,你可以使用 FluentAdFlowWidget 组件来展示广告流。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:fluent_adflow_widget/fluent_adflow_widget.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Fluent AdFlow Widget Example'),
        ),
        body: ListView(
          children: [
            Text('Some content'),
            FluentAdFlowWidget(
              adUnitId: 'YOUR_AD_UNIT_ID',  // 替换为你的广告单元ID
              adSize: AdSize.banner,  // 广告尺寸
              onAdLoaded: () {
                print('Ad loaded successfully');
              },
              onAdFailedToLoad: (error) {
                print('Ad failed to load: $error');
              },
            ),
            Text('More content'),
          ],
        ),
      ),
    );
  }
}

4. 处理广告事件

FluentAdFlowWidget 提供了多个回调来处理广告事件,如广告加载成功、加载失败等。你可以根据需要在回调中执行相应的操作。

FluentAdFlowWidget(
  adUnitId: 'YOUR_AD_UNIT_ID',
  adSize: AdSize.banner,
  onAdLoaded: () {
    // 广告加载成功后的操作
  },
  onAdFailedToLoad: (error) {
    // 广告加载失败后的操作
  },
  onAdClicked: () {
    // 用户点击广告后的操作
  },
  onAdImpression: () {
    // 广告展示后的操作
  },
);

5. 处理广告尺寸

FluentAdFlowWidget 支持多种广告尺寸,你可以根据需求选择合适的尺寸。常见的广告尺寸包括:

  • AdSize.banner:标准横幅广告
  • AdSize.largeBanner:大横幅广告
  • AdSize.mediumRectangle:中等矩形广告
  • AdSize.fullBanner:全横幅广告
  • AdSize.leaderboard:宽屏横幅广告

6. 测试广告

在开发和测试阶段,你可以使用测试广告单元ID来确保广告流正常工作。测试广告单元ID通常由广告平台提供。

FluentAdFlowWidget(
  adUnitId: 'ca-app-pub-3940256099942544/6300978111',  // 测试横幅广告单元ID
  adSize: AdSize.banner,
);
回到顶部