今月のみてみて(2024年12月)

Firebase連携アプリ、みてみてエストーク伊勢125社巡り

このうち、みてみてにフォーカスを当て、Firebaseのアクセス動向やアプリの改善を考察する開発記事です。

Firebase
Realtime Database+Storage構成の投稿アプリ

まずはアプリのユーザー数の変動とともにFirebaseのアクセス動向を確認します。

2024年12月1日~2024年12月31日のユーザー数の変動

(ユーザー数の変動)

ユーザー数変動

約8ヶ月ぶりのデータ解析。

ここにきて新規ユーザー獲得数に若干の伸び。

累計インストール数は3000突破。

(インストールの上位国)

東南アジアのトレンドが終わって中東エリアで伸び。

2024年12月31日直近のFirebaseの変動

(Firebaseの変動)

直近のfirebaseの動き
1ヶ月のfirebase使用量

大きな動きはなし。

Cloud Strageが増えず、Realtime Databaseに動きがあるので、投稿がユーザーに受けているわけじゃなく、ユーザー間メッセージに需要がある感じ。

安定の無料枠です。

2024年12月1日~2024年12月31日のAdMob

今月はAdMob広告収入:52円、 Firebase使用料:0円となりました。

今月のみてみて

(今月の投稿ピックアップ)

久しぶりにアウトレット行きました。

今後の改善案

(未消化の課題)

・投稿の編集機能追加

・写真を複数投稿可能にする

・手持ち画像も投稿できるようにする

・UIブラッシュアップ

・チャット機能強化

・フレンドグループ化と共有機能の追加

・ビジュアル強化

・アプリ名変更

ポリシー違反「サイトの仕様:ナビゲーション」を解決した話

2024年4月10日

開発環境
OS:Windows 11
SDK:Android Studio Flamingo | 2022.2.1

概要

ポリシー違反「サイトの仕様:ナビゲーション」がなかなか解決せず、解決まで1ヶ月半かかった話。

最初の警告メールの指摘はアプリのクラッシュ

2月29日、ポリシー違反「サイトの仕様:ナビゲーション」の警告メールが届きました。

指摘を受けたアプリは「WatchOverMe」。

早速、AdMobコンソールのポリシーセンターを確認します。

指摘されたポリシー違反は、「サイトの仕様:ナビゲーション」。

添付されていた画像を確認するとアプリがクラッシュした画面のスクリーンショットでした。

「サイトの仕様:ナビゲーション」とはどんな違反なのか?

どうやら「ユーザーにとって有益ではないページを表示している」違反のようです。

添付画像から察するとアプリがクラッシュして使えないからポリシー違反ということか?

と、いうことで「正常に動作します。」という旨を記載し、再審査の申請をしました。

次の警告メールの指摘はマップ画面?

再審査の申請から2日後、またしても警告メールが届きました。

やはり違反内容は、「サイトの仕様:ナビゲーション」。

そして、添付されていた画像はマップ画面。

アプリはやっぱりクラッシュしなかったのか。。。

次の指摘は、アプリ起動後に表示されるマップ画面が真っ青だという指摘のようです。

これは現在地座標が取得できなくて(0,0)地点を表示しているためだと思われるため、

「アプリは位置情報の取得を許可して使います」という旨を記載し、再度、再審査を申請。

次の警告メールはアプリ起動時広告

再審査を申請した翌日、警告メールが届きました。

違反内容は変わらず、「サイトの仕様:ナビゲーション」。

そして、添付されていた画像はアプリ起動時広告。

えっ、アプリ起動時広告が指摘されるのか!?

AdMobの標準機能であるアプリ起動時広告が指摘されてしまいました。

そして、なんとGoogle Playからも広告表示に関するポリシー違反の指摘が届きました。

AdMobだけではなく、アプリ自体にポリシー違反が!?

まずはGooglePlayに対し、「広告表示にはAdMobの標準機能を使っている」という旨で異議申し立てを行います。

違反してました

異議申し立てから10日後、異議申し立て却下の通知がきました。

どういうことか?

改めてアプリ起動時広告のガイドラインを確認してみると下記の記載を発見。

思いっきり違反していました。

そこでアプリ起動時広告を削除してアプリを再リリースします。

まだ続くポリシー違反

GooglePlayのポリシー違反は解除されました。

が、AdMobのポリシー違反は相変わらず解除されません。

