■ 소개
목표: 419 (4업으로 1달러 벌기 시작해서 9달러까지 벌어보기)
어제 밤에 자다가 벌떡 일어나서 뭐할지 생각했습니다 ㅋㅋㅋ
adMob다음주에 스터디 에서 다루기로 했지만
경거망동(?)해서 미리 달아보기로 했습니다.
(아마도 수습은 커서가 해줄거니까?)
.
■ 진행 및 결과
1. adMob 달기 계획 짜달라고 합니다.
역시나 시작은 plan모드입니다.
한국어 텍스트가 있는 검은 화면
.
질문을 하네요.
1번 질문에는 mvp는 안드로이드 출시 예정이니까, andriod만으로 선택하고,
2번 질문은 어차피 뭔말인지 몰라서 권장해주는걸 선택 (ㅋㅋ)합니다.
메시지가 있는 검은 화면
.
커서가 만들어준 md파일을 공유드립니다.
AdMob(Android) 구현 계획
목표
Android에 하단 배너 AdMob을 안정적으로 노출
테스트/프로덕션 ID를 빌드별로 분리(dev/prod는 --dart-define-from-file)
스토어/SDK 요구사항(권한, App ID 메타데이터) 충족
현 상태 확인(이미 되어 있음)
패키지: google_mobile_ads: ^5.2.0가 이미 추가됨: momsmom/pubspec.yaml
배너 위젯 구현 존재: momsmom/lib/ads/ad_banner.dart
배너는 채팅 화면 하단에 붙어 있음: momsmom/lib/features/chat/chat_screen.dart
Android App ID(테스트)가 AndroidManifest.xml에 들어가 있음: momsmom/android/app/src/main/AndroidManifest.xml
구현/정리 작업
1) AdMob 콘솔 준비
AdMob에서 Android 앱 등록(패키지명 com.momsmom.momsmom)
배너 광고 단위(Ad Unit) 생성
결과로 아래 2개 확보
Android App ID: ca-app-pub-...~...
Android Banner Ad Unit ID: ca-app-pub-.../...
2) Android App ID를 매니페스트에 “릴리즈용”으로 설정
릴리즈 빌드는 android/app/src/main/AndroidManifest.xml이 기준이므로:
momsmom/android/app/src/main/AndroidManifest.xml의 com.google.android.gms.ads.APPLICATION_ID 값을 프로덕션 App ID로 교체
개발/테스트 편의를 위해(선택이지만 강력 추천):
momsmom/android/app/src/debug/AndroidManifest.xml에 <application> + 동일 meta-data를 추가해 디버그는 테스트 App ID로 오버라이드
3) Android 권한/요구사항 추가
momsmom/android/app/src/main/AndroidManifest.xml에 필요 권한을 점검/추가
android.permission.INTERNET (이미 있음)
android.permission.ACCESS_NETWORK_STATE (권장)
com.google.android.gms.permission.AD_ID (targetSdk가 33+일 때 권장/사실상 필요)
4) 배너 Ad Unit ID를 dart-define로 분리(Dev/Prod)
Env 확장: momsmom/lib/config/env.dart
ADMOB_BANNER_AD_UNIT_ID_ANDROID 같은 상수를 String.fromEnvironment(...)로 추가
Dev/Prod 주입 파일 확장
momsmom/tool/dart_defines_dev.json
배너는 테스트 Ad Unit ID를 넣기
momsmom/tool/dart_defines_prod.json
배너는 프로덕션 Ad Unit ID를 넣기
5) 광고 SDK 초기화 위치 정리(중복 초기화 방지)
현재 AdBanner가 initState()에서 MobileAds.instance.initialize()를 호출하고 있어, 화면이 여러 번 생성되면 초기화 호출이 반복될 수 있습니다.
권장 구조:
momsmom/lib/main.dart에서 앱 시작 시 1회 초기화
또는 lib/ads/ad_service.dart 같은 싱글턴 서비스를 만들어 1회만 초기화(필요 시 lazy-init)
디버그에서만 테스트 디바이스 설정도 함께 적용(선택):
`RequestConfiguration(testDeviceIds: [...])`
6) AdBanner를 “환경 기반”으로 동작하도록 조정
momsmom/lib/ads/ad_banner.dart
_bannerAdUnitId()가 현재 하드코딩 테스트 ID → Env.ADMOB_BANNER_AD_UNIT_ID_ANDROID를 사용
값이 비어 있으면(설정 누락) placeholder만 보여주고 광고 로딩 스킵하도록 가드
(옵션) AdSize.banner 대신 기기 폭에 맞는 AnchoredAdaptiveBannerAdSize 적용 검토
7) 빌드/검증 체크리스트
디버그 실행(테스트 광고 확인)
flutter run --dart-define-from-file=tool/dart_defines_dev.json
릴리즈 빌드(프로덕션 ID 확인)
flutter build apk --release --dart-define-from-file=tool/dart_defines_prod.json
검증 포인트
배너가 로드될 때 placeholder → 실제 배너로 전환
onAdImpression에서 기존 AnalyticsService.instance.logAdImpression() 호출이 유지되는지 확인
Play Console 사전 런/기기에서 크래시/ANR 없음
변경 예정 주요 파일
momsmom/lib/main.dart
momsmom/lib/config/env.dart
momsmom/lib/ads/ad_banner.dart
momsmom/tool/dart_defines_dev.json
momsmom/tool/dart_defines_prod.json
momsmom/android/app/src/main/AndroidManifest.xml
(선택) momsmom/android/app/src/debug/AndroidManifest.xml
구현 Todos
admob-ids: AdMob 콘솔에서 Android App ID + Banner Ad Unit ID 발급
android-manifest: main/debug 매니페스트에 App ID 및 권한 반영
env-defines: Env/dart_defines_*.json에 배너 Ad Unit ID 주입 구조 추가
init-once: 광고 SDK 1회 초기화 구조로 정리
banner-wireup: AdBanner가 Env 기반으로 로드/실패/미설정 처리를 하도록 수정
verify-build: dev/prod 빌드 커맨드로 실기기에서 노출 확인
아마도 PRD 단계에서 adMob자리를 확보해둔 덕에 편하게 할 수 있다는 말인 것 같습니다.
.
adMob 설정을 어디서 하는 건지 물어보기
뭐 일단 커서가 딸깍 해줬는데,
AD Unit ID가 뭔지 모르겠는데 그걸 달라고 합니다.
.
...
...
.
이럴때는 커서한테 고해성사하는게 중요합니다. (포인트)
.
마법의 프롬프트는
나 아무것도 모르니까 따라하게 스텝바이스텝 알려줘.입니다. ㅎㅎ
.
한국어 웹사이트 스크린샷
친절한 커서는 아무것도 몰라도 도와줍니다.
그대로 따라합니다.
.
Google AdWords 광고 생성 페이지의 스크린샷
.
짠! 하고 성공했습니다.
.
2개의 ID를 주니 알아서 배포까지 해주는군요.
다만, 신규 Ad Unit이라 전파/서빙까지 최대 1시간까지 걸릴수있다고 합니다. ㅎㅎ
.
우선 기다려봅니다-!
휴대전화에 있는 한국어 문자 앱의 스크린샷
.
■ 느낀점 및 향후 계획
오늘은 다른 일정이 있어서 아침에 작업을 좀 했습니다.
다른 일정 하는 틈틈히 또 뭘 개발하면 좋을지 생각해봐야겠습니다.
.
지금 당장 생각으로는 구조는 심플하게 가기로 했으니까.
기본 뼈대는 거진 다 된거나 마찬가지이고,
.
프로덕트의 핵심인 "프롬프트 다듬기"에 공을 많이 들여야겠습니다.
재밌네요 ㅎㅎㅎ
.
20기도 기대됩니다.