Flutter广告集成插件yf_ads的使用

Flutter广告集成插件yf_ads的使用

这是一个用于Flutter应用的广告集成插件项目。通过此插件,你可以在你的Flutter应用中集成各种类型的广告,包括插屏广告、开屏广告、激励视频广告等。

开始使用

获取开始

本项目是一个用于Flutter的插件包,它包含适用于Android和/或iOS平台的特定实现代码。

如果你是Flutter开发新手,可以查看官方文档,该文档提供了教程、示例、移动开发指导以及完整的API引用。

更新Flutter

  1. 在终端中设置代理(例如使用Clash终端代理):
    export https_proxy=http://127.0.0.1:7890
    export http_proxy=http://127.0.0.1:7890
    export all_proxy=socks5://127.0.0.1:7890
    
  2. 发布到Flutter仓库:
    flutter pub publish --server=https://pub.dartlang.org
    

完整示例代码

以下是完整的示例代码,展示了如何在Flutter应用中集成和使用yf_ads插件。

import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:yf_ads/bean/yf_ads_init_sdk_android_bean.dart';
import 'package:yf_ads/bean/yf_ads_init_sdk_ios_bean.dart';
import 'package:yf_ads/bean/yf_ads_interaction_bean.dart';
import 'package:yf_ads/bean/yf_ads_reward_video_bean.dart';
import 'package:yf_ads/bean/yf_ads_splash_bean.dart';
import 'package:yf_ads/callbacks/yf_ads_callback.dart';
import 'package:yf_ads/callbacks/yf_ads_reward_video_callback.dart';
import 'package:yf_ads/managers/yf_interstitial.dart';
import 'package:yf_ads/managers/yf_rewarded.dart';
import 'package:yf_ads/managers/yf_splash.dart';
import 'package:yf_ads/yf_ads.dart';

import 'yf_ads_request_banner_list_view.dart';
import 'yf_ads_request_banner_view.dart';
import 'yf_ads_request_express_feed_list_view.dart';
import 'yf_ads_request_express_feed_view.dart';
import 'yf_ads_request_native_draw_feed_video_view.dart';
import 'yf_ads_request_stream_view.dart';
import 'yf_ads_reward_video_extra_bean.dart';

