name: admob-flutter
FlutterアプリにGoogle AdMob広告を実装するための手順書。
| 種類 | テスト用ID |
|---|---|
| アプリID | ca-app-pub-3940256099942544~3347511713 |
| バナー | ca-app-pub-3940256099942544/6300978111 |
| インタースティシャル | ca-app-pub-3940256099942544/1033173712 |
| リワード | ca-app-pub-3940256099942544/5224354917 |
| ネイティブ | ca-app-pub-3940256099942544/2247696110 |
⚠️ 本番IDでテストクリックするとアカウントBANの可能性あり
pubspec.yaml:
dependencies:
google_mobile_ads: ^5.1.0
flutter pub get
android/app/src/main/AndroidManifest.xml の <application> 内に追加:
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="YOUR_APP_ID"/>
開発中はテスト用アプリID、リリース時に本番IDに変更。
lib/core/services/ad_service.dart にシングルトンの広告サービスを作成する。本番/テストIDの自動切り替え、COPPA準拠設定を含む。
実装の詳細: references/ad-service.dart
import 'core/services/ad_service.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 子供向けアプリの場合 childDirected: true
await AdService().initialize(childDirected: true);
runApp(const MyApp());
}
lib/core/widgets/native_ad_widget.dart にStatefulWidgetとして実装。NativeTemplateStyleでデザインをカスタマイズし、ロード完了後に表示する。
実装の詳細: references/native-ad-widget.dart
Column(
children: [
// コンテンツ
Text('ここにコンテンツ'),
// 広告
const NativeAdWidget(templateType: TemplateType.medium),
],
)
StatefulWidgetとしてバナー広告を実装。AdSize.bannerサイズで表示し、ロード失敗時は自動でdisposeする。
実装の詳細: references/banner-ad-widget.dart
画面遷移時などに全画面広告を表示するサービス。表示後に次の広告を自動プリロードする。
実装の詳細: references/interstitial-ad-service.dart
13歳未満が使用する可能性があるアプリでは必須:
await MobileAds.instance.updateRequestConfiguration(
RequestConfiguration(
tagForChildDirectedTreatment: TagForChildDirectedTreatment.yes,
maxAdContentRating: MaxAdContentRating.g, // 全年齢向け
),
);
kReleaseMode で正しく切り替わることを確認kReleaseModeでの切り替えが正しく動作することをリリース前に確認するMobileAds.instance.initialize() の呼び出しを忘れると実行時クラッシュする。AndroidManifest.xmlへのアプリID設定も必須。main.dartでWidgetsFlutterBinding.ensureInitialized()の後に初期化することdispose()でNativeAd/BannerAdを破棄しないとメモリリークが発生する。StatefulWidgetのdispose()メソッドで必ず_nativeAd?.dispose()等を呼ぶこと2026-01-29 作成