3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Flutter】Google AdMob のバナー広告のウィジェットの実装と注意点

Last updated at Posted at 2023-08-19

概要

この記事は、Flutterを用いてAdMobバナー広告を組み込む方法について解説するものです。AdMobの登録と基本設定が完了しているFlutter開発者を対象としています。

この記事で学べること:
Google AdMobを使用してFlutterアプリにバナー広告を表示するウィジェットの実装方法
この記事では扱わないこと:
AdMobのアカウント設定や具体的な初期設定手順

必要なパッケージの追加

以下のコマンドを実行してください

flutter pub add google_mobile_ads

メタデータの設定

AdMobを利用するためには、プラットフォームごとにメタデータを設定する必要があります。

参考: https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=ja#3

Android

android/app/main/AndroidManifest.xmlに以下のメタデータを追加します。

android/app/main/AndroidManifest.xml
<manifest>
    ...
    <application>
       ...
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="YOUR_ADMOB_APP_ID"/>
    </application>

</manifest>

iOS

info.plistに以下を追加します。

info.plist
<key>GADApplicationIdentifier</key>
<string>YOUR_ADMOB_APP_ID</string>
<key>io.flutter.embedded_views_preview</key>
<true/>

バナー広告の実装

以下のコードは、プラットフォームに応じて適切なAdMobユニットIDを取得する関数です。

import 'dart:io';

import 'package:flutter/foundation.dart';

String getAdBannerUnitId() {
  String bannerUnitId = "";
  if (Platform.isAndroid) {
    // Android のとき
    bannerUnitId = kDebugMode ?
        "ca-app-pub-3940256099942544/6300978111"  // Androidのデモ用バナー広告ID
: "YOUR_ADMOB_ANDROID_UNIT_ID";
  } else if (Platform.isIOS) {
    // iOSのとき
     bannerUnitId = kDebugMode
        ? "ca-app-pub-3940256099942544/2934735716"  // iOSのデモ用バナー広告ID
        : "YOUR_ADMOB_IOS_UNIT_ID";
  }
  return bannerUnitId;
}
  • 呼び出し側
    final bannerId = getAdBannerUnitId();
    BannerAd myBanner = BannerAd(
        adUnitId: bannerId,
        size: AdSize.banner,
        request: const AdRequest(),
        listener: const BannerAdListener());
    myBanner.load();
  • ウィジェットの描画
            Container(
              width: myBanner.size.width.toDouble(),
              height: myBanner.size.height.toDouble(),
              alignment: Alignment.center,
              child: AdWidget(ad: myBanner),
            ),

UXと不正クリックの考慮

iPhone X以降のモデルでは、SafeAreaと広告が重なる可能性があり、誤タップを引き起こす恐れがあります。

このような場合、AdMobは無効なトラフィックと判断する可能性があります。これを防ぐために、広告の下にSafeAreaを設定するか、全体のウィジェットをSafeAreaで囲むことを推奨します。
私はおそらくこれが原因で1ヶ月ほど広告を止められていました…

このとき、自身のコンテンツにはかぶらないように注意してください。

例:

   Container(
              width: myBanner.size.width.toDouble(),
              height: myBanner.size.height.toDouble(),
              alignment: Alignment.center,
              child: AdWidget(ad: myBanner),
            ),
            const SafeArea(child: SizedBox.shrink()),
          ],
SafeAreaなし 下部SafeArea
image.png image.png

アプリはさわやか待ち時間

なお、シミュレーター起動のデモモード(kDebugMode=true)で表示されるバナーが使われています。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?