次はスプラッシュ画面を指摘されました。

スプラッシュ画面の表示を7秒→3秒に変更してアプリを再リリースします。

まだまだ続くポリシー違反

次はホーム画面を指摘されました。。。

位置情報の許可をしないと表示されないんだが。。。

対応する

ニッチもサッチも展開になってしまったので思い切って起動周りの処理を変えます。

プッシュ通知の表示でコールするstartForegroundの引数追加に対応できていませんでした。

最初の指摘はこれだったのか・・・

最終的に以下の改修を実施。

・対象年齢を8歳から13歳以上に引き上げ、ファミリー向けプログラムを回避

・それに伴い、アプリ起動時広告を再度、表示させるよう改修

・イニシャル画面を追加し、位置情報を許可させるよう改修(許可しない場合はアプリ強制終了)

・Android14対応(アプリクラッシュ回避)

そして、修正版アプリをリリース。

リリースが反映されたのを確認し、審査をリクエストします。

ポリシー違反解除

ついにようやくポリシー違反が解除されました。

上記について押させておく必要がありました。

今月のみてみて(2024年4月)

Firebase連携アプリ、みてみてエストーク伊勢125社巡り

このうち、みてみてにフォーカスを当て、Firebaseのアクセス動向やアプリの改善を考察する開発記事です。

Firebase
Realtime Database+Storage構成の投稿アプリ

まずはアプリのユーザー数の変動とともにFirebaseのアクセス動向を確認します。

2024年3月28日~2024年4月27日のユーザー数の変動

(ユーザー数の変動)

1ヶ月の新規獲得ユーザー数

約4ヶ月ぶりのデータ解析。

若干、獲得数、減少数ともに上がっているもののイン、アウトが拮抗しているため、あいかわらずインストール数が伸び悩んでいます。

(インストールの上位国)

フィリピン、インドネシアに頼っている状態も変わっていません。

エジプト、モロッコの動きは新しい。

2024年4月27日直近のFirebaseの変動

(Firebaseの変動)

直近のfirebaseの動き
1ヶ月のfirebase使用量

大きな動きはなし。

安定の無料枠です。

2024年3月28日~2024年4月27日のAdMob

今月はAdMob広告収入:16円、 Firebase使用料:0円となりました。

今月のみてみて

(今月の投稿ピックアップ)

激安中古家具店。
ほんとやすいから。

今後の改善案

(未消化の課題)

・投稿の編集機能追加

・写真を複数投稿可能にする

・手持ち画像も投稿できるようにする

・チャット機能強化

・アプリUIブラッシュアップの継続

・フレンドグループ化と共有機能の追加

・ビジュアルの強調

ポリシー違反「GooglePlayアプリの無効化」を解決した話とファミリー向けアプリの実装方法の訂正について

2024年2月27日

開発環境
OS:Windows 11
SDK:Android Studio Flamingo | 2022.2.1

概要

ポリシー違反「GooglePlayアプリの無効化」の警告メールが届きました。

対応から解決までの話。

ファミリー向けアプリのAdMob実装に潜む誤り

2月24日、GooglePlayから以下のメールが届きました。

位置情報共有アプリ「Watch Over Me」。

このアプリは親子の間で位置を共有することを意図したアプリとなっており、ユーザーの対象年齢は子供を含めた全年齢としています。

そこで必要となるのがファミリーポリシー対応です。

この点については抜かりなく実装し、以下のようなまとめ記事も作っていました。

ファミリーポリシー違反に対する指摘メールが届き、アプリが削除されてしまいました。

違反内容を詳しくみると「aaid」というAndroid特有のIDをアプリから送信してしまっているようです。

アプリの機能として「aaid」送信を実装していないのでAdMobが送信しているのは間違いありません。

子供向けのAdmob設定を行うと「aaid」の送信は抑制されるはずなのになぜ。。。

なんてことを思っていたら、Admobから広告配信中断予告が届きました。

AdMobコンソールから見た詳細が以下。

どうしたものか。。。

AdMob実装の誤りに気付く

ファミリーポリシー対応を実装していはずなのに「aaid」が送信されている。

ということは、子供向けのAdMob設定のコードに誤りがあるのか?

ネット検索してみたところ、UnityのAdMob設定に関するサイトで以下の記載が見つかりました。

ソースコードを修正する

initial処理前にこども向けのパラメータ設定を行う必要がありました。

