搜尋分類、套件與程式碼儲存庫

套件詳情v2.1.0+3

flutter_native_admob

用於將 Firebase 原生 AdMob 集成至 Flutter 應用程式的外掛。支援 iOS 與 Android

近 30 天下載
333
喜歡數
176
Pub 分數
35

安裝套件

flutter pub add flutter_native_admob

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

一個 Flutter 插件,可將 Firebase Native AdMob 集成到行動應用程式中,支援 iOS 與 Android 平台。它讓開發者能於應用程式的使用者介面中無縫顯示原生廣告,提升收益,同時不干擾使用者體驗。此插件提供簡單的 API,可透過 Firebase 的 AdMob 服務載入與呈現原生廣告。它專為最新版 Flutter 設計,並遵循廣告效能與合規性的最佳實務。

適用情境

  • 透過原生廣告變現移動應用
  • 在Flutter應用中整合Firebase驅動的廣告
  • 在應用內容中展示富媒體廣告
  • 透過原生廣告格式提升使用者參與度
  • 使用一個代碼庫同時支援 iOS 和 Android

主要特色

  • Firebase 原生 AdMob 結合
  • 跨平台支援(iOS 與 Android)
  • 簡單的廣告加載和渲染 API
  • 符合AdMob政策
  • 即時廣告表現追蹤

適合對象

  • 尋求廣告變現的Flutter開發者
  • 需要原生廣告格式的應用
  • 使用 Firebase 作為後端的專案
  • 同時針對 iOS 和 Android 的開發者
  • 旨在實現高廣告參與度的應用程式

使用建議

  • 需要 Firebase 設定和設定
  • 廣告可用性取決於網路和區域
  • 如果未優化,可能會影響應用效能
  • 需要正確處理廣告生命週期事件
  • 遵守 AdMob 政策是強制性的

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

pub package

flutter_native_admob

Plugin to integrate Firebase Native Admob to Flutter application Platform supported: iOS, Android

Getting Started

For help getting started with Flutter, view our online documentation.

Setup Android project

  1. Add the classpath to the [project]/android/build.gradle file.
dependencies {
  // Example existing classpath
  classpath 'com.android.tools.build:gradle:3.2.1'
  // Add the google services classpath
  classpath 'com.google.gms:google-services:4.3.0'
}
  1. Add the apply plugin to the [project]/android/app/build.gradle file.
// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'
  1. Add your Admob App ID.

Important: This step is required as of Google Mobile Ads SDK version 17.0.0. Failure to add this tag results in a crash with the message: The Google Mobile Ads SDK was initialized incorrectly.

<manifest>
  <application>
    <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
    <meta-data
      android:name="com.google.android.gms.ads.APPLICATION_ID"
      android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
  </application>
</manifest>

Setup iOS project

  1. Add Admob App ID:

Important: This step is required as of Google Mobile Ads SDK version 7.42.0. Failure to add add this Info.plist entry results in a crash with the message: The Google Mobile Ads SDK was initialized incorrectly.

In your app's Info.plist file, add a GADApplicationIdentifier key with a string value of your AdMob app ID. You can find your App ID in the AdMob UI.

You can make this change programmatically:

<key>GADApplicationIdentifier</key>
<string>Your_Admob_App_ID</string>
  1. Add embeded view support:

In your app's Info.plist file, add this

<key>io.flutter.embedded_views_preview</key>
<true/>

How it works

NativeAdmob is a Flutter widget, so you can add it anywhere in Flutter application.

