GoogleではFirebaseを使って詳細な解析ができるAdMobサービスを提供しています。今までのsdkを使った方法も残ってはいますが、GoogleはFirebase仕様をpushしているようです。尚、今までの設定方法は こちら です。
Android 9.0
Firebase AdMob
FirebaseはBaaSと言われるようなもので、アプリのバックエンド機能を提供するクラウドサービスでAdMobはそのほんの一つのサービスでしかありません。今までのSDKよりもより細かな情報を収集し分析できます。SDKベースのAdMobはまだ残ってはいます。今のところ、
1.Firebase consoleでの登録
2.google-services.jsonをAndroid Studioに設定
3.Android Studioのコード記述
4.アプリ ID と広告ユニット ID
5.実機での広告テスト
6.広告が表示されない
Firebase console
Firebase consoleにてプロジェクトを登録します。登録の過程でアプリのpckage nameを設定するところがあるので事前に決めておきましょう。
新規プロジェクトを作成するか、既存プロジェクトに追加します。
新規プロジェクト名と国名を設定
Androidを選択
とりあえずpackage nameを登録
google-services.jsonをダウンロード。
設定方法が説明されています。(後述します)
build.gradleへの設定が説明されています。(後述します)
これでFirebase consoleでの設定は終わりですが「4:アプリを実行してインストールを確認」が残っています。これはアプリがサーバーと通信したかどうかを確認するものですからAdMobが設定されていないのであればここで止めておきます。後で再開しますのでそのまま…
google-services.jsonの設定
こちらAndroid Studio スタートガイドを参考に進めます。
先ほどのgoogle-services.jsonを設定するために、Android Studio の [プロジェクト] 表示に切り替え、プロジェクトのルート ディレクトリを表示します。
ダウンロードした google-services.json ファイルを Android アプリ モジュールのルート ディレクトリに移動します。
appの下にgoogle-services.jsonをコピペします。
Gradle 用の Google サービス プラグインは、ダウンロードした google-services.json ファイルを読み込みます。このプラグインを使用するよう、build.gradle ファイルを修正します。
build.gradle(Project: xxx)に
classpath ‘com.google.gms:google-services:x.x.x’
を追加します。versionは適宜合わせてください。
build.gradle(Project: xxx)
1 2 3 4 5 6 7 8 9 10 |
buildscript { repositories { jcenter() } dependencies { ... classpath 'com.google.gms:google-services:4.0.1' ... } } |
build.gradle(Module: app)に
com.google.firebase:firebase-ads:17.0.0
apply plugin: ‘com.google.gms.google-services’
を追加します。
Firebaseの設定では
com.google.firebase:firebase-core
となっていて、さらにSyncでもcoreにしろというメッセージが出ますが、それを使うとエラーになります。
(2018/10/29, そのうち変わる可能性もあります)
またバージョンも最新は17.0.0ですが、これにする場合はManifestにApp IDの設定が必要になったようです。
これ以下のバージョンはこれまで通りのようですが、そうするとAPIバージョンとの整合が取れないかもしれません
build.gradle(Module: app)
1 2 3 4 5 6 7 |
apply plugin: 'com.android.application' ... dependencies { ... implementation 'com.google.firebase:firebase-ads:17.0.0' } apply plugin: 'com.google.gms.google-services' |
コードの記述
AndroidManifest.xml, MainActitity.java, activity_main.xml
にそれぞれ設定を記述していきます。
AndroidManifest.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... <application ... <!-- TODO: Replace with your real AdMob app ID --> <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 |
<?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="com.example.testadmobfirebase.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="SMART_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">TestAdMobFirebase</string> <string name="description">yukata girl</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 |
import android.support.v7.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 { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MobileAds.initialize(getApplicationContext(),"ca-app-pub-3940256099942544~3347511713"); AdView mAdView = findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest); } } |
これでAdMob広告が表示されます。
これで、Firebaseの途中で止めていた4番目でインストールの確認ができます。
アプリ ID と広告ユニット ID
AdMobに登録が済んでいない場合は申し込みをします。
AdMob に申し込む
アプリ IDは、AdMob にアプリを追加すると割り当てられる一意の ID 番号でアプリの識別に使用されます。
アプリ ID の確認:
https://apps.admob.com から AdMob アカウントにログイン
サイドバーで該当する [アプリ] をクリック
再びサイドバーで「アプリの設定」アイコンをクリック
ca-app-pub-9999999999999~99999999 のように「〜」が間にあるIDです。
広告ユニット ID は、AdMob で作成される各広告ユニットに割り当てられる一意の ID 番号で、バナー広告、インターステーシャル広告などアプリ内の広告を識別するためのものです。
広告ユニット ID の確認
https://apps.admob.com から AdMob アカウントにログイン
サイドバーで [アプリ] をクリックします。
再びサイドバーで「広告ユニット」のアイコンをクリックすると広告ユニットのIDの一覧が表示されます。
ca-app-pub-9999999999999/99999999 のように「/」があるIDです。
実機での広告テスト
Enable test devicesによるとリリース前に広告のテストをするために、実機をテストデバイスとして登録して確認する事ができるようです。また、Emulatorは自動的にテストデバイスと認識されます。
今までのコードで実機で起動させると
1 |
I/Ads: Use AdRequest.Builder.addTestDevice("33BE2250B43518CCDA7DE426D04EE231") to get test ads on this device. |
のようなtest device IDがLogcatに表示されるので、これをAdRequestに設定します。
1 2 3 |
AdRequest adRequest = new AdRequest.Builder() .addTestDevice("33BE2250B43518CCDA7DE426D04EE231") // An example device ID .build(); |
これで実際のAdMobのIDに変えてテストすると「Test Ad」となっています。
広告が表示されない
広告が表示されないケースとして考えられることは、
- アプリIDと広告ユニットIDが間違っている
- インターステーシャル広告のIDなのにバナー用IDを使っている
- 初めての広告ではアクティブになるには時間がかかる
- 数時間〜2日くらい
- AdMobの支払いの設定が完了していない。
- 支払いを受け取る銀行口座をGoogleに登録して、確認をとる必要があります。お互いに(Googleにしても)そこそこ面倒
関連ページ:
- 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