前言
對獨立開發者來說,App 廣告收入往往是最主要的收入來源之一。但很多開發者(包含以前的我)對廣告的態度就是「放上去就好了」,沒有花時間去優化。經過一年多的摸索和測試,我的廣告收入成長了不少。這篇文章就來分享我實際用過的優化策略。
理解廣告收入的基本公式
在開始優化之前,先理解廣告收入是怎麼計算的:
廣告收入 = 曝光次數 × eCPM ÷ 1000
- 曝光次數:廣告被展示的次數,跟 DAU 和廣告觸發頻率有關
- eCPM(effective Cost Per Mille):每千次曝光的收入,跟廣告格式、使用者區域和廣告品質有關
所以要提高收入,不外乎兩個方向:增加曝光次數,或提高 eCPM。
策略一:選擇正確的廣告格式
AdMob 提供的廣告格式各有特色,eCPM 差異也很大:
橫幅廣告(Banner)
- eCPM:最低(通常 $0.1 - $1.0)
- 使用者干擾程度:低
- 適合場景:遊戲主畫面底部、列表頁面
橫幅廣告的 eCPM 最低,但因為一直顯示在畫面上,累積的曝光次數最多。適合作為基礎收入來源。
// Flutter 中使用 AdMob Banner 的基本設定
final BannerAd bannerAd = BannerAd(
adUnitId: 'ca-app-pub-XXXXX/XXXXX',
size: AdSize.banner,
request: const AdRequest(),
listener: BannerAdListener(
onAdLoaded: (ad) => setState(() => _isBannerLoaded = true),
onAdFailedToLoad: (ad, error) {
ad.dispose();
print('Banner 載入失敗: $error');
},
),
);
插頁廣告(Interstitial)
- eCPM:中等(通常 $2 - $10)
- 使用者干擾程度:高
- 適合場景:遊戲關卡結束時、功能切換時
插頁廣告的 eCPM 較高,但使用不當會嚴重影響使用者體驗。絕對不要在使用者操作途中突然彈出插頁廣告。
// 預先載入插頁廣告
void _loadInterstitialAd() {
InterstitialAd.load(
adUnitId: 'ca-app-pub-XXXXX/XXXXX',
request: const AdRequest(),
adLoadCallback: InterstitialAdLoadCallback(
onAdLoaded: (ad) => _interstitialAd = ad,
onAdFailedToLoad: (error) => print('插頁廣告載入失敗: $error'),
),
);
}
// 在適當時機顯示(例如關卡結束)
void _showInterstitialAd() {
if (_interstitialAd != null) {
_interstitialAd!.show();
_interstitialAd = null;
_loadInterstitialAd(); // 預載下一個
}
}
獎勵廣告(Rewarded)
- eCPM:最高(通常 $10 - $30+)
- 使用者干擾程度:低(因為是使用者主動觀看)
- 適合場景:獲得遊戲道具、解鎖功能、額外生命
獎勵廣告是獨立開發者的最佳選擇。使用者主動選擇觀看,觀看完成後獲得獎勵,雙方都開心。
我的經驗是,一個設計得當的獎勵廣告觸發點,收入可能比十個橫幅廣告還多。
我的廣告格式組合
對於兒童遊戲 App,我目前的做法是:
- 主畫面底部:自適應橫幅廣告
- 關卡結束:每 3 關顯示一次插頁廣告
- 額外道具/生命:獎勵廣告(使用者自願觀看)
策略二:優化廣告版位與時機
放對位置和選對時機比單純增加廣告數量更有效。
關鍵原則
- 自然斷點插入廣告:在使用者的操作流程中找到自然的暫停點。例如遊戲關卡結束、完成一個任務、切換頁面等。
- 不要打斷使用者:使用者正在閱讀、操作或遊戲中途時插入廣告是最糟糕的體驗。
- 控制頻率:插頁廣告不應該每次都出現,設定合理的間隔(例如每 3-5 分鐘或每 N 個操作一次)。
頻率控制的實作
class AdFrequencyManager {
static const int _interstitialInterval = 3; // 每 3 次觸發點顯示一次
int _triggerCount = 0;
DateTime? _lastInterstitialTime;
static const Duration _minInterval = Duration(minutes: 2);
bool shouldShowInterstitial() {
_triggerCount++;
// 檢查次數間隔
if (_triggerCount % _interstitialInterval != 0) return false;
// 檢查時間間隔
if (_lastInterstitialTime != null) {
final elapsed = DateTime.now().difference(_lastInterstitialTime!);
if (elapsed < _minInterval) return false;
}
_lastInterstitialTime = DateTime.now();
return true;
}
}
策略三:廣告中介(Mediation)
廣告中介是提高 eCPM 的最有效策略之一。簡單來說,就是讓多個廣告網路競爭你的廣告版位,出價最高的得標。
AdMob Mediation 的運作方式
- 你在 AdMob 後台設定多個廣告來源(例如 Unity Ads、AppLovin、Meta Audience Network)
- 每次要顯示廣告時,AdMob 會讓這些廣告來源競標
- 出價最高的廣告被顯示
設定步驟
- 在 AdMob 後台進入「中介」設定
- 建立中介群組
- 新增廣告來源(需要在各平台註冊帳號)
- 在 App 中整合對應的 SDK
我使用的中介平台
- Google AdMob:主要平台,填充率最高
- Unity Ads:遊戲類 App 的 eCPM 通常很好
- AppLovin:整體表現穩定
開啟中介後,我的平均 eCPM 提升了大約 20-40%。提升幅度跟你的 App 類型和使用者分布有關。
策略四:使用者體驗優先
這聽起來可能跟「優化廣告收入」矛盾,但長期來看,好的使用者體驗才是最大化廣告收入的關鍵。
為什麼使用者體驗這麼重要?
- 使用者留存率高 → DAU 高 → 廣告曝光次數多
- 使用者在 App 中停留時間長 → 更多廣告展示機會
- 使用者評價好 → 自然下載量增加 → 更多使用者
我的經驗教訓
我曾經為了短期收入,在一個遊戲 App 中把插頁廣告頻率調得很高(每局結束都顯示)。結果:
- 短期內日收入確實增加了約 30%
- 但接下來兩週,DAU 下降了 40%
- 使用者評價從 4.2 掉到 3.5
- 最終月收入反而比優化前還低
後來我把頻率降低到每 3 局一次,並在中間加入了獎勵廣告的觸發點。結果使用者留存率回升,整體收入也恢復成長。
兒童 App 的特別考量
如果你的 App 目標使用者包含兒童(像我的 Happy Balloon Pop),需要特別注意:
- COPPA 合規:必須設定
tagForChildDirectedTreatment - 廣告內容限制:確保廣告內容適合兒童觀看
- 互動限制:避免讓兒童誤觸廣告
final AdRequest childSafeRequest = AdRequest(
extras: {
'tag_for_child_directed_treatment': 'true',
'max_ad_content_rating': 'G',
},
);
策略五:數據驅動的持續優化
追蹤關鍵指標
每天觀察這些指標:
- eCPM:每千次曝光收入
- 填充率(Fill Rate):廣告請求成功填充的比例
- 展示率(Impression Rate):廣告載入後實際被使用者看到的比例
- 點擊率(CTR):使用者點擊廣告的比例
A/B 測試
對於廣告版位和頻率的調整,我建議採用 A/B 測試的方式。可以用 Firebase Remote Config 來控制:
// 用 Remote Config 控制廣告頻率
final remoteConfig = FirebaseRemoteConfig.instance;
final interstitialInterval = remoteConfig.getInt('interstitial_interval');
這樣你可以對一部分使用者測試新的廣告策略,確認效果後再全面推行。
實際收入數據分享
以一個 DAU 約 500 的兒童遊戲 App 為例,我的大致收入分布:
| 廣告格式 | 日均曝光 | 平均 eCPM | 日均收入 |
|---|---|---|---|
| 橫幅 | ~2,000 | $0.5 | $1.0 |
| 插頁 | ~150 | $5.0 | $0.75 |
| 獎勵 | ~80 | $15.0 | $1.2 |
| 合計 | ~$2.95 |
數字不大,但對獨立開發者來說,如果你有多個 App,收入是可以累積的。
結語
廣告收入優化不是一次性的工作,而是需要持續觀察和調整的過程。最重要的幾個原則:
- 獎勵廣告是最好的朋友:eCPM 高,使用者體驗好
- 控制插頁廣告頻率:短期衝收入會犧牲長期使用者留存
- 開啟廣告中介:讓多個廣告網路競價,自動提高 eCPM
- 使用者體驗優先:留存率才是廣告收入的根本
- 數據驅動決策:不要憑感覺,用 A/B 測試驗證假設
記住,每多一個使用者留下來持續使用你的 App,就是多了一份持續的廣告收入。把心思花在做好產品上,廣告收入自然會跟著成長。