Flutter Admob 연동

영모·2022년 1월 12일
0
post-thumbnail

Admob을 연동해보자

Admob 공식 문서

1️⃣ 초기 Admob 세팅 및 초기화

우선 Admob 사이트의 계정과 광고 단위를 준비 해야 합니다.
그리고 google_mobile_ads를 플러터에 추가합니다.

flutter pub add google_mobile_ads

2️⃣ APP ID 연동

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>
...

3️⃣ UNIT ID 헬퍼 클래스 생성

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");
    }
  }
}

4️⃣ 릴리즈 모드 설정

kRealeaseMode로 bool 값 판단이 가능 합니다.

import 'package:flutter/foundation.dart';
// kReleaseMode

5️⃣ 배너 광고 재사용

배너 광고를 다음과 같이 재사용 할 것입니다.

AdBanner()

6️⃣ 배너 광고 위젯 생성

배너 광고를 페이지마다 재사용하기 위해 위젯으로 생성 해주고 재사용 할 것입니다.

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();
  }
}
profile
iOS Developer

0개의 댓글