admobをアプリに導入するのに二日かかりました・・・。(未だにわからない)
本当に辛かった。
とりあえず、今後同じミスが起きた時に対処できるように、まとめておきます。
目次
✅【AdMob導入失敗の原因と解決法まとめ】
種類 | 問題内容 | 原因 | 解決方法 |
---|---|---|---|
🧱 ビルド失敗 | adaptive-icon.png がない | app.json の "android.adaptiveIcon" に画像パス指定 → ファイルが存在しない | assets/adaptive-icon.png を追加(1024×1024 PNG) |
⚠ ライブラリ競合 | Kotlinバージョン不一致 | react-native-google-mobile-ads@15.0.0 が Kotlin 2.1.0 使用、Expoは1.9.0 | 14.7.0 にバージョンを下げる(互換性あり) |
💥 実機クラッシュ | アプリ起動直後に落ちる | app.json に meta-data + plugins 両方記述 → AdMob App ID 二重設定 | meta-data を削除し、plugins だけにAdMob IDを記述 |
🧨 SDK未初期化 | AdMobの初期化コードを忘れていた | mobileAds().initialize() を未記述 | App.js で useEffect 内に initialize() を1回だけ書く |
📉 広告表示失敗 | インタースティシャル広告が出ない | interstitial.load() 忘れ/初期化が間に合ってない | 起動時に読み込む+interstitial.loaded でチェックしてからshow() |
❌ テスト時の混乱 | Expo Goで広告が表示されない | Expo Goではネイティブ機能非対応(仕様) | expo-dev-client や .apk で実機テスト |
🔁【次回のチェックリスト(保存版)】
🔧 AdMob設定まわり
app.json
にplugins
だけで AdMob App ID を指定しているか?android.meta-data
の設定が 残っていないか確認したか?expo-ads-admob
を 使っていないか?(使うのはreact-native-google-mobile-ads
)- AdMobのアプリIDと広告ユニットIDがテスト用であることを確認
🧠 初期化コード
import mobileAds from 'react-native-google-mobile-ads';
useEffect(() => {
mobileAds().initialize();
}, []);
- 上記コードが
App.js
に入っているか? - 依存配列は空(
[]
)で1回だけ実行するようになっているか?
📱 実機テスト前
interstitial.load()
を起動時に実行しているか?interstitial.loaded
を確認してから.show()
しているか?adb logcat
でInvalid application ID
が出ていないか?
📦 ビルド時の注意点
expo start --clear
もしくはeas build --clear-cache
を使用したか?adaptive-icon.png
が/assets
に存在しているか(PNG形式、1024×1024)?.apk
を実機にインストールして、起動確認&広告表示まで確認済みか?
🎯 結論:未来の自分へ
- 「ビルドが通っても油断するな、アプリはクラッシュする」
- 「設定は1つミスっただけで地獄を見る。特にAdMob」
- 「ChatGPTに頼るときも、公式ドキュメントと自分の目で最終確認を」
- 「困ったらまずは
adb logcat
。雰囲気じゃなくて証拠を掴め」
コメント