Flutter 앱에 Google 광고 넣기

2025. 2. 15. 16:18·Flutter
728x90

이번에는 앱에 Google 광고(Google AdMob)를 적용하는 방법을 정리해보려고 합니다.

직접 적용해본 경험을 바탕으로 최대한 쉽게 설명해볼게요.

Google AdMob이란?

Google AdMob은 Google에서 제공하는 모바일 광고 플랫폼입니다. 앱에 광고를 삽입해서 수익을 창출할 수 있습니다. 배너 광고, 전면 광고, 보상형 광고 등 다양한 형식이 있습니다.

 


1️⃣ Google AdMob 계정 생성 및 설정

Google AdMob을 사용하려면 먼저 계정을 만들어야 합니다.

  1. Google AdMob에 접속해서 로그인
  2. 새 앱 추가 → 앱 정보를 입력하고 "앱 추가" 선택
  3. 광고 단위 생성 → 배너, 전면, 보상형 광고 중 원하는 유형 선택
  4. 광고 단위 ID 복사 (Flutter 코드에서 사용)

💡 Tip: 실제 앱에 적용하기 전에 테스트 광고 ID를 사용하세요. (테스트 ID 사용 안 하면 계정 정지 위험 있음)


2️⃣ Flutter 프로젝트에 Google Mobile Ads 패키지 추가

Flutter에서 Google 광고를 사용하려면 google_mobile_ads 패키지를 추가해야 합니다.

pubspec.yaml에 패키지 추가

dependencies:
  flutter:
    sdk: flutter
  google_mobile_ads: latest_version
최신 버전은 pub.dev에서 확인하세요.

Android 설정 (AndroidManifest.xml 수정)

Android 앱이 광고를 로드할 수 있도록 인터넷 권한을 추가합니다.

android/app/src/main/AndroidManifest.xml

<manifest>
    <uses-permission android:name="android.permission.INTERNET"/>
    <application>
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX"/> <!-- 여기에 실제 AdMob 앱 ID 입력 -->
    </application>
</manifest>

 

📌 AdMob 앱 ID는 광고 단위 ID와 다릅니다.


3️⃣ 광고 삽입 (배너 광고 예제)

이제 실제로 광고를 삽입해볼 차례입니다.

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  MobileAds.instance.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BannerAdScreen(),
    );
  }
}

class BannerAdScreen extends StatefulWidget {
  @override
  _BannerAdScreenState createState() => _BannerAdScreenState();
}

class _BannerAdScreenState extends State<BannerAdScreen> {
  BannerAd? _bannerAd;
  bool _isAdLoaded = false;

  @override
  void initState() {
    super.initState();
    _loadBannerAd();
  }

  void _loadBannerAd() {
    _bannerAd = BannerAd(
      size: AdSize.banner,
      adUnitId: 'ca-app-pub-3940256099942544/6300978111', // 테스트 광고 ID
      listener: BannerAdListener(
        onAdLoaded: (_) {
          setState(() {
            _isAdLoaded = true;
          });
        },
        onAdFailedToLoad: (ad, error) {
          print('배너 광고 로드 실패: ${error.message}');
          ad.dispose();
        },
      ),
      request: AdRequest(),
    )..load();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Google Ads 적용")),
      body: Column(
        children: [
          Expanded(child: Center(child: Text("앱 콘텐츠"))),
          if (_isAdLoaded)
            Container(
              height: 50,
              child: AdWidget(ad: _bannerAd!),
            ),
        ],
      ),
    );
  }

  @override
  void dispose() {
    _bannerAd?.dispose();
    super.dispose();
  }
}

테스트할 때는 반드시 테스트 광고 ID를 사용하세요.
배너 광고는 보통 화면 하단에 배치하는 게 일반적입니다.


4️⃣ 전면 광고 추가 (사용자 이벤트 후 표시)

전면 광고는 앱 화면을 전체 덮는 형태로 표시됩니다. 보통 특정 액션 후에 띄우는 게 좋습니다.

InterstitialAd? _interstitialAd;

void loadInterstitialAd() {
  InterstitialAd.load(
    adUnitId: 'ca-app-pub-3940256099942544/1033173712', // 테스트 광고 ID
    request: AdRequest(),
    adLoadCallback: InterstitialAdLoadCallback(
      onAdLoaded: (ad) {
        _interstitialAd = ad;
      },
      onAdFailedToLoad: (error) {
        print('전면 광고 로드 실패: ${error.message}');
      },
    ),
  );
}

