AdMobユーザー指標が0表示になっているので改善する

2022年7月31日

開発環境
OS:Windows 10
SDK:Android Studio Chipmunk | 2021.2.1

概要

Firebase連携アプリのAdMobユーザー指標が0表示になってしまったのでFirebase Analyticsに対応した、という話です。

AdMobのユーザー指標が0になっているのだが。。。

無料の投稿型コミュニケーションツール、みてみて

このアプリは投稿機能をFirebaseで実現し、収入源としてAdMobを組み込んでいます。

アプリリリース当初はAdMobのユーザー指標にアクティブな値が表示されていた、

と思っていたのですが、改めて確認すると0表示になっていました。

(AdMobアカウントとFirebaseアカウントを連携させたから?それとも記憶違い?

ユーザー指標が知りたい

今後、アプリの収益化を目指すにあたりユーザー指標が知りたい。

ということで0表示の改善を試みます。

AdMob設定の変更

まずはAdMobの設定を変更します。

Admobの「設定」の「リンクされたサービス」で当該アプリ(みてみて)のFirebaseをオンにします。

改めてユーザー指標を確認すると。

0表示のままですね。。。

Firebase Analyticsを組み込む

つぎにアプリの修正を行います。

ステップ1)Gradle(アプリ)にfirebase-analyticsを追加します。

dependencies {
  ・・・
    implementation platform('com.google.firebase:firebase-bom:28.4.1')
    implementation 'com.google.firebase:firebase-database-ktx'
    implementation 'com.google.firebase:firebase-storage-ktx'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.1.0'
    implementation 'com.google.android.gms:play-services-ads:21.1.0'
  ・・・
}

kotlinの場合は、’com.google.firebase:firebase-analytics-ktx:21.1.0’です。

ステップ2)firebase-analyticsの初期化を行う。

import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics

class MainActivity : AppCompatActivity() {
    private lateinit var firebaseAnalytics: FirebaseAnalytics

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        FirebaseApp.initializeApp(this)
        MobileAds.initialize(this){}
        firebaseAnalytics = Firebase.analytics

        ・・・
    }
}

変数 firebaseAnalytics を追加します。

そして、MainActivityで初期化(firebaseAnalytics = Firebase.analytics)すればOKです。

アプリ「みてみて」ではFirebase、AdMobの初期化と合わせて、firebaseAnalyticsの初期化を行いました。

初期化しますがfirebaseAnalyticsは使用しません。