ということでソースコードを修正します。

そして、アプリをリリース。

ポリシー違反解除

1日後、アプリがリリース審査が通り、アプリがストアに復帰しました。

そして、AdMobコンソールをチェックすると

ポリシー違反が解除されていました。

今回の修正に伴い、まとめ記事も修正しました。

GDPRメッセージをAndroidアプリに組み込む

2024年2月13日

開発環境
OS:Windows 11
SDK:Android Studio Flamingo | 2022.2.1

概要

AndroidアプリにGDPRメッセージを組み込みます。

AdMobに表示された警告

AdMobのコンソール画面を表示したところGDPRメッセージについて警告が表示されていました。

2024年1月14日からイギリス、または、欧州経済領域で広告を表示するには事前に広告表示に関する確認が必要になるようです。

GPDRメッセージとはその確認のための案内文であり、UMP SDKをアプリに組み込むとAdMobで作成したメッセージを表示してくるようです。

GDPRメッセージ作成の流れ

早速、実装していきます。

まずは、AdMobのコンソール画面に表示された「GPDRメッセージを作成」をタップします。

(メニュー「プライバシーとメッセージ」のGDPRから作成・編集することもできます。)

GDPRメッセージの作成フローが表示されます。

流れに沿って設定していけば滞りなく実装できます。

ステップ1.メッセージを作成する

まずはGDPRメッセージを作成します。

メッセージ自体はデフォルトのフォーマットがあるためそのまま使用します。

設定すべき項目としては、

「表示対象アプリ」、「言語」、「同意しないボタンの表示有無」ぐらいです。

私は、同意しないボタンを表示するパターンと表示しないパターンの2パターン作成し、

表示対象アプリをそれぞれのパターンに振り分けることにしました。

基本的には同意しないボタンを表示しないパターンを使用し、

こども向けゲームアプリだけ同意しないボタンを表示するパターンを使用することにしました。

ステップ2.UMP SDKを組み込む

メッセージの作成が終わったら、アプリにUMP SDKを組み込みます。

まずはbuilde.gradleの実装。

    implementation 'com.google.android.ump:user-messaging-platform:2.1.0'

次に必要なモジュールをインポートします。

import com.google.android.ump.ConsentForm
import com.google.android.ump.ConsentInformation
import com.google.android.ump.ConsentInformation.OnConsentInfoUpdateFailureListener
import com.google.android.ump.ConsentInformation.OnConsentInfoUpdateSuccessListener
import com.google.android.ump.ConsentRequestParameters
import com.google.android.ump.UserMessagingPlatform
import com.google.android.ump.ConsentDebugSettings
import java.util.concurrent.atomic.AtomicBoolean

あとは適当な場所にメッセージの呼び出し処理を追加します。

    private lateinit var consentInformation: ConsentInformation
    private var isMobileAdsInitializeCalled = AtomicBoolean(false)

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

        val params = ConsentRequestParameters
            .Builder()
            .setTagForUnderAgeOfConsent(false)
            .build()

        consentInformation = UserMessagingPlatform.getConsentInformation(this)
        consentInformation.requestConsentInfoUpdate(
            this,
            params,
            OnConsentInfoUpdateSuccessListener {
                UserMessagingPlatform.loadAndShowConsentFormIfRequired(
                    this@MainActivity,
                    ConsentForm.OnConsentFormDismissedListener {
                        // Consent has been gathered.
                        if (consentInformation.canRequestAds()) {
                            initializeMobileAdsSdk()
                        }
                    }
                )
            },
            OnConsentInfoUpdateFailureListener {

            })

        if (consentInformation.canRequestAds()) {
            initializeMobileAdsSdk()
        }
    }

最後にメッセージロード後の処理を追加して完了です。

    private fun initializeMobileAdsSdk() {
        if (isMobileAdsInitializeCalled.get()) {
            return
        }
        isMobileAdsInitializeCalled.set(true)

        MobileAds.initialize(this)
    }

ステップ3.デバッグする

最後に動作確認をします。

まずはデバッグ用のパラメータを追加します。

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

        val debugSettings = ConsentDebugSettings.Builder(this)
            .setDebugGeography(ConsentDebugSettings.DebugGeography.DEBUG_GEOGRAPHY_EEA)
            .addTestDeviceHashedId("46********************E1")←デバッグ機のデバイスID
            .build()

        val params = ConsentRequestParameters
            .Builder()
