GoogleではFirebaseを使って詳細な解析ができるAdMobサービスを提供しています。今までのsdkを使った方法も残ってはいますが、GoogleはFirebase仕様をpushしているようです。尚、今までの設定方法は こちら です。
2021.1.1
Firebase AdMob
FirebaseはBaaSと言われるようなもので、アプリのバックエンド機能を提供するクラウドサービスでAdMobはその一つのサービスです。今までのSDKよりもより細かな情報を収集し分析できます。SDKベースのAdMobはまだ残ってはいます。
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
1. Firebase consoleでの登録
2. google-services.jsonをAndroid Studioに設定
3. Android Studioのコード記述
4. 実機での広告テスト
5. 広告が表示されない
6. アプリ ID と広告ユニット ID
Firebase console
にてプロジェクトを登録します。
登録の過程でアプリの pckage name (例:com.example.testadmob)を設定するところがあるので事前に決めておきましょう。
新規プロジェクトを作成するか、既存プロジェクトに追加します。
 
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
適当に新規プロジェクト名を決め国を設定
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
Androidを選択
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
package nameを登録して「アプリを登録」をクリック、他は省略できます。
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
「google-services.jsonをダウンロード」をクリックするとファイルがダウロードされます。
設定場所などが説明されています。(後述します)
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
build.gradleへの設定が説明されています。
これは2021.1.1では設定エラーとなる部分があり、それは他のファイルで別設定となっているようなので不要です。(後でまとめます)
 
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
これでFirebase consoleでの設定は終わりです
「4:アプリを実行してインストールを確認」が残っています。これはアプリがサーバーと通信したかどうかを確認するものですからAdMobが設定されていないのであればここで止めておきます。後で再開しますのでそのまま…
google-services.jsonの設定
こちらAndroid Studio スタートガイドを参考に進めます。
先ほどのgoogle-services.jsonを設定するために、Android Studio の [プロジェクト] 表示に切り替え、プロジェクトのルート ディレクトリを表示します。
 
ダウンロードした google-services.json ファイルを Android アプリ モジュールのルート ディレクトリに移動します。
 
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
 
appの下にgoogle-services.jsonをコピペします。
 
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
 
Gradle 用の Google サービス プラグインは、ダウンロードした google-services.json ファイルを読み込みます。このプラグインを使用するよう、build.gradle ファイルを修正します。
  
build.gradleで(Module: app)と表示されている方に以下の記述を追加します。バージョンは適宜合わせてください。
 
build.gradle(Module: app)
| 1 2 3 4 5 6 7 8 | ... dependencies {     ...     implementation 'com.google.android.gms:play-services-ads:20.6.0'     implementation platform('com.google.firebase:firebase-bom:29.3.1')     implementation 'com.google.firebase:firebase-analytics'     ... } | 
コードの記述
AndroidManifest.xml, MainActitity.java, activity_main.xml
にそれぞれ設定を記述していきます。
ca-app-pub-3940256099942544~3347511713
はテスト用のAPPLICAION IDです。
 
AndroidManifest.xml
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     ...     <application         ...         android:theme="@style/AppThene">         <meta-data             android:name="com.google.android.gms.ads.APPLICATION_ID"             android:value="ca-app-pub-3940256099942544~3347511713"/>         <activity android:name=".MainActivity">            ...         </activity>     </application> </manifest> | 
 
adUnitId:(広告ユニットID)
adUnitIdを設定します。ここではテスト用として
ca-app-pub-3940256099942544/6300978111
を使っています。
activity_main.xml
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     xmlns:ads="http://schemas.android.com/apk/res-auto"     android:id="@+id/activity_main"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context=".MainActivity">     <!-- 画像はお好みで     <ImageView         android:src="@drawable/sample_image"         android:scaleType="centerCrop"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:contentDescription="@string/description"/>     -->     <com.google.android.gms.ads.AdView         android:id="@+id/adView"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_centerHorizontal="true"         android:layout_alignParentBottom="true"         ads:adSize="BANNER"         ads:adUnitId="ca-app-pub-3940256099942544/6300978111">     </com.google.android.gms.ads.AdView> </RelativeLayout> | 
 
画像を追加した場合
strings.xml
| 1 2 3 4 | <resources>     <string name="app_name">YourAppName</string>     <string name="description">Yuka</string> </resources> | 
 
