無料でアプリを公開して広告を貼りましょう。定番はGoogleがやっている AdMob です。アプリの人気がでればそれなりにマネタイズになります。
2021.1.1
AdMob Banner
このAdMob広告の設定は、Google Mobile Ads SDKを使った方法です。
Firebaseを使うAdMob設定とは異なりますので注意してください。
Google的にはFirebaseに移行したいのでしょうけれど、まだSDKの方法でないと支障がでるケースを考えて残してあると考えられます。
基本的にはAndroid Admob ガイドに沿って進めますが時々情報が古いこともあったりします。(この記事が古い場合もありますが)
また、ここでの実装はxmlファイルにIDを書くやり方と、コードで記述する方法について試してみます。
1. play-services-ads を設定
2. meta-dataにApp IDを設定
3. レイアウトファイルにAdView、AdUnit の記述
4. Google Mobile Ads SDK を初期化
5. レイアウトファイル無しでコードのみ
6. 実機での広告テスト
7. アプリ ID と広告ユニット ID
play-services-ads を設定
「build.gradle (Module: app)」ファイルの編集
dependencies に play-services-ads を追加
com.google.android.gms:play-services-ads
(バージョンは随時更新されます)
build.gradle(Module: )
1 2 3 4 5 |
... dependencies { ... implementation 'com.google.android.gms:play-services-ads:20.6.0' } |
尚、Android Admob ガイドには以下の設定がありますが、古いAndroid Studioでの設定と思われ、2021.1.1ではこれを入れるとエラーになります
因みにgoogle(), MavenCentral()はsettings.gradleにそれらしきものが追加されていておそらく不要になったのだと思われます。
またバージョンの21から変更があるようなので臨機応変な対応が常に必要です
1 2 3 4 5 6 7 8 9 10 11 12 13 |
buildscript { repositories { google() mavenCentral() } } allprojects { repositories { google() mavenCentral() } } |
meta-dataにApp IDを設定
アプリの AndroidManifest.xml に meta-data タグを追加します。
ADMOB_APP_IDには
ここではテストのアプリIDを設定
ca-app-pub-3940256099942544~3347511713
リリースではあなたのアプリIDを設定します。
AndroidManifest.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... <application ... <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 --> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/> <activity android:name=".MainActivity"> ... </application> </manifest> |
レイアウトファイルにAdView、AdUnitId の記述
xmlns:adsの追加、RelativeLayoutなので
android:layout_alignParentBottom=”true”
にてBottomに設定します
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:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!-- 画像はお好みで <ImageView android:src="@drawable/img" android:scaleType="centerCrop" android:layout_width="wrap_content" android:layout_height="match_parent" 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> |
descriptonを指定しているので
strings.xml
1 2 3 4 |
<resources> <string name="app_name">YourAppName</string> <string name="description">Image</string> </resources> |
ちなみに
ca-app-pub-3940256099942544/6300978111
このadUnitId、広告ユニットIDはテスト用です。
com.google.android.gms.ads.xxx
は応答に時間がかかることがありエラーがしばらく続くことがあります。
本番では、UnitIDをAdMobから取得した正式なものを使います
Google Mobile Ads SDK を初期化
ActivityにGoogle Mobile Ads SDK を初期化する記述をします。
尚、これはlambda式で簡略化できます
1 2 3 4 5 |
MobileAds.initialize(this, new OnInitializationCompleteListener() { @Override public void onInitializationComplete(InitializationStatus initializationStatus) { } }); |
MobileAds.initialize() を呼び出して初期化
完了すると、完了リスナーがコールバックされます。この処理は 1 回だけ行います
AdView と AdRequest の記述
やり方としてレイアウトをどうするかによってxml ファイルで調整するか、java コードで書くケースがあります。こちらでは前者のタイプでやってみます。
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 |
//package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; 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); Log.d("debug","onCreate()"); MobileAds.initialize(this, initializationStatus -> { }); AdView adView = findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest); } } |
これで実行してみると
広告がボトムに表示されました。
尚、画像は付け足しなのでなくても問題ありません。
またリスナーを設定してAdMobのライフサイクルを確認できデバッグに役立ちます。
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 |
adView.setAdListener(new AdListener() { @Override public void onAdLoaded() { // Code to be executed when an ad finishes loading. } @Override public void onAdFailedToLoad(@NonNull LoadAdError adError) { // Code to be executed when an ad request fails. } @Override public void onAdOpened() { // Code to be executed when an ad opens an overlay that // covers the screen. } @Override public void onAdClicked() { // Code to be executed when the user clicks on an ad. } @Override public void onAdClosed() { // Code to be executed when the user is about to return // to the app after tapping on an ad. } }); |
コードのみで実装
動的な表示、あるいはまとめてコントロールしたい場合などにおいてxmlファイルでの記述は使いにくいので、コードで記述してみます。Manifestやbuild.gradleは同じです。
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 54 55 56 57 58 59 60 61 62 63 64 |
//package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.RelativeLayout; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdView; import com.google.android.gms.ads.MobileAds; //import com.google.android.gms.ads.RequestConfiguration; //import java.util.Collections; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String AdUnitID = "ca-app-pub-3940256099942544/6300978111"; // String AdUnitID = "ca-app-pub-3719908204531798/7594982064"; // Relative layout インスタンス生成 RelativeLayout layout = new RelativeLayout(this); setContentView(layout); // 背景 layout.setBackgroundResource(R.drawable.img); // AdMob用のLayout parameterを設定 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); // 画面の底に位置させるようにALIGN_PARENT_BOTTOMを設定 params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); // 初期化 MobileAds.initialize(this, initializationStatus -> { }); // AdMob インスタンス生成 AdView adMobView = new AdView(this); adMobView.setAdUnitId(AdUnitID); adMobView.setAdSize(AdSize.BANNER); // AdMobをレイアウトに追加 layout.addView(adMobView); // AdMobのレイアウト属性を設定 adMobView.setLayoutParams(params); // MobileAds.setRequestConfiguration( // new RequestConfiguration // .Builder() // .setTestDeviceIds(Collections.singletonList("DEF46A20F8C285E942910EDC962F237D")) // .build()); // AdMobをロードして表示 AdRequest adRequest = new AdRequest.Builder().build(); adMobView.loadAd(adRequest); } } |
ここではテスト用IDを使っています。
実機での広告テスト
によるとリリース前に広告のテストをするために、実機をテストデバイスとして登録して確認する事ができるようです。また、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 5 |
MobileAds.setRequestConfiguration( new RequestConfiguration.Builder() .setTestDeviceIds(Collections .singletonList("C285E94291062F237DDEF46A2EDC90F8")) .build()); |
次に、アプリIDとadUnitIdをテスト用のIDから
各自のそれぞれのIDに変更します
これで実際のAdMobのIDに変えてテストすると「Test Ad」となっていてテスト用IDを使った場合と同じですがバナー広告が違います。
テストモードを使わずに多くの広告をクリックすると、無効なアクティビティとしてアカウントが警告を受ける恐れがあります。
自分の広告を自分でクリックし確認したい気持ちは分かりますが、こういったリスクがあることを知っておきましょう
アプリ ID と広告ユニット ID
AdMobに登録が済んでいない場合は申し込みをします。
AdMob に申し込む
アプリ IDは、AdMob にアプリを追加すると割り当てられる一意の ID 番号でアプリの識別に使用されます。
アプリ ID の確認:
サイドバーで該当する [アプリ] をクリック
再びサイドバーで「アプリの設定」アイコンをクリック
ca-app-pub-9999999999999~99999999 のように「〜」が間にあるIDです。
広告ユニット ID は、AdMob で作成される各広告ユニットに割り当てられる一意の ID 番号で、バナー広告、インターステーシャル広告などアプリ内の広告を識別するためのものです。
広告ユニット ID の確認
サイドバーで [アプリ] をクリックします。
再びサイドバーで「広告ユニット」のアイコンをクリックすると広告ユニットのIDの一覧が表示されます。
ca-app-pub-9999999999999/99999999 のように「/」があるIDです。
AdMob広告はFirebaseを使う方法もあります
関連ページ:
- FirebaseでのAdMob広告の実装 (Firebase)
- AdMob banner 広告を Android Studio で設定 (Google Mobile Ads SDK)
- AdMob 表示、非表示の切り替え
- インタースティシャルの設置
- Interstitial広告をクラスにまとめる
- AdMob サイズをPublisherAdViewを使って動的に変える
References:
Android向けMobile Ads SDK
AdMob に申し込む