Help us understand the problem. What is going on with this article?

AndroidでAdMobの初期化時にクラッシュする

More than 1 year has passed since last update.

はじめに

前回の記事で大見得を切ったからには年末年始中に何か一つアプリを作ろうとしてハマったのでメモを残しておきます。

概要

下記の環境で発生した事象をまとめています。
・ Android Studio 3.2.1
・ Kotlin 1.3.10
・ firebase-ads: 17.1.2

やったこと

https://firebase.google.com/docs/admob/android/quick-start?hl=ja の手順に従って下記を実行。

app/build.gradle

依存関係を追加し、促されるままにアップデート

// implementation 'com.google.firebase:firebase-ads:16.0.1' ←アップデート前

implementation 'com.google.firebase:firebase-ads:17.1.2'

Application.kt

SDKの初期化

Application.kt
MobileAds.initialize(this, ADMOB_APP_ID)

しかしビルドしようとすると下記のエラーメッセージを吐いて落ちる

2019-01-01 17:15:30.332 30306-30306/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.masaibar.sample, PID: 30306
    java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException: 

    ******************************************************************************
    * The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers    *
    * should follow the instructions here: https://goo.gl/fQ2neu to add a valid  *
    * App ID inside the AndroidManifest. Google Ad Manager publishers should     *
    * follow instructions here: https://goo.gl/h17b6x.                           *
    ******************************************************************************


        at android.app.ActivityThread.installProvider(ActivityThread.java:6445)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5987)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5902)
        at android.app.ActivityThread.access$1100(ActivityThread.java:200)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6718)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.IllegalStateException: 

対処方法

とりあえずエラーメッセージ記載のURLに従ってAndroidManifest.xmlにmeta-dataを追加したら解決しました。
よく見るとFirebaseのAdMobとはそもそもページが違い、よく読んでみるとAdMobを使いたい人のうちFirebaseは使わない人向けとなっているけど大丈夫なんだろうか…

https://developers.google.com/admob/android/quick-start#update_your_androidmanifestxml

AndroidManifest.xml
<manifest>
    <application>
           :
          (中略)
           :
           <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ADMOB_APP_ID"/>

    </application>
</manifest>

とか思ってたら英語版のドキュメントにはバッチリ書いてありました。
image.png

おわりに

Googleのお家芸である日本語版マニュアル最新版になっていない案件でした、これに懲りて英語版で見る癖つけていきましょう💪

masaibar
globis
グロービスは 1992 年の創業以来、社会人を対象とした MBA、人材育成の領域で Ed-Tech サービスを提供し、現在は日本 No.1 の実績があります。これらの資産と、さらに IT や AI を活用することで、アジア No.1 を目指しています。
http://www.globis.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした