Flutter广告集成插件yy_ads的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter广告集成插件yy_ads的使用

概述

yy_ads 是一个用于在 Flutter 应用中集成 Android 原生游易广告 SDK 的插件。通过该插件,您可以快速实现各种类型的广告展示,包括开屏广告、Banner 广告、插屏广告、全屏视频广告、激励视频广告、信息流广告等。


使用步骤

1. 获取应用和广告位

在使用 yy_ads 插件之前,您需要先申请应用以及广告位。请访问 游易官网 了解详细流程。


2. 添加依赖

在您的 pubspec.yaml 文件中添加 yy_ads 依赖:

dependencies:
  yy_ads: ^版本号

然后运行以下命令以安装依赖:

flutter pub get

3. 初始化插件

确保在 main.dart 中正确初始化插件,并配置必要的参数。


4. 完整示例代码

以下是一个完整的示例代码,展示了如何使用 yy_ads 插件集成不同类型的广告。

示例代码:lib/main.dart

import 'dart:collection';
import 'dart:math';

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

import 'package:flutter/services.dart';
import 'package:yy_ads/yy_ads.dart';

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() {
    return _MyAppState();
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Ad Test',
      home: new HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    var width = MediaQuery.of(context).size.width;
    var height = MediaQuery.of(context).size.height;

    final ButtonStyle style =
        ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20));

    return new Scaffold(
      appBar: new AppBar(
        title: new Text('Ad Test'),
      ),
      body: new Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => SplashPage()),
                );
              },
              child: const Text("加载开屏广告"),
              style: style,
            ),
            ElevatedButton(
              onPressed: () {
                LoadAd().loadBanner(width);
              },
              child: const Text("加载Banner广告"),
              style: style,
            ),
            ElevatedButton(
              onPressed: () {
                LoadAd().loadInterstitial();
              },
              child: const Text("加载插屏广告"),
              style: style,
            ),
            ElevatedButton(
              onPressed: () {
                LoadAd().loadFullscreenVideo();
              },
              child: const Text("加载全屏视频广告"),
              style: style,
            ),
            ElevatedButton(
              onPressed: () {
                LoadAd().loadReward();
              },
              child: const Text("加载激励视频广告"),
              style: style,
            ),
            ElevatedButton(
              onPressed: () {
                LoadAd().loadStream(width);
              },
              child: const Text("加载信息流广告"),
              style: style,
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => DrawStreamPage()),
                );
              },
              child: const Text("加载Draw信息流广告"),
              style: style,
            ),
            Container(
              width: width,
              height: 150,
              color: Colors.blue,
              child: AndroidView(
                viewType: YyAds.BANNER_VIEW,
              ),
            ),
            Container(
              width: width,
              height: 150,
              color: Colors.blue,
              child: AndroidView(
                viewType: YyAds.NATIVE_STREAM_VIEW,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

// 加载开屏广告
class SplashPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    var width = MediaQuery.of(context).size.width;
    var height = MediaQuery.of(context).size.height;
    LoadAd().loadSplash(context);

    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              width: width,
              height: height,
              color: Colors.blue,
              child: AndroidView(
                viewType: YyAds.SPLASH_VIEW,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

// 加载信息流广告
class DrawStreamPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    var width = MediaQuery.of(context).size.width;
    var height = MediaQuery.of(context).size.height;
    LoadAd().loadDraw();

    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              width: width,
              height: height,
              color: Colors.blue,
              child: AndroidView(
                viewType: YyAds.DRAW_STREAM_VIEW,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

// 广告加载类
class LoadAd {
  late BuildContext _mContext;

  // 加载开屏广告
  void loadSplash(BuildContext context) async {
    Stream stream;
    try {
      stream = await YyAds.loadSplash(<String, dynamic>{
        AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
        AdConfig.setTimeout: 3500, // 设置超时时间
        AdConfig.setSplashClickType: AdConfig.LIMIT_CLICK_AREA, // 点击区域限制
        AdConfig.setInteractionType: AdConfig.SPLASH_SLIP, // 滑动交互类型
      });
      stream.listen(_onSplashData, onError: _onSplashError, onDone: _onDone);
      _mContext = context;
    } on PlatformException catch (s) {
      print(s);
    }
  }

  // 加载Banner广告
  void loadBanner(double width) async {
    Stream stream;
    try {
      stream = await YyAds.loadBanner(<String, dynamic>{
        AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
        AdConfig.isCarousel: false, // 是否轮播
        AdConfig.setWidth: width.toInt(), // Banner宽度
        AdConfig.setHeight: width * 58 ~/ 375, // Banner高度
      });
      stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
    } on PlatformException catch (s) {
      print(s);
    }
  }

  // 加载插屏广告
  void loadInterstitial() async {
    Stream stream;
    try {
      stream = await YyAds.loadInterstitial(<String, dynamic>{
        AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
        AdConfig.setOrientation: AdConfig.VERTICAl, // 广告方向
      });
      stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
    } on PlatformException catch (s) {
      print(s);
    }
  }

  // 加载全屏视频广告
  void loadFullscreenVideo() async {
    Stream stream;
    try {
      stream = await YyAds.loadFullscreen(<String, dynamic>{
        AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
        AdConfig.setOrientation: AdConfig.VERTICAl, // 广告方向
      });
      stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
    } on PlatformException catch (s) {
      print(s);
    }
  }

  // 加载激励视频广告
  void loadReward() async {
    Stream stream;
    try {
      stream = await YyAds.loadReward(<String, dynamic>{
        AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
        AdConfig.setUserId: "321345", // 用户ID
        AdConfig.setCustomData: "xxxxx", // 自定义数据
        AdConfig.setOrientation: AdConfig.VERTICAl, // 广告方向
        AdConfig.setScenes: RitScenes.CUSTOMIZE_SCENES.value, // 场景类型
        AdConfig.setScenesMsg: "customize_scenes", // 场景描述
      });
      stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
    } on PlatformException catch (s) {
      print(s);
    }
  }

  // 加载信息流广告
  void loadStream(double width) async {
    Stream stream;
    try {
      stream = await YyAds.loadNativeStream(<String, dynamic>{
        AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
        AdConfig.setWidth: width.toInt(), // 广告宽度
        AdConfig.setHeight: 0, // 广告高度(0表示自动计算)
      });
      stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
    } on PlatformException catch (s) {
      print(s);
    }
  }

  // 加载Draw信息流广告
  void loadDraw() async {
    Stream stream;
    try {
      stream = await YyAds.loadDrawStream(<String, dynamic>{
        AdConfig.setPlacementId: "your placement id", // 替换为您的广告位ID
        AdConfig.setWidth: 500, // 广告宽度
        AdConfig.setHeight: 0, // 广告高度(0表示自动计算)
      });
      stream.listen(_onData, onError: _onErrorData, onDone: _onDone);
    } on PlatformException catch (s) {
      print(s);
    }
  }

  // 开屏广告数据回调
  void _onSplashData(message) {
    print('正常接收,$message');
    var event = message.toString();
    if (event == "onAdCanceled" || event == "onError" || event == "onTimeOut") {
      Navigator.pop(_mContext);
    }
  }

  // 开屏广告错误回调
  void _onSplashError(error) {
    print('错误接收:$error');
    Navigator.pop(_mContext);
  }

  // 广告数据正常回调
  static void _onData(message) {
    var verify = "";
    if (message is HashMap<dynamic, dynamic>) {
      verify = message["verify"];
      print(verify);
    }
    print('正常接收:$message');
  }

  // 广告数据错误回调
  static void _onErrorData(error) {
    print('错误接收:$error');
  }

  // 数据传输完成回调
  static void _onDone() {
    print("消息传递完毕");
  }
}

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

1 回复

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


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

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  yy_ads: ^latest_version

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

2. 初始化广告 SDK

在使用广告之前,需要初始化广告 SDK。通常,初始化代码可以放在 main.dart 文件的 main 函数中:

import 'package:yy_ads/yy_ads.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化广告 SDK
  await YYAds.initialize(
    appId: 'your_app_id',
    isDebug: true, // 调试模式,发布时设置为 false
  );

  runApp(MyApp());
}

3. 加载和显示横幅广告

横幅广告通常显示在屏幕的顶部或底部。以下是一个简单的例子:

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

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

class _BannerAdExampleState extends State<BannerAdExample> {
  YYBannerAd? _bannerAd;

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadBannerAd();
  }

  void _loadBannerAd() {
    _bannerAd = YYBannerAd(
      adUnitId: 'your_banner_ad_unit_id',
      size: YYAdSize.banner,
      listener: YYAdListener(
        onAdLoaded: (ad) {
          print('Banner Ad loaded.');
        },
        onAdFailedToLoad: (ad, error) {
          print('Banner Ad failed to load: $error');
        },
      ),
    )..load();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Banner Ad Example'),
      ),
      body: Center(
        child: _bannerAd != null
            ? AdWidget(ad: _bannerAd!)
            : Text('Loading Banner Ad...'),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _bannerAd?.dispose();
    super.dispose();
  }
}

4. 加载和显示插页式广告

插页式广告通常在应用的自然过渡点显示,例如在页面之间切换时:

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

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

class _InterstitialAdExampleState extends State<InterstitialAdExample> {
  YYInterstitialAd? _interstitialAd;

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadInterstitialAd();
  }

  void _loadInterstitialAd() {
    YYInterstitialAd.load(
      adUnitId: 'your_interstitial_ad_unit_id',
      request: YYAdRequest(),
      adLoadCallback: YYInterstitialAdLoadCallback(
        onAdLoaded: (ad) {
          _interstitialAd = ad;
          print('Interstitial Ad loaded.');
        },
        onAdFailedToLoad: (error) {
          print('Interstitial Ad failed to load: $error');
        },
      ),
    );
  }

  void _showInterstitialAd() {
    if (_interstitialAd != null) {
      _interstitialAd!.show();
    } else {
      print('Interstitial Ad is not ready yet.');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Interstitial Ad Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _showInterstitialAd,
          child: Text('Show Interstitial Ad'),
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _interstitialAd?.dispose();
    super.dispose();
  }
}

5. 加载和显示激励视频广告

激励视频广告通常用于奖励用户,例如在游戏中提供额外的生命或金币:

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

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

class _RewardedAdExampleState extends State<RewardedAdExample> {
  YYRewardedAd? _rewardedAd;

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadRewardedAd();
  }

  void _loadRewardedAd() {
    YYRewardedAd.load(
      adUnitId: 'your_rewarded_ad_unit_id',
      request: YYAdRequest(),
      adLoadCallback: YYRewardedAdLoadCallback(
        onAdLoaded: (ad) {
          _rewardedAd = ad;
          print('Rewarded Ad loaded.');
        },
        onAdFailedToLoad: (error) {
          print('Rewarded Ad failed to load: $error');
        },
      ),
    );
  }

  void _showRewardedAd() {
    if (_rewardedAd != null) {
      _rewardedAd!.show(
        onUserEarnedReward: (ad, reward) {
          print('User earned reward: ${reward.amount} ${reward.type}');
        },
      );
    } else {
      print('Rewarded Ad is not ready yet.');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Rewarded Ad Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _showRewardedAd,
          child: Text('Show Rewarded Ad'),
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _rewardedAd?.dispose();
    super.dispose();
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!