[GooglePlay]ファミリーポリシー違反でアプリ削除の宣告が来たときの対応


概要

GooglePlayからアプリ削除の宣告が来た時に対応したこと・分かったことをまとめます。
これはUnity製アプリであった話ですが、
・Android 13(API 33)以上向けにビルドしている
・アプリの対象年齢に13歳未満を含んでいる(ファミリーポリシーの対象になる)
・「識別子の送信」で引っ掛かった

というときも同様の対応が出来ると思います(Unityや広告SDK由来の部分は、お使いのツールに適宜読み替えてください)。

結論のみ述べますと
・広告SDKが追加した広告ID関連のパーミッションを削除する必要があった
・↑の変更に伴い広告IDの申告を修正したほうが良さそうだった
・ポリシー違反の審査は通常のアプリ提出時の審査とは違うタイミングで行われているので、アプリを更新してもすぐには解除されないっぽい

いつものようにググって調べたのですが完全一致のパターンは見つからなかったので、寄せ集めページとなっています。

宣告はこのように来る

2024年2月17日、GooglePlayからこんなメッセージが届きました。

「あなたのアプリを1ヶ月後にストアから削除します!理由はもちろんお分かりですね?あなたのアプリがファミリーポリシー要件に違反しているからです!」

実際に送られてきた通知

1月にGDPR対応で追加したコード周りを疑ったのですが、
結果的にそれではなかった……?と思われます。
ただ、疑わしかったり今後引っ掛かったりするかもしれないと考えて、そぎ落としたり変更したりした箇所もおまけで載せておきます。

パーミッションはこのように見る

見方はいろいろあるようですが、GooglePlayで引っ掛かっている箇所を知るには
GooglePlayConsoleにアップしたAppBundleの権限を確認する
のが一番手っ取り早いようです。

[過去にアップ/アーカイブ済みのAppBundleを確認する]
GooglePlayConsole で 当該アプリのページを開き
AppBundleエクスプローラに入ります

AppBundleエクスプローラ
AppBundleエクスプローラの中

確認したいバージョンの右の「→」を押したら「詳細」の「権限」をオープン

バージョン29331073の「詳細」
「権限」の中にパーミッションの詳細が

ここにあるパーミッションはいずれも手動で追加した覚えがない、広告SDKの中で宣言済みのものです。
(以前は手動で追加する必要がありましたが、最近のGoogleMobileAdsなどでは最初から宣言済みのようです)
識別子を送信するなということで、ファミリーポリシーで引っ掛かっているのは
・android.permission.ACCESS_ADSERVICES_AD_ID
・com.google.android.gms.permission.AD_ID

の2件かと思われますが、広告に絡んでそうなので
・android.permission.ACCESS_ADSERVICES_ATTRIBUTION
・android.permission.ACCESS_ADSERVICES_TOPICS
も外しておくことにしました。
(これら以外のパーミッションも全部外したビルドを作ってみましたが、実機で起動しなくなってしまいました)

パーミッションはこのように外す

要はAndroidManifest.xmlの中のパーミッションを消せればいいのですが、広告SDKなどの中で宣言されているものは場所が分からなくて手が出せない……
Unityの場合は Custom Main Manifest をオンにして作ったAndroidManifest.xml内に設定を書き足してパーミッションを除去できます。
(※Unity以外の場合は、お使いのツールそれぞれのメインマニフェストの扱いをご確認ください。)

[Custom Main Manifest をオンにする]
Unity内のProject Settingsを開き、
PlayerPublishing Settings内のBuildを探したら
Custom Main Manifest をオンにします。

Custom Main Manifest にチェックを入れるだけ

既にオンなら、Assets\Plugins\Android\AndroidManifest.xml内に設定を書き足すだけです。

[AndroidManifest.xml内に設定を書き足す]
多少の違いはあるかもしれませんが、中身はこのような感じです。

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector"
                  android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>

        
    </application>
</manifest>

<application>の前(<manifest>と</manifest>の間)にパーミッションを書き足します(今回は4行書き足しました)。
このパーミッションは除去用です。

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.ACCESS_ADSERVICES_AD_ID" tools:node="remove"/>
    <uses-permission android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION" tools:node="remove"/>
    <uses-permission android:name="android.permission.ACCESS_ADSERVICES_TOPICS" tools:node="remove"/>
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
    <application>
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector"
                  android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>

        
    </application>
</manifest>

パーミッションを除去する宣言の書き方です。
消したいパーミッションの末尾に tools:node="remove"をつけると除去が出来ます。

<uses-permission android:name="ここに除去したいパーミッションの名前" tools:node="remove"/>

これをビルドし、GooglePlayConsoleにアップして権限を確認するとこのようになります。

少なくなったパーミッション

パーミッションを外すことが出来ました。

広告IDの申告はこのように直す

そのまま新しいビルドで審査に出そうとすると、途中で
「このアプリには広告IDのパーミッションが無いけど広告ID使うって申告してるよね? 何か変わった? 変わったなら申告も直して?」と言われてしまったので直します。
と言ってもチェックの「はい」を「いいえ」に変えるだけ。

対応前の広告ID申告のページ

アプリ削除の警告が剥がれるまで

その後アプリの審査は通って更新されたものの、依然としてアプリ削除の警告が剥がれないので、異議申し立てをしてみました。
するとその日のうちにお返事が届き、問題が無くなっていることを確認できました。

アプリを更新しても警告はすぐに剥がれないらしい

このメールが2月22日。
GooglePlayConsoleでポリシー違反解決のメッセージが来て、警告が無くなったのは2月24日なので、
アプリの更新で既に問題が解決していても2,3日は反映されなさそうです。
それを過ぎても消えなかったら、まだ解決していないか審査がされていないのか判断が付かないので異議申し立てしても良いのではないでしょうか?

おまけ:疑いがあり修正した箇所

前述のとおりポリシー違反解決の反映にはラグがあるため、直接関わったかは不明ですが、削除したり書き換えたり設定を見直したりしたところです。

①デバッグ用のコードを削除
主にGDPR対応とそのテストのために、
端末のIDを取得するSystemInfo.deviceUniqueIdentifier
ユーザーを未成年ではないことにするTagForUnderAgeOfConsent = false
端末がヨーロッパにあることにするコードなどを乗せていたのですが
どれかが引っ掛かったのかも?と考えて削除しました。
(デバッグ用のコードが審査対象になるかはちょっと不明ですが)

②RequestConfigurationのタグ設定
.SetTagForChildDirectedTreatment(TagForChildDirectedTreatment.True)
だったところを
.SetTagForUnderAgeOfConsent(TagForUnderAgeOfConsent.True)
に置き換えました。前者はCOPPA対応、後者はGDPR対応だそうです。
(二種類の共存はできないもよう)

MobileAds.Initializeの前に宣言しています

③GoogleAdmobの「広告コンテンツの評価」
アカウント単位の設定が13歳以上向けで、それに倣う設定になっていたので
アプリ個別のブロックをファミリー向けラインに変更しました。
(既にスクリプトの方でRating.G指定してるので変動は無さそうですが)

この管理画面が後から出来たのか、見落としていたのか……?


この記事が気に入ったらサポートをしてみませんか?