Flutter移动广告集成插件vpon_mobile_ads的使用

Flutter移动广告集成插件vpon_mobile_ads的使用

vpon_mobile_ads

一个用于轻松集成Vpon SDK的Flutter插件。

开始使用

对于详细的设置和配置说明,请参阅Vpon SDK Wiki

如果您需要了解如何开始Flutter开发,可以查看Flutter官方文档,其中包含教程、示例、移动开发指南和完整的API参考。

许可证

该项目根据Apache许可证2.0版本进行授权。更多信息请参见LICENSE文件。

完整示例代码

以下是一个完整的示例代码,演示了如何在Flutter应用中集成Vpon广告。

import 'package:flutter/material.dart';
import 'package:vpon_mobile_ads/vpon_ad_sdk.dart';
import 'package:vpon_mobile_ads_example/banner_example.dart';
import 'package:vpon_mobile_ads_example/interstitial_example.dart';
import 'package:vpon_mobile_ads_example/native_example.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  VponAdSDK.instance.initialize();
  runApp(const MaterialApp(
    title: 'Vpon 插件 Demo',
    home: MyApp(),
  ));
}

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

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

class _MyAppState extends State<MyApp> {

  static const interstitial = '插屏广告';
  static const banner = '横幅广告';
  static const native = '原生广告';

  final List<String> menuItems = [interstitial, banner, native];

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

    // 设置日志级别为调试模式
    VponAdSDK.instance.setLogLevel(VponLogLevel.debug);
    
    // 获取Vpon ID
    VponAdSDK.instance.getVponID().then((id) {
      debugPrint('Vpon ID = $id');
    });
    
    // 获取SDK版本号
    VponAdSDK.instance.getVersionString().then((version) {
      debugPrint('版本 = $version');
    });

    // 禁用位置管理
    VponAdLocationManager.instance.setIsEnable(false);

    // 设置音频管理
    VponAdAudioManager.instance.setIsAudioApplicationManaged(true);
    VponAdAudioManager.instance.noticeApplicationAudioDidEnd();

    // 设置用户同意状态
    VponUCB.instance.setConsentStatus(VponConsentStatus.personalized);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Builder(builder: (BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: const Text('Vpon 插件示例'),
          ),
          body: Container(
            decoration: const BoxDecoration(
              gradient: LinearGradient(
                colors: [
                  Colors.orange,
                  Colors.deepOrange,
                ],
                begin: Alignment.topLeft,
                end: Alignment.bottomRight,
              ),
            ),
            child: ListView.builder(
              padding: const EdgeInsets.all(10),
              itemCount: menuItems.length,
              itemBuilder: (BuildContext context, int index) {
                return Padding(
                  padding: const EdgeInsets.only(bottom: 8),
                  child: Card(
                    child: ListTile(
                      title: Text(menuItems[index]),
                      trailing: const Icon(Icons.keyboard_arrow_right),
                      onTap: () {
                        _handleMenuItemSelected(menuItems[index]);
                      },
                    ),
                  ),
                );
              },
            ),
          ),
        );
      }),
    );
  }

  void _handleMenuItemSelected(String selectedItem) {
    switch (selectedItem) {
      case interstitial:
        // 导航到插屏广告示例页面
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const InterstitialExample()),
        );
        break;

      case banner:
        // 导航到横幅广告示例页面
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const BannerExample()),
        );
        break;

      case native:
        // 导航到原生广告示例页面
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const NativeExample()),
        );
        break;

      default:
        throw AssertionError('意外按钮: $selectedItem');
    }
  }
}

Banner广告示例代码

import 'package:flutter/material.dart';
import 'package:vpon_mobile_ads/vpon_ad_sdk.dart';

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

class _BannerExampleState extends State<BannerExample> {
  late BannerAd bannerAd;

  [@override](/user/override)
  void initState() {
    super.initState();
    bannerAd = BannerAd(
      adUnitId: 'your_banner_ad_unit_id',
      listener: BannerAdListener(
        onAdLoaded: (ad) {
          setState(() {});
        },
        onAdFailedToLoad: (ad, error) {
          ad.dispose();
        },
      ),
    );
    bannerAd.load();
  }

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('横幅广告示例'),
      ),
      body: Center(
        child: bannerAd.size != null
            ? AdWidget(ad: bannerAd)
            : CircularProgressIndicator(),
      ),
    );
  }
}

插屏广告示例代码

import 'package:flutter/material.dart';
import 'package:vpon_mobile_ads/vpon_ad_sdk.dart';

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

class _InterstitialExampleState extends State<InterstitialExample> {
  late InterstitialAd interstitialAd;

