Flutter广告盈利插件knt_ad_monetized的使用

Flutter广告盈利插件knt_ad_monetized的使用

knt_ad_monetized

帮助处理常见的广告流。

开始使用

本项目是一个 Dart 包,可以轻松地在多个 Flutter 或 Dart 项目之间共享库模块。以下是开始使用的基本步骤。

初始化

首先,确保在您的 pubspec.yaml 文件中添加 knt_ad_monetized 依赖:

dependencies:
  knt_ad_monetized: ^1.0.0

然后运行 flutter pub get 来安装依赖。

示例代码

以下是一个完整的示例代码,演示如何在 Flutter 应用中使用 knt_ad_monetized 插件来展示不同的广告类型。

main.dart

import 'package:example/ad_manager.dart';
import 'package:example/page/book_page.dart';
import 'package:flutter/material.dart';
import 'package:knt_ad_monetized/knt_ad_monetized.dart';
import 'package:knt_bloc/knt_bloc.dart';

import 'flavors.dart';
import 'page/student_page.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Flavors.init();
  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Knt Ad Monetized Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Knt Ad Monetized Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  AppOpenAdBloc? _appOpenAdBloc;
  InterstitialAdBloc? _interstitialAdBloc;
  BannerAdBloc? _bannerAdBloc;
  NativeAdBloc? _nativeAdBloc;
  bool _blocLoaded = false;

  [@override](/user/override)
  void initState() {
    super.initState();
    Future.delayed(Duration.zero, () {
      _init();
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: couldShowView
            ? MultiBlocProvider(
                providers: [
                  BlocProvider(
                    create: (_) => _appOpenAdBloc!,
                  ),
                  BlocProvider(
                    create: (_) => _interstitialAdBloc!,
                  ),
                  BlocProvider(
                    create: (_) => _bannerAdBloc!,
                  ),
                  BlocProvider(
                    create: (_) => _nativeAdBloc!,
                  ),
                ],
                child: const _ContentPage(),
              )
            : const CircularProgressIndicator(
                color: Colors.orange,
              ),
      ),
    );
  }

  void _init() async {
    _blocLoaded = false;
    _appOpenAdBloc = await appOpenAdBloc;
    _interstitialAdBloc = await interstitialAdBloc;
    _bannerAdBloc = await bannerAdBloc;
    _nativeAdBloc = await nativeAdBloc;

    setState(() {
      _blocLoaded = true;
    });
    _appOpenAdBloc!.add(PrepareAdWithoutViewEvent());
    _interstitialAdBloc!.add(PrepareAdWithoutViewEvent());
  }

  bool get couldShowView =>
      _blocLoaded &&
      _appOpenAdBloc != null &&
      _interstitialAdBloc != null &&
      _bannerAdBloc != null &&
      _nativeAdBloc != null;
}

class _ContentPage extends StatelessWidget {
  const _ContentPage({Key? key}) : super(key: key);

