Tauri 모바일과 AdMob
Tauri 모바일과 AdMob
Tauri 2 부터 Android · iOS 가 1 급 시민이 됐습니다. 모바일 앱은 데스크탑과 다른 배포·수익화 모델을 가집니다.
1. Tauri 모바일에 대한 이야기
Tauri 2.0 (2024-10) 이 Android 와 iOS 를 정식 지원합니다. 데스크탑 빌드와 같은 코드베이스에서 모바일 타겟을 추가합니다.
- Android — System WebView 를 호스트, Rust 를 JNI (
jni-rs) 로 Java/Kotlin 와 연결. - iOS — WKWebView 를 호스트, Rust 를 Objective-C/Swift 와 연결.
데스크탑처럼 tauri::command 가 그대로 동작합니다. 단 모바일 전용 기능 (권한·라이프사이클·푸시) 은 별도 플러그인입니다.
2. 사전 요구
Android (공통):
- Android Studio (또는 cmdline-tools).
- Android SDK (API 24 이상이 Tauri 2 의 minSdk).
- Android NDK (Rust 크로스컴파일).
- JDK 17+.
iOS (macOS 만):
- Xcode 와 Command Line Tools.
- Apple Developer 계정 (배포 시).
설치 후 pnpm tauri android init / pnpm tauri ios init 가 네이티브 프로젝트를 생성합니다.
3. Android 빌드 흐름
pnpm tauri android dev # 디바이스/에뮬레이터에서 dev
pnpm tauri android build # APK + AAB
pnpm tauri android build --apk # APK 만
pnpm tauri android build --aab # AAB 만
산출물: src-tauri/gen/android/app/build/outputs/{apk,bundle}/release/.
APK vs AAB:
- APK — 단일 설치 파일. 사이드로드·내부 배포에 자주.
- AAB (Android App Bundle) — Google Play 의 표준. 디바이스마다 최적화된 APK 를 Play 가 생성. 2021 년 8 월부터 신규 앱은 AAB 필수.
4. 서명
Play 배포는 서명이 필수입니다. keystore 파일 (.jks · .keystore) + 별칭 + 비밀번호.
# src-tauri/gen/android/keystore.properties
storeFile=../my-release.jks
storePassword=...
keyAlias=upload
keyPassword=...
Play Console 의 Play App Signing 을 켜면 업로드 키와 앱 서명 키를 분리합니다. 업로드 키 분실 시 복구가 가능해 권장됩니다.
5. AdMob 에 대한 이야기
AdMob 은 모바일 앱용 광고 네트워크입니다. 2006 년 창업자 Omar Hamoui 가 시작해 2009 년 Google 이 인수, 2010 년 정식 합병됐습니다. 지금은 Google AdSense / Google Ads 와 같은 인프라 위에서 모바일 광고를 처리합니다.
광고 형식:
| 형식 | 설명 |
|---|---|
| Banner | 화면 위/아래 고정 띠 광고. 가장 단순. |
| Interstitial | 화면 전체를 덮는 전면 광고. 자연스러운 전환 시점에 표시. |
| Rewarded | 보상형. 사용자가 자발적으로 시청하고 보상 (코인·기능 해제) 받음. |
| Rewarded Interstitial | Rewarded 와 Interstitial 의 중간. |
| Native | 앱 UI 와 어울리도록 커스텀 렌더. |
| App Open | 앱이 열릴 때 표시되는 전면 광고. |
각 형식은 별도 광고 단위 ID 를 가집니다.
6. AdMob 의 통합
네이티브 SDK (Google Mobile Ads SDK):
- Android:
com.google.android.gms:play-services-ads - iOS:
GoogleMobileAds(CocoaPods/SPM)
Tauri 에서 이 SDK 를 호출하려면 두 길이 있습니다.
① 공식/커뮤니티 플러그인
tauri-plugin-admob 같은 래퍼가 있으면 채택
→ 가용성·유지보수 상태 확인 필요
② 자체 플러그인 작성
tauri-plugin 템플릿으로 Android(Kotlin/Java) + iOS(Swift) 작성
→ Rust 다리에 노출
→ 작업량 있지만 통제 명확
WebView 안에서 직접 광고 SDK 를 호출하는 길은 정책 위반에 가깝습니다 (Google 이 권장하지 않음). 네이티브 SDK 호출이 표준입니다.
개발 중에는 테스트 광고 단위 ID 를 써야 합니다. 실제 ID 로 자기 광고를 클릭/노출하면 계정 정지 사유입니다. Google 이 공식 테스트 ID 를 문서에 공개하고 있습니다.
7. iOS 의 광고 추적 — ATT
iOS 14.5 (2021-04) 부터 App Tracking Transparency (ATT) 가 적용됩니다. 다른 회사의 앱·웹사이트에서 사용자를 추적하려면 시스템 다이얼로그로 명시적 허용을 받아야 합니다.
영향:
- 허용 거부 비율이 높으면 IDFA (광고 식별자) 가 사용 불가.
- 광고 효율 측정 (컨버전 추적) 이 약화 → SKAdNetwork 같은 집계 모델로 보강.
Info.plist에NSUserTrackingUsageDescription문자열 필수.
<key>NSUserTrackingUsageDescription</key>
<string>광고 개인화에 사용됩니다.</string>
import AppTrackingTransparency
ATTrackingManager.requestTrackingAuthorization { status in /* ... */ }
Android 도 비슷한 방향으로 움직였습니다. Privacy Sandbox for Android 가 광고 ID 와 추적을 점진적으로 대체하는 작업입니다.
8. Tauri 모바일 시작
# Android
pnpm tauri android init
pnpm tauri android dev
# iOS (macOS)
pnpm tauri ios init
pnpm tauri ios dev
Tauri 명령에서 광고 호출:
#[tauri::command]
async fn show_rewarded(app: tauri::AppHandle) -> Result<bool, String> {
// 플러그인 또는 자체 JNI/objc 코드로 SDK 호출
// Android: GMS Ads -> RewardedAd.load -> show
// iOS: GADRewardedAd -> load -> present
Ok(true)
}
9. 정책 체크리스트
- 사용자 동의 (EU GDPR · UMP SDK).
- 가족 정책 (13 세 미만 대상은 별도 규정).
- 광고 클릭 유도 금지 (자체 클릭 · 보상 미끼).
10. 자주 걸리는 자리
에뮬레이터에서 광고 안 뜨는 문제 — 광고 ID · SDK 초기화 · 인터넷 권한 · 테스트 디바이스 등록을 한 번에 점검합니다. AdMob 이 "no fill" 을 자주 반환할 수 있습니다.
INTERNET 권한 누락 — AndroidManifest 에 명시합니다. 네트워크 보안 정책 (networkSecurityConfig) 이 광고 도메인을 차단할 수도 있습니다.
iOS Privacy Manifest (2024+) — Apple 이 요구하는 PrivacyInfo.xcprivacy 가 없으면 심사 거부. AdMob SDK 가 일부 자동 제공하지만 앱 측 작성이 필요한 항목이 따로 있습니다.
테스트 ID 를 잊고 출시 — 출시 전 환경별 ID 분리 (debug 와 release 의 strings.xml 분리 등) 가 안전합니다.
Tauri 플러그인 부재 — 광고 SDK 가 매 메이저 업데이트마다 API 가 바뀝니다. 커뮤니티 플러그인이 최신 SDK 를 따라가지 못할 수 있습니다.
ATT 다이얼로그 재요청 불가 — 한 번 거부하면 같은 다이얼로그가 다시 뜨지 않습니다. 설정 → 앱 → 추적 항목으로 안내해야 합니다.
하고픈 말
모바일 앱의 수익화는 광고가 가장 단순한 길입니다. 다만 정책 (테스트 ID · ATT · Privacy Manifest) 을 놓치면 계정 정지 또는 심사 거부로 이어집니다. 사용자 동의·UX 와 광고 빈도 사이의 균형이 운영의 핵심 결정입니다.
Next
- sqlite-local
- ocr-stt-tts
Tauri 2 문서 · Tauri Mobile 블로그 · Google AdMob · GMS SDK Android · GMS SDK iOS · Apple ATT · Apple Privacy Manifest · Privacy Sandbox for Android · Android App Bundle 을 참고합니다.