無料でアプリを公開して広告を貼りましょう。定番はGoogleがやっている AdMob です。アプリの人気がでればそれなりにマネタイズになります。
API 29
AdMob Banner
このAdMob広告の設定は、Google Mobile Ads SDKを使った方法です。
Firebaseを使うAdMob設定とは異なりますので注意してください。
Google的にはFirebaseに移行したいのでしょうけれど、まだSDKの方法でないと支障がでるケースを考えて残してあると考えられます。
基本的にはAndroid Admob ガイドに沿って進めますが時々情報が古いこともあったりします。
また、ここでの実装はxmlファイルにIDを書くやり方と、コードで記述する方法について試してみます。
1. play-services を設定
2. meta-data, ネットワーク権限設定
3. レイアウトファイルにAdView、AdUnit の記述
4. AdView と AdRequest の記述
5. レイアウトファイル無しでコードのみ
6. アプリ ID と広告ユニット ID
play-services-ads を設定
「build.gradle (Module: app)」ファイルの編集
dependencies に以下をを追加
com.google.android.gms:play-services-ads
(バージョンは随時更新されます)
build.gradle(Module: )
1 2 3 4 5 |
... dependencies { ... implementation 'com.google.android.gms:play-services-ads:18.3.0' } |
meta-data, ネットワーク権限などを設定
アプリの 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から取得した正式なものを使います
Activityの記述
com.google.android.gms.ads クラスのインポート
AdView と AdRequest の記述
やり方としてレイアウトをどうするかによってxml ファイルで調整するか、java コードで書くケースがあります。こちらでは前者のタイプでやってみます。
またリスナーを設定して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 54 55 56 |
package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import com.google.android.gms.ads.AdListener; 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()"); // Test App ID MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713"); AdView adView = findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest); // ad's lifecycle: loading, opening, closing, and so on adView.setAdListener(new AdListener() { @Override public void onAdLoaded() { Log.d("debug","Code to be executed when an ad finishes loading."); } @Override public void onAdFailedToLoad(int errorCode) { Log.d("debug","Code to be executed when an ad request fails."); } @Override public void onAdOpened() { Log.d("debug","Code to be executed when an ad opens an overlay that covers the screen."); } @Override public void onAdLeftApplication() { Log.d("debug","Code to be executed when the user has left the app."); } @Override public void onAdClosed() { Log.d("debug","Code to be executed when 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 |
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; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String AdUnitID = "ca-app-pub-3940256099942544/6300978111"; // 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, "ca-app-pub-3940256099942544~3347511713"); // AdMob インスタンス生成 AdView adMobView = new AdView(this); adMobView.setAdUnitId(AdUnitID); adMobView.setAdSize(AdSize.BANNER); // AdMobをレイアウトに追加 layout.addView(adMobView); // AdMobのレイアウト属性を設定 adMobView.setLayoutParams(params); // AdMobをロードして表示 AdRequest adRequest = new AdRequest.Builder().build(); adMobView.loadAd(adRequest); } } |
ここではテスト用IDを使っています。
アプリ 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です。
AdMob広告はFirebaseを使う方法もあります
関連ページ:
- FirebaseでのAdMob広告の実装 (Firebase)
- AdMob banner 広告を Android Studio で設定 (Google Mobile Ads SDK)
- AdMob 表示、非表示の切り替え
- インタースティシャルの設置
- Interstitial広告をクラスにまとめる
- AdMob サイズをPublisherAdViewを使って動的に変える
References:
Android向けMobile Ads SDK
AdMob に申し込む