  final _adTag = 'MyHomePage';

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MultiBlocListener(
      listeners: [
        BlocListener<AppOpenAdBloc, BaseState>(
          listener: (context, state) {
            if (state is ClosedAdWithoutViewState) {
              context.showInSnackBar('AppOpenAd closed!');
            }
          },
        ),
        BlocListener<InterstitialAdBloc, BaseState>(
          listener: (context, state) {
            if (state is ClosedAdWithoutViewState) {
              context.showInSnackBar('InterstitialAd closed!');
            }
          },
        ),
      ],
      child: SingleChildScrollView(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                context.loadAppOpenAd(_adTag);
              },
              child: const Text('显示应用打开广告'),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                context.loadInterstitialAd(_adTag);
              },
              child: const Text('显示插屏广告'),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                Navigator.of(context).push(
                  MaterialPageRoute(
                    builder: (context) {
                      return const BookPage();
                    },
                  ),
                );
              },
              child: const Text('显示书籍列表中的原生广告'),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.of(context).push(
                  MaterialPageRoute(
                    builder: (context) {
                      return const StudentPage();
                    },
                  ),
                );
              },
              child: const Text('显示学生列表中的原生广告'),
            ),
            const SizedBox(height: 16),
            const KntBannerAd(
              tag: 'banner_ad_home',
            ),
            const SizedBox(height: 16),
            KntNativeAd(
              tag: 'native_ad_home_small',
              nativeTemplateStyle: NativeTemplateStyle(
                templateType: TemplateType.small,
              ),
            ),
            const SizedBox(height: 16),
            KntNativeAd(
              tag: 'native_ad_home',
              nativeTemplateStyle: NativeTemplateStyle(
                // 必须选择一个模板。
                templateType: TemplateType.medium,
                // 可选:自定义广告样式。
                cornerRadius: 10.0,
                callToActionTextStyle: NativeTemplateTextStyle(
                    textColor: Colors.white,
                    backgroundColor: Colors.green,
                    style: NativeTemplateFontStyle.monospace,
                    size: 16.0),
                primaryTextStyle: NativeTemplateTextStyle(
                    textColor: Colors.red,
                    backgroundColor: Colors.cyan,
                    style: NativeTemplateFontStyle.italic,
                    size: 16.0),
                secondaryTextStyle: NativeTemplateTextStyle(
                    textColor: Colors.green,
                    backgroundColor: Colors.transparent,
                    style: NativeTemplateFontStyle.bold,
                    size: 16.0),
                tertiaryTextStyle: NativeTemplateTextStyle(
                    textColor: Colors.brown,
                    backgroundColor: Colors.amber,
                    style: NativeTemplateFontStyle.normal,
                    size: 16.0),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

extension on BuildContext {
  void showInSnackBar(String message) {
    ScaffoldMessenger.of(this).removeCurrentSnackBar();
    ScaffoldMessenger.of(this).showSnackBar(SnackBar(
      duration: const Duration(milliseconds: 3000),
      content: Text(message),
    ));
  }
}

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

1 回复

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


knt_ad_monetized 是一个用于 Flutter 应用的广告盈利插件,它可以帮助开发者在应用中集成广告并实现盈利。以下是如何使用 knt_ad_monetized 插件的基本步骤:

1. 添加依赖

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

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

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

2. 初始化插件

在你的应用的 main.dart 文件中,初始化 knt_ad_monetized 插件。通常你需要在 main() 函数中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化插件
  await KntAdMonetized.initialize(
    appId: 'your_app_id',  // 替换为你的应用ID
    adUnitId: 'your_ad_unit_id',  // 替换为你的广告单元ID
  );

  runApp(MyApp());
}

3. 显示广告

你可以在应用的任何地方使用 knt_ad_monetized 插件来显示广告。以下是一个简单的例子,展示如何在页面中显示横幅广告:

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

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Ad Monetization'),
      ),
      body: Column(
        children: [
          Expanded(
            child: Center(
              child: Text('Hello, World!'),
            ),
          ),
          // 显示横幅广告
          BannerAdWidget(
            adUnitId: 'your_banner_ad_unit_id',  // 替换为你的横幅广告单元ID
            size: AdSize.banner,
          ),
        ],
      ),
    );
  }
}

4. 处理广告事件

knt_ad_monetized 插件提供了回调函数来处理广告的加载、显示、点击等事件。你可以根据需要处理这些事件:

BannerAdWidget(
  adUnitId: 'your_banner_ad_unit_id',
  size: AdSize.banner,
  onAdLoaded: (ad) {
    print('Ad loaded');
  },
  onAdFailedToLoad: (error) {
    print('Ad failed to load: $error');
  },
  onAdClicked: () {
    print('Ad clicked');
  },
  onAdImpression: () {
    print('Ad impression');
  },
)

5. 其他广告类型

knt_ad_monetized 插件还支持其他类型的广告,如插页式广告、奖励视频广告等。你可以根据应用的需求选择适合的广告类型。

插页式广告

import 'package:knt_ad_monetized/knt_ad_monetized.dart';

InterstitialAdWidget(
  adUnitId: 'your_interstitial_ad_unit_id',
  onAdLoaded: (ad) {
    print('Interstitial ad loaded');
  },
  onAdFailedToLoad: (error) {
    print('Interstitial ad failed to load: $error');
  },
  onAdClicked: () {
    print('Interstitial ad clicked');
  },
  onAdImpression: () {
    print('Interstitial ad impression');
  },
)

奖励视频广告

import 'package:knt_ad_monetized/knt_ad_monetized.dart';

RewardedAdWidget(
  adUnitId: 'your_rewarded_ad_unit_id',
  onAdLoaded: (ad) {
    print('Rewarded ad loaded');
  },
  onAdFailedToLoad: (error) {
    print('Rewarded ad failed to load: $error');
  },
  onAdClicked: () {
    print('Rewarded ad clicked');
  },
  onAdImpression: () {
    print('Rewarded ad impression');
  },
  onUserEarnedReward: (reward) {
    print('User earned reward: ${reward.amount} ${reward.type}');
  },
)
回到顶部