Files
submanager/.claude/skills/admob/SKILL.md
JiWoong Sul 83c43fb61f feat: SMS 스캔 전면광고 및 Isolate 버그 수정
## 전면 광고 (AdService)
- AdService 클래스 신규 생성 (lunchpick 패턴 참조)
- Completer 패턴으로 광고 완료 대기 구현
- 로딩 오버레이로 앱 foreground 상태 유지
- 몰입형 모드 (immersiveSticky) 적용
- iOS 테스트 광고 ID 설정

## SMS 스캔 버그 수정
- Isolate 내 Flutter 바인딩 접근 오류 해결
- _isoExtractServiceNameFromSender()에서 하드코딩 사용
- 로딩 위젯 화면 정중앙 배치 수정

## 문서 및 설정
- CLAUDE.md 최적화 (글로벌 규칙 중복 제거)
- Claude Code Skills 5개 추가
  - flutter-build: 빌드/분석
  - hive-model: Hive 모델 관리
  - release-deploy: 릴리즈 배포
  - sms-scanner: SMS 스캔 디버깅
  - admob: 광고 구현

## 버전
- 1.0.1+2 → 1.0.1+3
2025-12-08 18:14:52 +09:00

1.8 KiB

name, description, allowed-tools
name description allowed-tools
admob AdMob 전면 광고 구현 및 디버깅. 광고 표시, 로드 실패, foreground 이슈 시 사용. Read, Edit, Grep

AdMob Integration

핵심 파일

파일 역할
lib/services/ad_service.dart 전면 광고 서비스

광고 ID

플랫폼 ID 비고
Android ca-app-pub-6691216385521068/5281562472 프로덕션
iOS ca-app-pub-3940256099942544/1033173712 테스트

Completer 패턴 (필수)

광고 완료를 기다리려면 Completer 사용:

Future<bool> showInterstitialAd(BuildContext context) async {
  final completer = Completer<bool>();

  ad.fullScreenContentCallback = FullScreenContentCallback(
    onAdDismissedFullScreenContent: (ad) {
      ad.dispose();
      completer.complete(true);
    },
    onAdFailedToShowFullScreenContent: (ad, error) {
      ad.dispose();
      completer.complete(false);
    },
  );

  ad.show();
  return completer.future;
}

"App not in foreground" 해결

광고 로드 중 앱이 백그라운드로 가면 오류 발생.

해결책: 로딩 오버레이

// 광고 로드 전 다이얼로그 표시 → 앱이 foreground 유지
final closeLoading = _showLoadingOverlay(context);
await _enterImmersiveMode();
final loaded = await _ensureAdLoaded();
closeLoading();

몰입형 모드

await SystemChrome.setEnabledSystemUIMode(
  SystemUiMode.immersiveSticky,
  overlays: [],
);

흐름도

startScan()
    ↓
showLoadingOverlay() ← 앱 foreground 유지
    ↓
enterImmersiveMode()
    ↓
loadAd()
    ↓
closeOverlay()
    ↓
ad.show()
    ↓
await Completer.future ← 광고 완료 대기
    ↓
restoreSystemUI()
    ↓
continueWithScan()