(firebaseAnalyticsを使ってユニークなログ、データを出力することもできるようです。

あとはリリースするだけです。

修正アプリをリリースした結果

ユーザー指標が表示されるようになりました。

ファミリーポリシー違反がやって来たヤァ!ヤァ!ヤァ!

概要

神経衰弱を題材にしたミニゲーム”サイキック・パワー”、
このアプリは対象年齢を0歳以上(全ユーザー対象)としており、ファミリーポリシーの遵守が必須です。

ですが、アプリに連携させているAdmobがファミリーポリシー違反をやらかしたそうで。。。

唐突にファミリーポリシー違反通知がメールに送られてきました。

内容としては、アプリがファミリーポリシーに違反しており、Google Playからアプリを削除したとのこと。

このアプリでのポリシー違反指摘は初めてです。

ですが、過去にも何度かファミリーポリシー違反となったことはあります。

その度にAdmobのイニシャル処理とリクエスト処理を改善したり、Admob設定を変更したりと対応してきました。

そして、ファミリーポリシーに則る必要のあるアプリ全てに水平展開もしてきたのですが。

(ファミリーポリシーを遵守するためのAdmobコーディングについてはこちらの記事。)

(ファミリーポリシーを遵守するためのAdmob設定についてはこちらの記事。)

それでは今回の理由は何なのか?

Admobの配信設定を見直す

ファミリーポリシー違反の理由がこちらでした。

審査結果通知

ファミリーポリシー違反の理由は2点。

1つ目は、広告のフォーマット違反。
広告表示から5秒後に広告を閉じることができなかった、とのこと。

2つ目は、広告のコンテンツ違反。
Admobから配信されている広告に子供にふさわしくないコンテンツが含まれていた、とのこと。

そこで配信設定の見直しを行います。

まず1つ目は5秒ルールの遵守。

アプリにはインタースティシャル広告、バナー広告を設置しているのですが、インタースティシャル広告と5秒ルールの相性が悪そうでした。

そこでインタースティシャル広告の配信から動画を削除しました。

そして、2つ目は広告のコンテンツ違反です。

メールに添付されていた違反広告の画像を見るとギャンブル系のゲーム広告のようです。

そこでブロックのコントロール設定を変更することにしました。

Google Admob コンソール

まずはGoogle Admobコンソールを表示して広告配信を制御したいアプリを選びます。
そして、メニューの「ブロックのコントロール」を選択。

Google Admob コンソール

次に一般カテゴリを選択し、ふさわしくないと思われる「レジャー/ギャンブル」の配信をブロックしました。

あとは、再審査を促すため、バージョンのみを変更したアプリを再リリース。

再審査の結果、合格となりました。

しばらくは様子見となりそうです。

ファミリーポリシーを遵守するためのAdmob設定

概要

ヒットアンドブローを題材にしたミニゲーム”サムライロード”、
このアプリは対象年齢を10歳以上としており、ファミリーポリシーの遵守が必須です。

そのため、Admobのイニシャル処理とリクエスト処理に子供向け設定を入れていたのですが、アプリの更新審査のタイミングでファミリーポリシー違反となりました。
(ファミリーポリシーを遵守するためのAdmobコーディングについてはこちらの記事。)

なぜ?

Admobの配信カテゴリを設定する

アプリの更新審査に落ちた理由がこちらです。

審査結果通知

Admobから配信されている広告に子供にふさわしくないコンテンツが含まれていた、とのこと。

テレビ、動画、音楽、その他情報配信系の広告を表示するとファミリーポリシー違反となるようです。

そこで、Admob側の設定を変更することにしました。

Google Admob コンソール

まずはGoogle Admobコンソールを表示して広告配信を制御したいアプリを選びます。
そして、メニューの「ブロックのコントロール」を選択。

Google Admob コンソール

次に一般カテゴリを選択し、ふさわしくないと指摘されたテレビ、動画、音楽の配信をブロックしました。

あとは、再審査を促すため、バージョンのみを変更したアプリを再リリース。

再審査の結果、合格となりました。

ファミリーポリシーを遵守するためのAdMobコーディング

概要

Google Playでアプリをリリースする際に設定するアプリの対象年齢(ターゲットユーザー)。

今回はアプリの対象年齢に13歳未満を含める場合に必要となるAdMobのコーディングについて記事にしました。

AdMobに子供向け広告をリクエストする

GooglePlayで設定するアプリの対象年齢は以下のように分かれています。

No対象年齢ファミリー向けプログラム
15歳以下必須
26~8歳必須
39~12歳必須
413~15歳任意
516~17歳任意
618歳以上任意
ターゲットユーザー設定

ターゲットユーザーの設定としては13歳以上か、13歳未満かが大きな分岐点となります。

なぜなら13歳未満をターゲットに含める場合は

ファミリーポリシーを遵守するために子供向けの広告を表示することが求められるからです。

では、子供向けの広告を表示するにはどうすればよいのか?

Admobのヘルプを調べると下記のコードが示されていました。

Bundle extras = new Bundle();
extras.putString("max_ad_content_rating", "G");
AdRequest request = new AdRequest.Builder()
 .addNetworkExtrasBundle(AdMobAdapter.class, extras)
 .tagForChildDirectedTreatment(true) .build();

ただし、これを実際にコーディングしようとしても

tagForChildDirectedTreatmentメソッドが見つかりません

どうしたものかとネット検索してみた結果、タグ指定はイニシャル処理にあわせて実行するのがよさそうだという結論に至りました。

通常のAdMobイニシャル処理

MobileAds.initialize(this)

子供向けのAdMobイニシャル処理

val requestConfiguration = MobileAds.getRequestConfiguration().toBuilder()
    .setTagForChildDirectedTreatment(TAG_FOR_CHILD_DIRECTED_TREATMENT_TRUE)
    .setMaxAdContentRating(MAX_AD_CONTENT_RATING_G)
    .build()
MobileAds.setRequestConfiguration(requestConfiguration)
MobileAds.initialize(this)

子供向けに実装する場合は、イニシャル処理の前に子供向けタグとレーティングGを設定します。

また、AdMob表示のための広告リクエストでもレーティングGを設定しておきます。

通常のバナー広告リクエストと表示処理

val adView : AdView = findViewById(R.id.adView)
val adRequest = AdRequest.Builder().build()
adView.loadAd(adRequest)

子供向けのバナー広告リクエストと表示処理

val adView : AdView = findViewById(R.id.adView)
val extras = Bundle()
extras.putString("max_ad_content_rating", "G")
val adRequest = AdRequest.Builder().addNetworkExtrasBundle(AdMobAdapter::class.java, extras).build()
adView.loadAd(adRequest)

通常のリクエストにレーティング設定を追加すればOKです。

Admobから配信されるカテゴリを制御する方法は以下の記事を参照ください。