void main() {
  runApp(const MaterialApp(
    debugShowCheckedModeBanner: false,
    home: MyApp(),
  ));
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
  var reaperFlutterPlugin;
  int _currentIndex = 0;

  [@override](/user/override)
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    reaperFlutterPlugin = YFAds.instance;
    initReaperSdk();
    loadSplashAd(true);
  }

  [@override](/user/override)
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    if (state == AppLifecycleState.resumed) {
      print("切换到了前台");
    } else if (state == AppLifecycleState.paused) {
      print("切换到了后台");
    }
  }

  [@override](/user/override)
  void dispose() {
    print("dispose");
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  Future<void> initReaperSdk() async {
    var reaperInitSdkBaseBean;
    if (Platform.isAndroid) {
      const RELEASE_APP_ID = "24f8e0ba-697e-4ee5-b4fb-30cc1c9f2031";
      const RELEASE_APP_KEY = "24f8e0ba-697e-4ee5-b4fb-30cc1c9f2031";
      reaperInitSdkBaseBean = const YFAdsInitSDKAndroidBean(
          appId: RELEASE_APP_ID,
          appKey: RELEASE_APP_KEY,
          ext1: "ccc",
          ext2: "ddd",
          enableLog: true,
          envTest: true);
    } else if (Platform.isIOS) {
      const RELEASE_APP_ID = "b23c5c5c7ebd4dff9cf51ee9ee15aa77";
      const RELEASE_APP_KEY = "b23c5c5c7ebd4dff9cf51ee9ee15aa77";
      reaperInitSdkBaseBean = const YFAdsInitSDKIOSBean(
          ext1: "c1",
          ext2: "c2",
          ext3: "c3",
          ext4: "c4",
          ext5: "c5",
          ext6: "c6",
          ext7: "c7",
          ext8: "c8",
          enableLog: true,
          enableLocation: false,
          appId: RELEASE_APP_ID, appKey: RELEASE_APP_KEY);
    }
    await reaperFlutterPlugin.initAdsSDK(reaperInitSdkBaseBean);
  }

  Future<void> onlyLoadSplashAd() async {
    loadSplashAd(false);
  }

  Future<void> loadSplashAd(var loadAndShow) async {
    var positionId;
    if (Platform.isAndroid) {
      positionId = "da54a0c6-62b0-4756-a975-a1bd122b4d61";
    } else if (Platform.isIOS) {
      positionId = "5212de4238344338913289d4358f3e45";
    }
    var reaperSplashBean = YFAdsSplashBean(
        tag: "Splash",
        positionId: positionId,
        loadAndShow: loadAndShow,
        callBack: splashAdCallBack);
    await YFSplashManager.loadSplashAd(reaperSplashBean);
  }

  Future<void> showSplashAd() async {
    await YFSplashManager.showSplashAd();
  }

  Future<void> loadInsertAd() async {
    var positionId;
    if (Platform.isAndroid) {
      positionId = "503e92d8-2e2a-472c-b045-0f0f0282830c";
    } else if (Platform.isIOS) {
      positionId = "ae1caa917bbf483aad9127b613668cac";
    }
    var reaperInsertBean = YFAdsInteractionBean(tag: "custom",
        positionId: positionId, loadAndShow: false, callBack: insertAdCallBack);

    await YFInterstitialManager.loadInterstitialAd(reaperInsertBean);
  }

  Future<void> showInsertAd() async {
    await YFInterstitialManager.showInterstitialAd();
  }

  void insertAdCallBack(YFAdsCallBack data) {
    print("insertAdCallBack:${data.method} ${data.tag}");
    if (defaultTargetPlatform == TargetPlatform.android &&
        data.method == YFAdsCallBack.YF_ADS_ANDROID_SUCCESS) {
      Fluttertoast.showToast(msg: "加载成功", toastLength: Toast.LENGTH_SHORT);
    }
  }

  void splashAdCallBack(YFAdsCallBack data) {
    print("splashAdCallBack:${data.method} ${data.tag}");
    if (defaultTargetPlatform == TargetPlatform.android &&
        data.method == YFAdsCallBack.YF_ADS_ANDROID_SUCCESS) {
      Fluttertoast.showToast(msg: "加载成功", toastLength: Toast.LENGTH_SHORT);
    }
  }

  Future<void> loadRewardVideoAd() async {
    var reaperRewardVideoBean;
    var positionId;
    if (Platform.isAndroid) {
      positionId = "e46b3594-f3db-4f8d-b602-ec429bb37fd2";
    } else if (Platform.isIOS) {
      positionId = "c1d463494c01418e8a31e36398f37a82";
    }

    ///object will send to your server to verify reward
    ///adCode means position id which will be replaced with real position id in reaper sdk,and should be fixed with %%POS_ID%%
    ///adSrc means ad source which will be replaced with real ad source in reaper sdk,and should be fixed with %%AD_SRC%%
    ///other parameters can be defined dynamic by yourself.
    var reaperRewardVideoExtraBean = const YFAdsRewardVideoExtraBean(
        uid: "1156642",
        rewardVideoType: 2,
        taskId: "70",
        taskAction: "rewardVideo4energy",
        version: "3.42.0_debug",
        adCode: "%%POS_ID%%",
        adSrc: "%%AD_SRC%%",
        orientation: 1);
    var extra = jsonEncode(reaperRewardVideoExtraBean);
    reaperRewardVideoBean = YFAdsRewardVideoBean(
        positionId: positionId,
        loadAndShow: false,
        extra: extra,
        callBack: rewardVideoAdCallBack);
    await YFRewardManager.loadRewardAd(reaperRewardVideoBean);
  }

  Future<void> showRewardVideoAd() async {
    await YFRewardManager.showRewardAd();
  }

  void rewardVideoAdCallBack(YFAdsRewardVideoCallBack data) {
    print("rewardVideoAdCallBack: ${data.method!}");

    if (data.method == YFAdsRewardVideoCallBack.YF_ADS_ON_REWARD_VERIFY) {
      print("rewardVideoAdCallBack "
          "rewardName is ${data.rewardName},"
          "rewardVerify is ${data.rewardVerify}");
    }
    if (defaultTargetPlatform == TargetPlatform.android &&
        data.method == YFAdsCallBack.YF_ADS_ANDROID_SUCCESS) {
      Fluttertoast.showToast(msg: "加载成功", toastLength: Toast.LENGTH_SHORT);
    }
  }

  void showBannerView(BuildContext context) {
    print("banner view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => YFAdsBannerViewDemo()),
    );
  }

  void showBannerListView(BuildContext context) {
    print("banner list view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => YFAdsBannerListViewDemo()),
    );
  }

  void showExpressFeedView(BuildContext context) {
    print("express feed view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => YFAdsExpressFeedViewDemo()),
    );
  }

  void showExpressFeedListView(BuildContext context) {
    print("express feed list view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => ExpressFeedListViewDemo()),
    );
  }

  void showNativeDrawFeedVideoView(BuildContext context) {
    print("native draw feed video view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(
          builder: (context) => YFAdsNativeDrawFeedVideoViewDemo()),
    );
  }

  void showStreamView(BuildContext context) {
    print("stream view button clicked");
    Navigator.of(context).push(
      MaterialPageRoute(builder: (context) => YFAdsStreamViewDemo()),
    );
  }

  Future<void> getPermission(BuildContext context) async {
    var status = await Permission.notification.status;
    print(status);
    if (status == PermissionStatus.denied) {
      await Permission.notification.request().then((PermissionStatus permissionStatus) {
        // 处理用户的选择
        if (permissionStatus.isDenied) {
          openAppSettings();
        }
      });
    } else if (status == PermissionStatus.permanentlyDenied) {
      openAppSettings();
    } else if (status == PermissionStatus.granted) {
      Fluttertoast.showToast(msg: "权限获取成功", toastLength: Toast.LENGTH_SHORT);
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    Widget getAdSource() {
      return Center(
          child: SingleChildScrollView(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: loadInsertAd,
              child: const Text("加载插屏广告"),
            ),
            ElevatedButton(
              onPressed: showInsertAd,
              child: const Text("展示插屏广告"),
            ),
            ElevatedButton(
              onPressed: onlyLoadSplashAd,
              child: const Text("加载开屏广告"),
            ),
            ElevatedButton(
              onPressed: showSplashAd,
              child: const Text("展示开屏广告"),
            ),
            ElevatedButton(
              onPressed: loadRewardVideoAd,
              child: const Text("加载激励视频广告"),
            ),
            ElevatedButton(
              onPressed: showRewardVideoAd,
              child: const Text("展示激励视频广告"),
            ),
            ElevatedButton(
              onPressed: () {
                showBannerView(context);
              },
              child: const Text("展示Banner广告"),
            ),
            Column(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  ElevatedButton(
                    onPressed: () {
                      showBannerListView(context);
                    },
                    child: const Text("展示Banner列表广告"),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      showExpressFeedView(context);
                    },
                    child: const Text("展示信息流广告"),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      showExpressFeedListView(context);
                    },
                    child: const Text("展示信息流列表广告"),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      showNativeDrawFeedVideoView(context);
                    },
                    child: const Text("展示Draw视频广告"),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      showStreamView(context);
                    },
                    child: const Text("贴片广告"),
                  ),
                  ElevatedButton(
                      onPressed: () {
                        getPermission(context);
                      },
                      child: const Text("获取通知栏权限"),
                  )
                ]),
          ],
        ),
      ));
    }

    return MaterialApp(
        home: Scaffold(
      body: Center(
        child: getAdSource(),
      ),
          bottomNavigationBar: BottomNavigationBar(
              fixedColor: Colors.red,//选中的颜色
              iconSize: 35,//设置item的大小
              type: BottomNavigationBarType.fixed,//如果底部有4个或者4个以上,就必须设置该属性
              currentIndex: _currentIndex,//当前选中的是第几个菜单
              onTap: (v) {
                setState(() {
                  _currentIndex = v;
                });
              },
              items: const [
                BottomNavigationBarItem(icon: Icon(Icons.home), label: "首页"),
                BottomNavigationBarItem(icon: Icon(Icons.category), label: "分类"),
                BottomNavigationBarItem(icon: Icon(Icons.settings), label: "设置"),
              ]),
    ));
  }
}

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