void showInterstitialAd() {
  if (_interstitialAd != null) {
    _interstitialAd!.show();
    _interstitialAd = null; // 광고가 한 번 표시되면 다시 로드 필요
    loadInterstitialAd(); // 새로운 광고 로드
  }
}

전면 광고는 앱 시작 직후나 연속 클릭 중에는 사용하지 않는 것이 좋습니다. (사용자 경험 저해)

 


5️⃣ 보상형 광고 추가 (보상형 광고 예제)

보상형 광고는 광고를 본 사용자에게 특정 혜택(포인트, 아이템 등)을 제공할 때 사용됩니다.

RewardedAd? _rewardedAd;

void loadRewardedAd() {
  RewardedAd.load(
    adUnitId: 'ca-app-pub-3940256099942544/5224354917', // 테스트 광고 ID
    request: AdRequest(),
    rewardedAdLoadCallback: RewardedAdLoadCallback(
      onAdLoaded: (ad) {
        _rewardedAd = ad;
      },
      onAdFailedToLoad: (error) {
        print('보상형 광고 로드 실패: ${error.message}');
      },
    ),
  );
}

void showRewardedAd() {
  if (_rewardedAd != null) {
    _rewardedAd!.show(
      onUserEarnedReward: (ad, reward) {
        print('보상 획득: ${reward.amount}');
      },
    );
    _rewardedAd = null; // 광고 사용 후 다시 로드 필요
    loadRewardedAd();
  }
}

보상형 광고는 반드시 사용자가 동의한 경우에만 실행해야 합니다.


마무리

이제 Flutter 앱에 Google 광고를 추가하는 방법을 정리해봤습니다. 직접 해보니까 생각보다 어렵지는 않았는데, 몇 가지 주의할 점이 있었습니다.

! 광고 단위 ID는 실제 배포 시 변경해야 함 !
! 테스트 광고 ID 사용 필수 (실제 광고 ID 사용하면 계정 정지 위험) !
! 전면 광고는 적절한 타이밍에만 노출 !
! 보상형 광고는 사용자의 선택을 존중해야 함 ! 

혹시 추가로 궁금한 점 있으면 댓글 남겨주세요! 😊

728x90
LIST

'Flutter' 카테고리의 다른 글

기울어지는 카드 UI 만들기 ( Flutter )  (2) 2025.02.19
Flutter 3.29 업데이트  (3) 2025.02.16
Dart 3.7 업데이트! 개발자들을 위한 최신 포맷팅 스타일 총정리  (4) 2025.02.14
Xcode에서 Firebase 설정 후 GoogleService-Info.plist를 찾지 못하는 문제 해결하기  (0) 2025.02.13
Flutter 면접 질문: "왜 클래스 기반 위젯을 사용해야 할까?"  (2) 2025.02.12
'Flutter' 카테고리의 다른 글
  • 기울어지는 카드 UI 만들기 ( Flutter )
  • Flutter 3.29 업데이트
  • Dart 3.7 업데이트! 개발자들을 위한 최신 포맷팅 스타일 총정리
  • Xcode에서 Firebase 설정 후 GoogleService-Info.plist를 찾지 못하는 문제 해결하기
Mr. Joo
Mr. Joo
  • Mr. Joo
    삽질의 시작
    Mr. Joo
  • 전체
    오늘
    어제
    • 분류 전체보기 (177) N
      • Flutter (67)
      • Android (9)
      • Swift (4)
      • React (11)
      • 인공지능 (4)
      • CS (10)
      • 개발 뉴스 (69) N
      • IT 기기 (1)
      • 알면 유용한 정보 (2)
  • 인기 글

  • 태그

    앱
    android
    개발 뉴스
    기술 뉴스
    Dart 기초
    개발 이슈
    Flutter
    플러터
    뉴스 모음
    개발
    DART
    앱개발
    기술
    react
    뉴스
    앱 개발
    오늘의 뉴스
    오늘의 이슈
    이슈
    Flutter 기초
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Mr. Joo
Flutter 앱에 Google 광고 넣기
상단으로

티스토리툴바