//            .setTagForUnderAgeOfConsent(false)
            .setConsentDebugSettings(debugSettings)
            .build()

        consentInformation = UserMessagingPlatform.getConsentInformation(this)
        consentInformation.requestConsentInfoUpdate(
            this,
            params,
     ~
    }

デバッグするには、デバッグ機のデバイスIDが必要になります。

アプリを起動するとログにデバイスIDが出力されます。

ログは「.addTestDeviceHash」で絞り込むと見やすいです。

アプリを起動させ、以下のような画面が表示されたら実装成功です。

もう1度確認したい場合は、

consentInformation.requestConsentInfoUpdateの前に以下を追加すると

同意を行った後もまた案内文が表示されるようになります。

        consentInformation.reset()

ここまで動作確認できれば、あとはリリースするだけです。

お疲れさまでした。

ポリシー違反「ユーザーの意図しないクリック:レイアウト」を解決した話

2024年2月12日

開発環境
OS:Windows 11
SDK:Android Studio Flamingo | 2022.2.1

概要

ポリシー違反「ユーザーの意図しないクリック:レイアウト」の警告メールが届きました。

対応から解決までの話。

警告メールが届いてから2日で広告配信停止

ポリシー違反「ユーザーの意図しないクリック:レイアウト」の警告メールが届きました。

指摘を受けたアプリは「サムズアップ」です。

あとで対応すればいいかとしばらく放置していた2月11日(日)。

広告配信停止通知がきてしまいました。

はやくないですか!?

3連休中ののんびりモードも一転。

慌てて指摘内容を確認します。

バナー広告のすぐ上にカウントボタンを配置しているのですが、

どうやらそれを指摘されているようです。

対応する

指摘内容を踏まえ、バナー広告の配置を下から上に変更。

これでバナー広告周辺にクリックするものはなくなりました。

あとは修正版アプリをリリース。

リリースが反映されたのを確認し、審査をリクエストします。

ポリシー違反解除

審査リクエストを出した17時間後、ポリシー違反が解除されました。

ポリシー違反「サイトの仕様:ナビゲーション」を解決した(?)話

2024年2月12日

開発環境
OS:Windows 11
SDK:Android Studio Flamingo | 2022.2.1

概要

ポリシー違反「サイトの仕様:ナビゲーション」の警告メールが届いたのですが

どうも腑に落ちません。

そんなときの対応から解決までの話。

意図した動作ではないものに対する指摘

ポリシー違反「サイトの仕様:ナビゲーション」の警告メールが届きました。

指摘を受けたアプリは「みてみて」です。

そして指摘内容が以下。

添付されていた画像は2枚。

2枚目の画像はアプリが反応していないエラー画面のようです。

そして、問題として挙げられた「サイトの仕様:ナビゲーション」について確認すると。

どうやらアプリの「START」をタップしたが、反応がなくエラーとなった。

コンテンツが存在しないのではないか。

そのような指摘に思われます。

ちょっと待て、と言ってみる

アプリの仕組みとしては、「START」をタップするとFirebaseから投稿データを取得し、

マップ画面を表示するのですが、ネットワークが悪いのか、Firebaseのアクセスが遅延したのか、

アプリがエラーとなったようです。

これは外部要因によるエラー。

アプリとしては対応いたしかねます。

そこで「審査をリクエスト」からアプリのコンテンツが用意されていることを訴え、異議申し立てをしてみました。

ポリシー違反解除

審査リクエストを出した9時間後、ポリシー違反が解除されました。

こういうこともあるんですね。

ポリシー違反「動的コンテンツについて」を解決した話

2024年1月7日

開発環境
OS:Windows 11
SDK:Android Studio Flamingo | 2022.2.1

概要

ポリシー違反「偶発的クリックを誘導するレイアウト – 予期しないタイミングでのインタースティシャル広告の表示」を解決した2日後のこと。

ポリシー違反「動的コンテンツについて」の警告メールが届きました。

ポリシー違反「偶発的クリックを誘導するレイアウト – 予期しないタイミングでのインタースティシャル広告の表示」を解決した話については以下を参照ください。

ポリシー違反は何度も届く

ポリシー違反を解決して安堵したのもつかのま、またしても警告メールが届きました。

指摘されたアプリは前回同様、「エストーク」、サーバーレスでも動くチャットアプリです。

前回のポリシー違反が解決できていなかったのか?

