Google Playにアプリを公開しようとして、審査でリジェクトされた経験はありませんか?
私はこれまで複数のアプリをGoogle Playに公開してきましたが、何度もリジェクトを経験しました。この記事では、その経験から学んだ「審査を通すコツ」を共有します。
審査でリジェクトされる主な理由
私が経験した、または見聞きしたリジェクト理由をまとめます。
| 理由 | 頻度 | 対処難易度 |
|---|---|---|
| プライバシーポリシーの問題 | ★★★ | 低 |
| データセーフティの不備 | ★★★ | 中 |
| 広告関連のポリシー違反 | ★★☆ | 中 |
| メタデータの問題 | ★★☆ | 低 |
| 機能の不具合・クラッシュ | ★☆☆ | 高 |
順番に解説していきます。
1. プライバシーポリシーは必須
「うちのアプリはデータ収集してないから不要」は間違い
よくある誤解ですが、広告SDKを使っているだけでプライバシーポリシーが必要です。
AdMobを導入している場合、あなたのアプリは間接的にユーザーデータを収集しています。これを明記したプライバシーポリシーがないと、審査で弾かれます。
プライバシーポリシーに含めるべき内容
1. 収集するデータの種類
- 広告ID
- 端末情報
- 使用状況データ など
2. データの利用目的
- 広告の表示
- アプリの改善 など
3. 第三者への共有
- Google AdMob
- Firebase Analytics など
4. ユーザーの権利
- データ削除の方法
- オプトアウトの方法
5. 連絡先
- メールアドレス
プライバシーポリシーの設置場所
プライバシーポリシーは2箇所に設置が必要です:
- Google Play Console → ストアの設定 → プライバシーポリシーURL
- アプリ内 → 設定画面などからアクセスできるように
アプリ内に設置を忘れがちなので注意してください。
2. データセーフティフォームを正確に
2022年から必須になったデータセーフティセクション。これが最もリジェクトされやすいポイントです。
正確に申告するコツ
AdMobを使っている場合
以下のデータを「収集」として申告する必要があります:
| カテゴリ | データ種類 | 共有先 |
|---|---|---|
| デバイスまたはその他のID | 広告ID | Google(広告目的) |
| アプリのアクティビティ | ページビュー | 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審査で重要なのは:
- プライバシーポリシーを正しく設置する
- データセーフティを正確に申告する
- 広告の配置ルールを守る
- 品質基準を満たす
特にデータセーフティは、使用しているSDKをすべて把握し、それぞれが何を収集しているかを正確に申告することが大切です。
面倒に感じるかもしれませんが、これらはユーザーの信頼を得るためにも重要なことです。一度仕組みを理解すれば、次からはスムーズに審査を通せるようになります。
皆さんのアプリが無事に審査を通過することを祈っています!
質問やコメントがあれば、お気軽にどうぞ。