Property Description Type
adUnitID Your ad unit ID to load String
numberAds Number of ads to load Int
loading A widget to show when the ad is loading Widget
error A widget to show when the ad got error Widget
options Native ad styling options NativeAdmobOptions
type Native ad type (banner or full) NativeAdmobType.full
controller Controller for controlling the NativeAdmob widget NativeAdmobController
NativeAdmobOptions
Property Description Type Default value
showMediaContent Whether to show the media content or not bool true
ratingColor Rating star color Color Colors.yellow
adLabelTextStyle The ad label on the top left corner NativeTextStyle fontSize: 12, color: Colors.white, backgroundColor: Color(0xFFFFCC66)
headlineTextStyle The ad headline title NativeTextStyle fontSize: 16, color: Colors.black
advertiserTextStyle Identifies the advertiser. For example, the advertiser’s name or visible URL. (below headline) NativeTextStyle fontSize: 14, color: Colors.black
bodyTextStyle The ad description NativeTextStyle fontSize: 12, color: Colors.grey
storeTextStyle The app store name. For example, "App Store". NativeTextStyle fontSize: 12, color: Colors.black
priceTextStyle String representation of the app's price. NativeTextStyle fontSize: 12, color: Colors.black
callToActionStyle Text that encourages user to take some action with the ad. For example "Install". NativeTextStyle fontSize: 15, color: Colors.white, backgroundColor: Color(0xFF4CBE99)
NativeTextStyle
Property Description Type
fontSize Text font size double
color Text color Color
backgroundColor Background color Color
isVisible Whether to show or not bool
NativeAdmobController
Property/Function Description Type
stateChanged Stream that notify each time the loading state changed Stream
void setAdUnitID(String adUnitID) Change the ad unit ID, it will load the ad again if the id is changed from previous
void reloadAd({bool forceRefresh = false, int numberAds = 1}) Reload the ad with optionals number of ads
void setTestDeviceIds(List ids) Add your test devices
void setNonPersonalizedAds(bool nonPersAds) Set the option to disable the personalized Ads. AdMob default option: personalized

Examples

Default
NativeAdmob(
  adUnitID: "<Your ad unit ID>"
)
Using controller, loading, error widget, type and options
final _controller = NativeAdmobController();

// Optional: enter your test device ids here
_controller.setTestDeviceIds([
  "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
]);

// Optional: Set the option to disable the personalized Ads. AdMob default option: personalized
_controller.setNonPersonalizedAds(true);

NativeAdmob(
  adUnitID: "<Your ad unit ID>",
  loading: Center(child: CircularProgressIndicator()),
  error: Text("Failed to load the ad"),
  controller: _controller,
  type: NativeAdmobType.full,
  options: NativeAdmobOptions(
    ratingColor: Colors.red,
    // Others ...
  ),
)
Hide the ad until it load completed
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_native_admob/flutter_native_admob.dart';
import 'package:flutter_native_admob/native_admob_controller.dart';

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  static const _adUnitID = "<Your ad unit ID>";

  final _nativeAdController = NativeAdmobController();
  double _height = 0;

  StreamSubscription _subscription;

  @override
  void initState() {
    _subscription = _nativeAdController.stateChanged.listen(_onStateChanged);
    super.initState();
  }

  @override
  void dispose() {
    _subscription.cancel();
    _nativeAdController.dispose();
    super.dispose();
  }

  void _onStateChanged(AdLoadState state) {
    switch (state) {
      case AdLoadState.loading:
        setState(() {
          _height = 0;
        });
        break;

      case AdLoadState.loadCompleted:
        setState(() {
          _height = 330;
        });
        break;

      default:
        break;
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: ListView(
          children: <Widget>[
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              height: _height,
              padding: EdgeInsets.all(10),
              margin: EdgeInsets.only(bottom: 20.0),
              child: NativeAdmob(
                // Your ad unit id
                adUnitID: _adUnitID,
                controller: _nativeAdController,

                // Don't show loading widget when in loading state
                loading: Container(),
              ),
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
          ],
        ),
      ),
    );
  }
}
Prevent ad from reloading on ListView/GridView

When putting NativeAdmob in ListView/GridView, it will keep reloading as the PlatformView init again when scrolling to the item. To prevent from reloading and take full control of the NativeAdmob, we can create NativeAdmobController and keep it

import 'package:flutter/material.dart';
import 'package:flutter_native_admob/flutter_native_admob.dart';
import 'package:flutter_native_admob/native_admob_controller.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  static const _adUnitID = "<Your ad unit ID>";

  final _controller = NativeAdmobController();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: ListView(
          children: <Widget>[
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              height: 330,
              padding: EdgeInsets.all(10),
              margin: EdgeInsets.only(bottom: 20.0),
              child: NativeAdmob(
                adUnitID: _adUnitID,
                controller: _controller,
              ),
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 200.0,
              color: Colors.green,
            ),
            Container(
              height: 330,
              padding: EdgeInsets.all(10),
              margin: EdgeInsets.only(bottom: 20.0),
              child: NativeAdmob(
                adUnitID: _adUnitID,
                controller: _controller,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

所屬分類

原始碼儲存庫

使用此套件的專案