  [@override](/user/override)
  void initState() {
    super.initState();
    interstitialAd = InterstitialAd(
      adUnitId: 'your_interstitial_ad_unit_id',
      listener: InterstitialAdListener(
        onAdLoaded: (ad) {
          setState(() {});
        },
        onAdFailedToLoad: (ad, error) {
          ad.dispose();
        },
        onAdClosed: (ad) {
          ad.dispose();
        },
      ),
    );
    interstitialAd.load();
  }

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('插屏广告示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            if (interstitialAd.isLoaded) {
              interstitialAd.show();
            } else {
              print('InterstitialAd is not loaded yet.');
            }
          },
          child: Text('显示插屏广告'),
        ),
      ),
    );
  }
}

原生广告示例代码

import 'package:flutter/material.dart';
import 'package:vpon_mobile_ads/vpon_ad_sdk.dart';

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

class _NativeExampleState extends State<NativeExample> {
  late NativeAd nativeAd;

  [@override](/user/override)
  void initState() {
    super.initState();
    nativeAd = NativeAd(
      adUnitId: 'your_native_ad_unit_id',
      listener: NativeAdListener(
        onAdLoaded: (ad) {
          setState(() {});
        },
        onAdFailedToLoad: (ad, error) {
          ad.dispose();
        },
      ),
    );
    nativeAd.load();
  }

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('原生广告示例'),
      ),
      body: Center(
        child: nativeAd.adBuilder != null
            ? nativeAd.adBuilder(context)
            : CircularProgressIndicator(),
      ),
    );
  }
}

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

1 回复

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


vpon_mobile_ads 是一个用于在 Flutter 应用中集成 Vpon 广告的插件。Vpon 是一个广告平台,提供横幅广告、插页式广告、原生广告和视频广告等多种广告形式。以下是如何在 Flutter 项目中使用 vpon_mobile_ads 插件的详细步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  vpon_mobile_ads: ^latest_version

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

2. 初始化 Vpon SDK

在使用 Vpon 广告之前,需要先初始化 SDK。通常可以在 main.dart 文件中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Vpon SDK
  await VponMobileAds.instance.initialize(
    appId: 'your_app_id', // 替换为你的 Vpon App ID
    isTesting: true, // 设置为 true 以启用测试模式
  );
  
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Vpon Ads Example',
      home: HomeScreen(),
    );
  }
}

3. 展示横幅广告

要在应用中展示横幅广告,可以使用 VponBannerAd 组件:

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

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Vpon Banner Ad Example'),
      ),
      body: Column(
        children: [
          Expanded(
            child: Center(
              child: Text('Your Content Here'),
            ),
          ),
          Container(
            height: 50, // 设置广告的高度
            child: VponBannerAd(
              adUnitId: 'your_banner_ad_unit_id', // 替换为你的横幅广告单元 ID
              size: VponBannerSize.BANNER, // 设置广告尺寸
              listener: VponAdListener(
                onAdLoaded: (ad) {
                  print('Banner Ad Loaded');
                },
                onAdFailedToLoad: (ad, error) {
                  print('Banner Ad Failed to Load: $error');
                },
              ),
            ),
          ),
        ],
      ),
    );
  }
}

4. 展示插页式广告

要展示插页式广告,可以使用 VponInterstitialAd

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

class InterstitialAdExample extends StatelessWidget {
  void showInterstitialAd() async {
    VponInterstitialAd interstitialAd = VponInterstitialAd(
      adUnitId: 'your_interstitial_ad_unit_id', // 替换为你的插页式广告单元 ID
      listener: VponAdListener(
        onAdLoaded: (ad) {
          print('Interstitial Ad Loaded');
          interstitialAd.show();
        },
        onAdFailedToLoad: (ad, error) {
          print('Interstitial Ad Failed to Load: $error');
        },
        onAdClosed: (ad) {
          print('Interstitial Ad Closed');
        },
      ),
    );

    await interstitialAd.load();
  }

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

5. 展示原生广告

要展示原生广告,可以使用 VponNativeAd

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

class NativeAdExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Vpon Native Ad Example'),
      ),
      body: ListView(
        children: [
          VponNativeAd(
            adUnitId: 'your_native_ad_unit_id', // 替换为你的原生广告单元 ID
            layout: VponNativeAdLayout.medium, // 设置广告布局
            listener: VponAdListener(
              onAdLoaded: (ad) {
                print('Native Ad Loaded');
              },
              onAdFailedToLoad: (ad, error) {
                print('Native Ad Failed to Load: $error');
              },
            ),
          ),
          // 其他内容
        ],
      ),
    );
  }
}

6. 处理广告生命周期

确保在页面销毁时释放广告资源,以避免内存泄漏:

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