1 回复

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


yf_ads 是一个用于 Flutter 应用中集成广告的插件,支持多种广告类型,如开屏广告、横幅广告、插屏广告、激励视频广告等。以下是如何使用 yf_ads 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 yf_ads 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  yf_ads: ^1.0.0  # 请根据实际情况使用最新版本

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

2. 初始化广告 SDK

在应用的启动阶段,通常是在 main.dart 文件中,初始化广告 SDK。你需要提供广告平台的 App ID 或其他必要配置。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化广告 SDK
  await YFAds.init(
    appId: 'your_app_id',  // 替换为你的广告平台 App ID
    debug: true,  // 是否开启调试模式
  );
  
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

3. 加载并显示广告

根据你需要展示的广告类型,使用相应的 API 来加载和显示广告。

开屏广告

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

class SplashAdPage extends StatefulWidget {
  [@override](/user/override)
  _SplashAdPageState createState() => _SplashAdPageState();
}

class _SplashAdPageState extends State<SplashAdPage> {
  [@override](/user/override)
  void initState() {
    super.initState();
    loadSplashAd();
  }

  void loadSplashAd() {
    YFAds.showSplashAd(
      adUnitId: 'your_splash_ad_unit_id',  // 替换为你的开屏广告单元 ID
      listener: YFSplashAdListener(
        onAdLoaded: () {
          print('开屏广告加载成功');
        },
        onAdClosed: () {
          print('开屏广告关闭');
          // 广告关闭后跳转到主页面
          Navigator.of(context).pushReplacement(MaterialPageRoute(
            builder: (context) => MyHomePage(),
          ));
        },
        onAdError: (error) {
          print('开屏广告加载失败: $error');
        },
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('正在加载开屏广告...'),
      ),
    );
  }
}

