우선 Admob 사이트의 계정과 광고 단위를 준비 해야 합니다.
그리고 google_mobile_ads를 플러터에 추가합니다.
flutter pub add google_mobile_ads
Admob의 APP ID를 각 OS 세팅 파일을 수정 해줍니다.
AndroidManifest.xml
<manifest>
...
<application>
...
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~3347511713"/>
</application>
</manifest>
ios/Runner/Info.plist
...
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
...
UNIT ID의 호출을 도와주는 ad_helper 파일을 생성합니다.
lib/ad_helper.dart
import 'dart:io';
class AdHelper {
static String get bannerAdUnitId {
if (Platform.isAndroid) {
return 'ca-app-pub-3940256099942544/6300978111';
} else if (Platform.isIOS) {
return 'ca-app-pub-3940256099942544/2934735716';
} else {
throw new UnsupportedError('Unsupported platform');
}
}
static String get interstitialAdUnitId {
if (Platform.isAndroid) {
return "ca-app-pub-3940256099942544/1033173712";
} else if (Platform.isIOS) {
return "ca-app-pub-3940256099942544/4411468910";
} else {
throw new UnsupportedError("Unsupported platform");
}
}
static String get rewardedAdUnitId {
if (Platform.isAndroid) {
return "ca-app-pub-3940256099942544/5224354917";
} else if (Platform.isIOS) {
return "ca-app-pub-3940256099942544/1712485313";
} else {
throw new UnsupportedError("Unsupported platform");
}
}
}
kRealeaseMode로 bool 값 판단이 가능 합니다.
import 'package:flutter/foundation.dart';
// kReleaseMode
배너 광고를 다음과 같이 재사용 할 것입니다.
AdBanner()
배너 광고를 페이지마다 재사용하기 위해 위젯으로 생성 해주고 재사용 할 것입니다.
lib/page/ad_banner.dart
import 'package:flutter/material.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:mobile/utils/ad_helper.dart';
class AdBanner extends StatefulWidget {
const AdBanner({Key? key}) : super(key: key);
_AdBannerState createState() => _AdBannerState();
}
class _AdBannerState extends State<AdBanner> {
// TODO: Add _bannerAd
late BannerAd _bannerAd;
// TODO: Add _isBannerAdReady
bool _isBannerAdReady = false;
Widget build(BuildContext context) {
if (_isBannerAdReady) {
return Padding(
padding: const EdgeInsets.only(top: 5.0, bottom: 5.0),
child: Align(
alignment: Alignment.bottomCenter,
child: Container(
width: _bannerAd.size.width.toDouble(),
height: _bannerAd.size.height.toDouble(),
child: AdWidget(ad: _bannerAd),
),
),
);
} else {
return Container();
}
}
void initState() {
super.initState();
// TODO: Initialize _bannerAd
_bannerAd = BannerAd(
adUnitId: AdHelper.bannerAdUnitId,
request: AdRequest(),
size: AdSize.banner,
listener: BannerAdListener(
onAdLoaded: (_) {
setState(() {
_isBannerAdReady = true;
});
},
onAdFailedToLoad: (ad, err) {
print('Failed to load a banner ad: ${err.message}');
_isBannerAdReady = false;
ad.dispose();
},
),
);
_bannerAd.load();
}
void dispose() {
// TODO: Dispose a BannerAd object
_bannerAd.dispose();
super.dispose();
}
}