不安を胸にポリシーセンターを表示します。

検出された問題は、

「動的コンテンツについて」

添付画像はありません。

前回のポリシー違反ではなかったとのことでまずは一安心。

今回の指摘は分かりやすい内容です。

「動的コンテンツがメインとなっているページではGoogle広告を表示できない」とのこと。

前回のポリシー違反で整理したアプリ「エストーク」のインタースティシャル広告表示タイミングを見直すとフレンドリスト表示時、画像リスト表示時、チャット画面表示時の3か所です。

確かに動的コンテンツ(チャット)をメインとする画面でインタースティシャル広告を表示しています。

そこで指摘に従い、チャット画面表示時はインタースティシャル広告を表示しないよう改修しました。

ポリシー違反解除

審査リクエストを出した翌日、ポリシー違反が解除されました。

動的コンテンツがメインとなっているページではGoogle広告を表示できない。

勉強になりました。

ポリシー違反「偶発的クリックを誘導するレイアウト – 予期しないタイミングでのインタースティシャル広告の表示」を解決した話

2024年1月7日

開発環境
OS:Windows 11
SDK:Android Studio Flamingo | 2022.2.1

概要

ポリシー違反「偶発的クリックを誘導するレイアウト – 予期しないタイミングでのインタースティシャル広告の表示」の警告メールが届きました。

ポリシー違反の発生から解決までの顛末。

ポリシー違反は唐突に届く

またしても唐突にポリシー違反の警告メールが届きました。

今回指摘されたのはアプリ「エストーク」、サーバーレスでも動くチャットアプリです。

今回はどんな指摘なんでしょうか。

早速、ポリシーセンターを表示します。

検出された問題は、

「偶発的クリックを誘導するレイアウト – 予期しないタイミングでのインタースティシャル広告の表示」

そして、添付されていた画像は、

インタースティシャル広告が表示された画像でした。

問題とあわせて考察すると

偶発的クリックを誘発するタイミングでインタースティシャル広告を表示してますよ、という指摘のようです。

そこで改めてアプリ「エストーク」のインタースティシャル広告表示タイミングを見直すとフレンドリスト表示時、画像リスト表示時、チャット画面表示時の3か所でした。

画面を表示するタイミングで確率でインタースティシャル広告を表示しています。

ポリシー違反の指摘を踏まえると画面表示時にインタースティシャル広告を表示すると偶発的クリックを誘発する、ということのようです。

さて、どう改修するか。

表示タイミング自体は変えたくない。

でも、画面表示のタイミングで唐突にインタースティシャル広告を表示すると偶発的にクリックを誘発する。

そこでインタースティシャル広告を表示する前に「これから広告を表示します。」というポップアップを表示するように改修してみました。

ポリシー違反解除

審査リクエストを出した翌日。

ポリシー違反が解除されました。

画面表示直後にインタースティシャル広告を表示させる場合は

広告を表示する旨をポップアップ表示するなどワンクッション置いた方がよさそうです。

今月のみてみて(2023年12月)

Firebase連携アプリ、みてみてエストーク伊勢125社巡り

このうち、みてみてにフォーカスを当て、Firebaseのアクセス動向やアプリの改善を考察する開発記事です。

Realtime Database+Storage構成の投稿アプリ

まずはアプリのユーザー数の変動とともにFirebaseのアクセス動向を確認します。

2023年12月1日~2023年12月31日のユーザー数の変動

(ユーザー数の変動)

1ヶ月の新規獲得ユーザー数

アプリの起動処理を少し改善したもののユーザー数に変動なし。

(インストールの上位国)

今月もフィリピン、インドネシアがインストール率上位を維持。

パキスタン、マレーシアでも動きあり。

2023年12月31日直近のFirebaseの変動

(Firebaseの変動)

直近のfirebaseの動き
1ヶ月のfirebase使用量

大きな動きはなし。

2023年12月1日~2023年12月31日のAdMob

今月はAdMob広告収入:29円、 Firebase使用料:0円となりました。

今月のみてみて

(今月の投稿ピックアップ)

Happy New Year。

今後の改善案

(未消化の課題)

・投稿の編集機能追加

・写真を複数投稿可能にする

・手持ち画像も投稿できるようにする

・盛り上がってるトークの強調表示

・チャット機能強化

・アプリUIブラッシュアップの継続

・フレンドグループ化と共有機能の追加