【2026年版】Google Play審査を通すコツ|個人開発者が学んだリジェクト回避術

開発
Screenshot

Google Playにアプリを公開しようとして、審査でリジェクトされた経験はありませんか?

私はこれまで複数のアプリをGoogle Playに公開してきましたが、何度もリジェクトを経験しました。この記事では、その経験から学んだ「審査を通すコツ」を共有します。

審査でリジェクトされる主な理由

私が経験した、または見聞きしたリジェクト理由をまとめます。

理由頻度対処難易度
プライバシーポリシーの問題★★★
データセーフティの不備★★★
広告関連のポリシー違反★★☆
メタデータの問題★★☆
機能の不具合・クラッシュ★☆☆

順番に解説していきます。

1. プライバシーポリシーは必須

「うちのアプリはデータ収集してないから不要」は間違い

よくある誤解ですが、広告SDKを使っているだけでプライバシーポリシーが必要です。

AdMobを導入している場合、あなたのアプリは間接的にユーザーデータを収集しています。これを明記したプライバシーポリシーがないと、審査で弾かれます。

プライバシーポリシーに含めるべき内容

1. 収集するデータの種類
   - 広告ID
   - 端末情報
   - 使用状況データ など

2. データの利用目的
   - 広告の表示
   - アプリの改善 など

3. 第三者への共有
   - Google AdMob
   - Firebase Analytics など

4. ユーザーの権利
   - データ削除の方法
   - オプトアウトの方法

5. 連絡先
   - メールアドレス

プライバシーポリシーの設置場所

プライバシーポリシーは2箇所に設置が必要です:

  1. Google Play Console → ストアの設定 → プライバシーポリシーURL
  2. アプリ内 → 設定画面などからアクセスできるように

アプリ内に設置を忘れがちなので注意してください。

2. データセーフティフォームを正確に

2022年から必須になったデータセーフティセクション。これが最もリジェクトされやすいポイントです。

正確に申告するコツ

AdMobを使っている場合

以下のデータを「収集」として申告する必要があります:

カテゴリデータ種類共有先
デバイスまたはその他のID広告IDGoogle(広告目的)
アプリのアクティビティページビューGoogle(分析目的)

Firebase Analyticsを使っている場合

追加で以下も申告:

カテゴリデータ種類
アプリのアクティビティアプリ内の操作
アプリ情報、パフォーマンスクラッシュログ

「収集」と「共有」の違い

ここが混乱しやすいポイントです。

  • 収集: アプリがデータをサーバーに送信している
  • 共有: そのデータを第三者に渡している

AdMobの場合、広告IDはGoogleのサーバーに送信され、広告主にも渡される可能性があるため、「収集」かつ「共有」になります。

自分のアプリが何を収集しているか確認する方法

// build.gradleの依存関係を確認
dependencies {
    implementation 'com.google.android.gms:play-services-ads:...'  // AdMob
    implementation 'com.google.firebase:firebase-analytics:...'    // Analytics
    implementation 'com.google.firebase:firebase-crashlytics:...' // Crashlytics
}

使っているSDKのドキュメントで、収集されるデータを確認しましょう。

3. 広告関連のポリシー

広告の配置ルール

以下の配置はポリシー違反になります:

❌ やってはいけない配置

- ボタンのすぐ横に広告を置く(誤タップ誘導)
- 画面遷移直後にインタースティシャル広告
- コンテンツと見分けがつかない広告
- 閉じるボタンが見えにくい広告

子供向けアプリの注意点

ファミリーポリシーに準拠する必要がある場合、パーソナライズ広告は使用不可です。

// 子供向けアプリの場合
val requestConfiguration = MobileAds.getRequestConfiguration()
    .toBuilder()
    .setTagForChildDirectedTreatment(
        RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_TRUE
    )
    .build()
MobileAds.setRequestConfiguration(requestConfiguration)

4. メタデータでリジェクトされるケース

アプリ名・説明文のNG例

❌ NG例

- "最高の○○アプリ" → 根拠のない最上級表現
- "公式" → 公式でないのに使用
- 他社の商標を無断使用
- キーワードの羅列

スクリーンショットのNG例

❌ NG例

- 端末のモックアップに他社ロゴが入っている
- 実際のアプリと異なる画面
- 誤解を招く機能の説明

5. アプリの品質基準

クラッシュ率に注意

Google Playはクラッシュ率を監視しています。リリース前に以下をチェック:

// 基本的なクラッシュ対策
try {
    // 危険な処理
} catch (e: Exception) {
    // 適切にハンドリング
    Log.e(TAG, "Error occurred", e)
}

// Null安全
val result = someNullableValue?.let { 
    processValue(it) 
} ?: defaultValue

ANR(Application Not Responding)対策

メインスレッドをブロックする処理は避けましょう:

// ❌ NG: メインスレッドでの重い処理
fun loadData() {
    val data = heavyOperation()  // UIがフリーズする
}

// ✅ OK: コルーチンで非同期処理
fun loadData() {
    viewModelScope.launch {
        val data = withContext(Dispatchers.IO) {
            heavyOperation()
        }
        // UIを更新
    }
}

審査前チェックリスト

リリース前に確認すべき項目をまとめました:

プライバシー関連

  • [ ] プライバシーポリシーページを作成した
  • [ ] Google Play Consoleにプライバシーポリシーを設定した
  • [ ] アプリ内からプライバシーポリシーにアクセスできる
  • [ ] データセーフティフォームを正確に記入した
  • [ ] 使用しているSDKの収集データを確認した

広告関連

  • [ ] 広告がボタンの近くに配置されていない
  • [ ] インタースティシャル広告のタイミングが適切
  • [ ] 子供向けの場合、ファミリーポリシーに準拠している

メタデータ関連

  • [ ] アプリ名に誇大表現がない
  • [ ] 説明文にキーワードの羅列がない
  • [ ] スクリーンショットが実際のアプリと一致している
  • [ ] 他社の商標を無断使用していない

品質関連

  • [ ] 複数の端末でテストした
  • [ ] クラッシュしないことを確認した
  • [ ] ANRが発生しないことを確認した
  • [ ] Firebase Crashlyticsを導入した

リジェクトされたときの対処法

1. メールをよく読む

リジェクトメールには具体的な理由が書かれています。機械翻訳でもいいので、しっかり読みましょう。

2. ポリシーセンターを確認

Google Play Consoleの「ポリシーセンター」に、より詳細な情報が載っていることがあります。

3. 修正して再申請

修正したら、変更点を明確にして再申請します。同じ理由で何度もリジェクトされると、アカウントに悪影響があるので注意。

4. 異議申し立て

明らかに誤審の場合は、異議申し立てができます。ただし、実際に通ることは稀なので、まずは修正を検討しましょう。

まとめ

Google Play審査で重要なのは:

  1. プライバシーポリシーを正しく設置する
  2. データセーフティを正確に申告する
  3. 広告の配置ルールを守る
  4. 品質基準を満たす

特にデータセーフティは、使用しているSDKをすべて把握し、それぞれが何を収集しているかを正確に申告することが大切です。

面倒に感じるかもしれませんが、これらはユーザーの信頼を得るためにも重要なことです。一度仕組みを理解すれば、次からはスムーズに審査を通せるようになります。

皆さんのアプリが無事に審査を通過することを祈っています!


質問やコメントがあれば、お気軽にどうぞ。

タイトルとURLをコピーしました