パッケージ、リポジトリ、アプリカテゴリを検索

GitHub リポジトリnooralibutt/easy-ads

easy-ads

このリポジトリには、AdMob、AppLovin-Max、UnityAds、Facebook広告の統合が含まれています。

easy-ads のプロジェクト画像
スター
50
フォーク
27
最終プッシュ(UTC)
2026/08/17
プロジェクト状態
公開中

元の README

以下は英語原文のスナップショットです。最新版は GitHub をご覧ください。

Easy Ads Flutter

pub package Last Commits Pull Requests Code size License PayPal

Show some 💙, 👍 the package & ⭐️ the repo to support the project

A plugin to easily integrate AdMob ads into your Flutter app.


⚠ Note

From version 26.3.12, this package supports AdMob only.

If you need Facebook, AppLovin, or Unity ads, you can use the alternative branches:

  • All Ad Networks (AdMob + Facebook + AppLovin + Unity)
    https://github.com/nooralibutt/easy-ads/tree/feature/all-ads-support

  • AdMob + Facebook Only
    https://github.com/nooralibutt/easy-ads/tree/feature/admob-facebook


New Feature: autoLoadAds

We've introduced a new autoLoadAds field in EasyAds initialization:

  • Purpose: Control whether ads are loaded automatically or not.
  • Default: true (ads are loaded automatically on initialization)
  • Usage:
    await EasyAds.instance.initialize(
      adIdManager,
      autoLoadAds: false, // disables automatic ad loading
    );```
    
    

If set to false, ads will not be loaded automatically. You must manually load ads using:

EasyAds.instance.loadAd(adUnitType: AdUnitType.interstitial);

Features

  • Google Mobile Ads (Banner, Native, App Open, Interstitial, Rewarded)
  • JIT (Just-in-Time) ad loading for Interstitial, App Open, and Rewarded ads
  • Simple API for loading and displaying ads
  • Event callbacks for ad lifecycle handling

AdMob Mediation

This plugin supports AdMob Mediation.

You can configure additional ad networks directly in your AdMob dashboard while still using this plugin.

See the official guide:
https://developers.google.com/admob/flutter/mediation/get-started


GDPR and Privacy Options Compliance

A Consent Manager helper is provided to support GDPR and privacy dialogs. ConsentManager.gatherGdprConsent() and ConsentManager.gatherPrivacyConsent()

Platform Specific Setup

iOS
Update your Info.plist
  • The Google Mobile Ads App ID is required in your Info.plist.

Update your app's ios/Runner/Info.plist file to add two keys:

<key>GADApplicationIdentifier</key>
<string>YOUR_SDK_KEY</string>
  • You have to add SKAdNetworkItems for all networks provided by easy-ads-flutter info.plist you can copy paste SKAdNetworkItems in your own project.
Android
Update AndroidManifest.xml
<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>

Initialize Ad Ids

import 'dart:io';
import 'package:easy_ads_flutter/easy_ads_flutter.dart';

class TestAdIdManager extends IAdIdManager {
  const TestAdIdManager();

  @override
  AppAdIds? get admobAdIds => AppAdIds(
    appId: Platform.isAndroid
        ? 'ca-app-pub-3940256099942544~3347511713'
        : 'ca-app-pub-3940256099942544~1458002511',
    appOpenId: Platform.isAndroid
        ? 'ca-app-pub-3940256099942544/9257395921'
        : 'ca-app-pub-3940256099942544/5575463023',
    bannerId: Platform.isAndroid
        ? 'ca-app-pub-3940256099942544/9214589741'
        : 'ca-app-pub-3940256099942544/2435281174',
    interstitialId: Platform.isAndroid
        ? 'ca-app-pub-3940256099942544/1033173712'
        : 'ca-app-pub-3940256099942544/4411468910',
    rewardedId: Platform.isAndroid
        ? 'ca-app-pub-3940256099942544/5224354917'
        : 'ca-app-pub-3940256099942544/1712485313',
    nativeBannerId: Platform.isAndroid
        ? 'ca-app-pub-3940256099942544/2247696110'
        : 'ca-app-pub-3940256099942544/3986624511',
  );
}

Initialize the SDK

Before loading ads, have your app initialize the Mobile Ads SDK by calling EasyAds.instance.initialize() which initializes the SDK and returns a Future that finishes once initialization is complete (or after a 30-second timeout). This needs to be done only once, ideally right before running the app.

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

const IAdIdManager adIdManager = TestAdIdManager();

EasyAds.instance.initialize(
    adIdManager,
    adMobAdRequest: const AdRequest(),
    admobConfiguration: RequestConfiguration(testDeviceIds: [
      '072D2F3992EF5B4493042ADC632CE39F', // Mi Phone
      '00008030-00163022226A802E',
    ]),
  );

Interstitial/Rewarded Ads

Load an ad

Ad is automatically loaded after being displayed or first time when you call initialize. But on safe side, you can call this method. This will load both rewarded and interstitial ads. If a particular ad is already loaded, it will not load it again.

EasyAds.instance.loadAd();
Show interstitial or rewarded ad
EasyAds.instance.showAd(AdUnitType.rewarded);
Show appOpen ad
EasyAds.instance.showAd(AdUnitType.appOpen)

Show Banner Ads

This is how you may show banner ad in widget-tree somewhere:

@override
Widget build(BuildContext context) {
  Column(
    crossAxisAlignment: CrossAxisAlignment.stretch,
    children: [
      SomeWidget(),
      const Spacer(),
      EasyBannerAd(adSize: AdSize.largeBanner),
    ],
  );
}

JIT (Just-in-Time) Ads

This package supports JIT (Just-in-Time) ad loading for Interstitial, App Open, and Rewarded ads.
You can show ads on demand, with callbacks for success, failure, and dismissal.

Show JIT App Open
EasyAds.instance.showJitAppOpen(
  onFailedToLoadOrShow: () => _showSnack('AppOpen failed'),
  onAdShowed: () => _showSnack('AppOpen showed'),
  onAdDismissed: () => _showSnack('AppOpen dismissed'),
);
Show JIT Interstitial
EasyAds.instance.showJitInterstitial(
context,
onFailedToLoadOrShow: () => _showSnack('Interstitial failed'),
onAdShowed: () => _showSnack('Interstitial showed'),
onAdDismissed: () => _showSnack('Interstitial dismissed'),
);
Show JIT Rewarded
EasyAds.instance.showJitRewarded(
context,
onEarnedReward: (ctx) => _showSnack('Reward earned!'),
);
Native Ads

You can also create Native Ads and insert them into your widget tree using:

EasyAds.instance.createNativeAd();

Example usage in a widget tree:

@override
Widget build(BuildContext context) {
  return Column(
    children: [
      SomeWidget(),
      EasyAds.instance.createNativeAd(),
      AnotherWidget(),
    ],
  );
}

This ensures native ads are properly loaded and displayed within your UI.

Listening to the callbacks

Declare this object in the class

  StreamSubscription? _streamSubscription;

We are showing InterstitialAd here and also checking if ad has been shown. If true, we are canceling the subscribed callbacks, if any. Then, we are listening to the Stream and accessing the particular event we need

if (EasyAds.instance.showInterstitialAd()) {
  // Canceling the last callback subscribed
  _streamSubscription?.cancel();
  // Listening to the callback from showInterstitialAd()
  _streamSubscription =
  EasyAds.instance.onEvent.listen((event) {
    if (event.adUnitType == AdUnitType.interstitial &&
        event.type == AdEventType.adDismissed) {
      _streamSubscription?.cancel();
      goToNextScreen(countryList[index]);
    }
  });
}

Authors

Noor Ali Butt

GitHub Follow LinkedIn Link

Noor Ali GitHub avatar
GitHub 作者

Noor Ali ↗

💙 Dart, Flutter, 🖤 Unity3D, C# 📱iOS, Android #OpenToWork

@crosscodeDubai, United Arab Emirates公式サイト ↗
言語DartRubySwiftKotlinObjective-C

カテゴリー

このリポジトリが公開するパッケージ

使用している依存関係

依存関係一覧 6 件

プロジェクトに合うリポジトリを選ぶには?

用途で絞り込み、開発状況を比較し、採用前に元のリポジトリで要件を確認しましょう。

  1. 名前・作者・説明で検索し、技術トピックで絞り込みます。
  2. スター、フォーク、最近のプッシュを比較します。スターは関心の目安であり、品質の保証ではありません。
  3. 利用前に GitHub で README、ライセンス、Issues を確認します。

情報源と管理

“A repository is the most basic element of GitHub.”

GitHub Docs — About repositories ↗