横幅广告

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

class BannerAdPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('横幅广告示例'),
      ),
      body: Column(
        children: [
          Expanded(
            child: Center(
              child: Text('这里是应用内容'),
            ),
          ),
          YFBannerAd(
            adUnitId: 'your_banner_ad_unit_id',  // 替换为你的横幅广告单元 ID
            size: YFBannerAdSize.BANNER,
            listener: YFBannerAdListener(
              onAdLoaded: () {
                print('横幅广告加载成功');
              },
              onAdFailedToLoad: (error) {
                print('横幅广告加载失败: $error');
              },
            ),
          ),
        ],
      ),
    );
  }
}

插屏广告

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

class InterstitialAdPage extends StatelessWidget {
  void loadInterstitialAd() {
    YFAds.loadInterstitialAd(
      adUnitId: 'your_interstitial_ad_unit_id',  // 替换为你的插屏广告单元 ID
      listener: YFInterstitialAdListener(
        onAdLoaded: () {
          print('插屏广告加载成功');
          YFAds.showInterstitialAd();
        },
        onAdFailedToLoad: (error) {
          print('插屏广告加载失败: $error');
        },
        onAdClosed: () {
          print('插屏广告关闭');
        },
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('插屏广告示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: loadInterstitialAd,
          child: Text('加载并显示插屏广告'),
        ),
      ),
    );
  }
}

激励视频广告

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

class RewardedAdPage extends StatelessWidget {
  void loadRewardedAd() {
    YFAds.loadRewardedAd(
      adUnitId: 'your_rewarded_ad_unit_id',  // 替换为你的激励视频广告单元 ID
      listener: YFRewardedAdListener(
        onAdLoaded: () {
          print('激励视频广告加载成功');
          YFAds.showRewardedAd();
        },
        onAdFailedToLoad: (error) {
          print('激励视频广告加载失败: $error');
        },
        onAdClosed: () {
          print('激励视频广告关闭');
        },
        onReward: (reward) {
          print('用户获得奖励: $reward');
        },
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('激励视频广告示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: loadRewardedAd,
          child: Text('加载并显示激励视频广告'),
        ),
      ),
    );
  }
}

4. 处理生命周期

State 类中,确保在适当的时机释放广告资源,以避免内存泄漏。

[@override](/user/override)
void dispose() {
  YFAds.dispose();  // 释放广告资源
  super.dispose();
}
回到顶部