アプリID:
ca-app-pub-3940256099942544~3347511713
はテスト用ですが、自分の広告を出すときはAdMobで設定されている「アプリID」を入れます。
アプリIDはAdMobでのアプリ設定情報にあります。
MainActivity.java
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | //package your.project.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; import com.google.android.gms.ads.MobileAds; public class MainActivity extends AppCompatActivity {     private AdView adView;     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         MobileAds.initialize(this,                 initializationStatus -> {         });         adView = findViewById(R.id.adView);         AdRequest adRequest = new AdRequest.Builder().build();         adView.loadAd(adRequest);     }     /** Called when leaving the activity */     @Override     public void onPause() {         if (adView != null) {             adView.pause();         }         super.onPause();     }     /** Called when returning to the activity */     @Override     public void onResume() {         super.onResume();         if (adView != null) {             adView.resume();         }     }     /** Called before the activity is destroyed */     @Override     public void onDestroy() {         if (adView != null) {             adView.destroy();         }         super.onDestroy();     } } | 
これでAdMob広告が表示されます。「Test Ad」が付いた広告が表示されました。
 
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
実機での広告テスト
によるとリリース前に広告のテストをするために、実機をテストデバイスとして登録して確認する事ができるようです。また、Emulatorは自動的にテストデバイスと認識されます。
 
今までのコードで実機で起動させると
 
| 1 2 3 | I/Ads: Use RequestConfiguration.Builder().setTestDeviceIds( Arrays.asList("C285E94291062F237DDEF46A2EDC90F8"))  to get test ads on this device. | 
 
のようなtest device IDがLogcatに表示されるので、これを設定します。
 
| 1 2 3 4 | MobileAds.setRequestConfiguration(new RequestConfiguration .Builder() .setTestDeviceIds(Collections.singletonList("C285E942910EDC962F237DDEF46A20F8")) .build()); | 
次に、アプリIDとadUnitIdをテスト用のIDから
各自のそれぞれのIDに変更します
これで実際のAdMobのIDに変えてテストすると「Test Ad」となっています。
 
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
テストモードを使わずに多くの広告をクリックすると、無効なアクティビティとしてアカウントが警告を受ける恐れがあります。
自分の広告を自分でクリックし確認したい気持ちは分かりますが、こういったリスクがあることを知っておきましょう
広告が表示されない
広告が表示されないケースとして考えられることは、
- アプリIDと広告ユニットIDが間違っている
- インターステーシャル広告のIDなのにバナー用IDを使っている
- 「推奨:AdMob アカウントを作成して、アプリを登録していること」と
 スタートガイド – Google AdMobにはあります。
- 初めての広告ではアクティブになるには時間がかかる
- 数時間〜2日くらい
 
- AdMobの支払いの設定が完了していない。
- 支払いを受け取る銀行口座をGoogleに登録して、確認をとる必要があります。お互いに(Googleにしても)そこそこ面倒
 
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
アプリ ID と広告ユニット ID
~~~ 以下内容が古いかもしれません ~~~
AdMobに登録が済んでいない場合は申し込みをします。
AdMob に申し込む
 
アプリ IDは、AdMob にアプリを追加すると割り当てられる一意の ID 番号でアプリの識別に使用されます。
 
アプリ ID の確認:
サイドバーで該当する [アプリ] をクリック
再びサイドバーで「アプリの設定」アイコンをクリック
ca-app-pub-9999999999999~99999999 のように「〜」が間にあるIDです。
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif)
広告ユニット ID は、AdMob で作成される各広告ユニットに割り当てられる一意の ID 番号で、バナー広告、インターステーシャル広告などアプリ内の広告を識別するためのものです。
広告ユニット ID の確認
サイドバーで [アプリ] をクリックします。
再びサイドバーで「広告ユニット」のアイコンをクリックすると広告ユニットのIDの一覧が表示されます。
ca-app-pub-9999999999999/99999999 のように「/」があるIDです。
![[Android] FirebaseでのAdMob広告の実装 1x1.trans - [Android] FirebaseでのAdMob広告の実装](https://akira-watson.com/wp-content/themes/simplicity2/images/1x1.trans.gif) 
 
 
関連ページ:
- FirebaseでのAdMob広告の実装 (Firebase)
- AdMob banner 広告を Android Studio で設定 (Google Mobile Ads SDK)
- AdMob 表示、非表示の切り替え
- インタースティシャルの設置
- Interstitial広告をクラスにまとめる
- AdMob サイズをPublisherAdViewを使って動的に変える
References:
Firebase と AdMob の使用 | Firebase
AdMob | Firebase – Google
Firebase console
Android Studio スタートガイド
Enable test devices
