無料でアプリを公開して広告を貼りましょう。定番は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. AdView と AdRequest の記述
5. レイアウトファイル無しでコードのみ
6. アプリ ID と広告ユニット ID
play-services-ads を設定
「build.gradle (Module: app)」ファイルの編集
dependencies に play-services-ads を追加
com.google.android.gms:play-services-ads.x.x.x
(バージョンは随時更新されます)
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 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: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.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//package your.package.name import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.RelativeLayout import com.google.android.gms.ads.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Test App ID MobileAds.initialize( this ) val adView = findViewById(R.id.adView) val adRequest = AdRequest.Builder().build() adView.loadAd(adRequest) } } |
これで実行してみると
広告がボトムに表示されました。
コードのみで実装
動的な表示、あるいはまとめてコントロールしたい場合などにおいてxmlファイルでの記述は使いにくいので、コードで記述してみます。Manifestやbuild.gradleは同じです。
MainActivity.kt
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 |
//package your.package.name import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.RelativeLayout import com.google.android.gms.ads.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val AdUnitID = "ca-app-pub-3940256099942544/6300978111" // Relative layout インスタンス生成 val layout = RelativeLayout(this) setContentView(layout) // 背景 お好みで //layout.setBackgroundResource(R.drawable.img) // AdMob用のLayout parameterを設定 val params = RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT ) // 画面の底に位置させるようにALIGN_PARENT_BOTTOMを設定 params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE) MobileAds.initialize( this ) // AdMob インスタンス生成 val adMobView = AdView(this) adMobView.setAdUnitId(AdUnitID) adMobView.setAdSize(AdSize.BANNER) // AdMobをレイアウトに追加 layout.addView(adMobView) // AdMobのレイアウト属性を設定 adMobView.setLayoutParams(params) // AdMobをロードして表示 val adRequest = AdRequest.Builder().build() adMobView.loadAd(adRequest) } } |
ここではテスト用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です。
広告が表示されない場合は、
References:
Android向けMobile Ads SDK
AdMob に申し込む