Flutter原生移动广告集成插件google_native_mobile_ads的使用

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

Flutter原生移动广告集成插件google_native_mobile_ads的使用

此插件支持在Android上全屏和内联原生广告。(目前还没有访问Xcode的权限)。 请查看示例了解如何使用。

如果您喜欢我的工作?支持我

设置

在设置Google移动广告时,只需更改在此包中定义的adfactory实现。 您的MainActivity.java应如下所示:

package com.example.google_native_mobile_ads_example;
import com.example.google_native_mobile_ads.NativeAdFactoryImplementation;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin;

public class MainActivity extends FlutterActivity {
    @Override
    public void configureFlutterEngine(FlutterEngine flutterEngine) {
        super.configureFlutterEngine(flutterEngine);
        final GoogleMobileAdsPlugin.NativeAdFactory factory = new NativeAdFactoryImplementation(getLayoutInflater()); // 引用此包创建的工厂
        GoogleMobileAdsPlugin.registerNativeAdFactory(flutterEngine, "google_native_mobile_ads_AdFactory", factory);
    }

    @Override
    public void cleanUpFlutterEngine(FlutterEngine flutterEngine) {
        GoogleMobileAdsPlugin.unregisterNativeAdFactory(flutterEngine, "google_native_mobile_ads_AdFactory");
    }
}

在AndroidManifest.xml中添加应用程序ID:

<application>
...
<meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="YOUR-APPLICATION-ID"/>
            ...
    </application>

如何在Flutter侧使用

完整的示例请参阅example/main.dart

nativeAd = NativeAd(
  adUnitId: widget.adUnitId,

  /// 这将展示全屏广告
  customOptions: NativeAdCustomOptions.defaultConfig().toMap, // 这将展示全屏广告
  nativeAdOptions: NativeAdOptions(
    adChoicesPlacement: AdChoicesPlacement.topLeftCorner,
    mediaAspectRatio: MediaAspectRatio.any,
    videoOptions: VideoOptions(
      clickToExpandRequested: true,
      customControlsRequested: true,
      startMuted: true,
    ),
    //shouldRequestMultipleImages: true,
  ),
  request: const AdRequest(),

  /// 这无需更改
  factoryId: NativeAdConfig.adFactoryId, // 这也是必需的
  ...

截图

全屏原生广告1 全屏原生广告2 内联原生广告1 内联原生广告2

完整示例代码

以下是示例代码,您可以参考这些代码来集成和使用google_native_mobile_ads插件。

import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'full_screen_ad.dart';
import 'inline_ad.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await MobileAds.instance.initialize();
  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.indigo,
      ),
      home: const MainScreen(),
    );
  }
}

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

  [@override](/user/override)
  State<MainScreen> createState() => _MainScreenState();
}

class _MainScreenState extends State<MainScreen> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('主屏幕'),
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            ElevatedButton(
              child: const Text('显示内联原生广告'),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => const MediumSizeNativeAdScreen(),
                  ),
                );
              },
            ),
            ElevatedButton(
              child: const Text('显示全屏原生广告'),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => const FullScreenNativeAdScreen(),
                  ),
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter应用中集成并使用google_native_mobile_ads插件来显示原生移动广告的示例代码。这个示例将展示如何初始化广告、加载广告以及展示广告。

首先,确保你已经在pubspec.yaml文件中添加了google_mobile_ads依赖(注意:google_native_mobile_ads可能是旧名称,当前推荐使用google_mobile_ads):

dependencies:
  flutter:
    sdk: flutter
  google_mobile_ads: ^latest_version  # 请替换为最新版本号

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

接下来,按照以下步骤在你的Flutter应用中集成广告:

1. 初始化Mobile Ads SDK

在你的应用入口文件(通常是main.dart)中初始化Mobile Ads SDK:

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  MobileAds.instance.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

2. 配置Ad Request和Ad Unit ID

在你的广告展示页面,配置Ad Request和Ad Unit ID(你需要从Google AdMob获取Ad Unit ID):

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

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

class _MyHomePageState extends State<MyHomePage> {
  late BannerAd _bannerAd;
  late InterstitialAd _interstitialAd;

  @override
  void initState() {
    super.initState();

    // 初始化BannerAd
    _bannerAd = BannerAd(
      adUnitId: 'ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx', // 替换为你的Banner Ad Unit ID
      size: AdSize.banner,
      request: AdRequest(
        keywords: <String>['flutter', 'mobile', 'ads'],
        contentUrl: 'https://www.example.com',
        nonPersonalizedAdsOnly: false, // 根据需要设置为true以仅请求非个性化广告
      ),
      listener: BannerAdListener(
        onAdLoaded: () {
          print('Banner Ad loaded.');
        },
        onAdFailedToLoad: (AdLoadError error) {
          print('Banner Ad failed to load: ${error.message}');
        },
        onAdOpened: () {
          print('Banner Ad opened.');
        },
        onAdClosed: () {
          print('Banner Ad closed.');
        },
      ),
    );

    // 初始化InterstitialAd
    _interstitialAd = InterstitialAd(
      adUnitId: 'ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx', // 替换为你的Interstitial Ad Unit ID
      request: AdRequest(),
      listener: InterstitialAdListener(
        onAdLoaded: () {
          _interstitialAd.show();
        },
        onAdFailedToLoad: (AdLoadError error) {
          print('Interstitial Ad failed to load: ${error.message}');
        },
        onAdOpened: () {
          print('Interstitial Ad opened.');
        },
        onAdClosed: () {
          print('Interstitial Ad closed.');
          // 可以在这里加载下一个广告
          _interstitialAd.load();
        },
      ),
    );

    // 加载广告
    _bannerAd.load();
    _interstitialAd.load();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Google Mobile Ads Example'),
      ),
      body: Column(
        children: <Widget>[
          Container(
            height: 50,
            child: AdWidget(ad: _bannerAd),
          ),
          ElevatedButton(
            onPressed: () {
              // 显示插屏广告
              _interstitialAd.load();
            },
            child: Text('Show Interstitial Ad'),
          ),
        ],
      ),
    );
  }

  @override
  void dispose() {
    _bannerAd.dispose();
    _interstitialAd.dispose();
    super.dispose();
  }
}

3. 处理广告生命周期

在上面的代码中,我们使用了AdListener来处理广告的生命周期事件,如加载成功、加载失败、广告打开和关闭等。这些事件对于调试和用户体验优化非常重要。

注意事项

  • 确保你已经正确设置了AdMob账户,并创建了相应的Ad Unit。
  • 在实际发布应用中,不要硬编码Ad Unit ID,可以考虑使用环境变量或配置文件来管理。
  • 遵守Google AdMob的政策和指南,以确保广告的合规性和最大化收益。

这个示例展示了如何在Flutter应用中集成Banner广告和Interstitial广告。根据你的需求,你还可以集成Rewarded Ads、Native Ads等其他类型的广告。

回到顶部