審査通過のためのヒント
Google Play と App Store の審査を通過するためのヒント
なぜこのガイドが必要ですか?
Unveily SDK は WebView ベースのハイブリッドアプリソリューションです。Google Play と Apple App Store は、審査時と異なる動作をするアプリを厳しく審査します。
良いニュースは、Unveily SDK の構造がすでに審査に有利に設計されていることです。
Unveily SDK が審査に安全な理由
ネイティブ機能はビルド時に固定されます
| 項目 | 動的変更可能? | 説明 |
|---|---|---|
| Bridge 関数リスト | 不可 | ネイティブコードにハードコード、アプリ更新なしに追加不可 |
config.json モジュール ON/OFF | 不可 | ビルド時に assets に含まれ固定 |
| アプリ権限(カメラ、位置情報等) | 不可 | AndroidManifest.xml にビルド時に固定 |
| ウェブコンテンツ(HTML/CSS/JS) | 可能 | サーバーから変更可能ですが、ネイティブ機能の範囲内でのみ動作します |
ウェブコンテンツが変更されても、呼び出せるネイティブ機能の範囲はビルド時に決定されるため、新しいネイティブ機能が動的に追加されることはできません。
審査提出時の推奨事項
1. App Review Information に説明を追加する
Google Play Console のアプリのコンテンツまたは審査メモに以下の内容を含めてください:
This app uses Android WebView to display web content from our server.
All native device API access (camera, location, biometric, etc.) is
controlled by a static configuration file (config.json) bundled at
build time. No new native capabilities can be added dynamically
after installation. The app does not download or execute native code
at runtime.2. config.json のコピーを添付する
審査メモに config.json の内容を添付すると、審査担当者がアプリの機能範囲を明確に理解できます。
{
"modules": {
"accessibility": { "enabled": true },
"bottomTabs": { "enabled": true },
"sideDrawer": { "enabled": false }
},
"security": {
"screenshotProtectionEnabled": true,
"rootDetectionEnabled": true
}
}3. Bridge API リストをドキュメント化する
ウェブコンテンツが呼び出す唯一のグローバルオブジェクトは window.unveilyBridge であり、すべてのネイティブ機能はこのオブジェクトの名前空間を通じて公開されます。必要に応じて以下のリストを提出してください:
unveilyBridge— データ保存、ページ移動、キャッシュ管理unveilyBridge.accessibilityPanel/.tts/.stt— アクセシビリティパネル、TTS、STTunveilyBridge.bottomTabs/.sideDrawer/.topDownMenu— ナビゲーションunveilyBridge.qr— QR・バーコードスキャン(config で有効化した場合)unveilyBridge.auth— 生体認証、ソーシャルログイン(プランで有効化した場合)
_unveilyBridgeQR、_unveilyBridgeBiometric のようにアンダースコア(_)で始まる名前は SDK 内部の登録名にすぎず、Web から直接呼び出すものではありません。Web 開発者が使用する公開 API は window.unveilyBridge の 1 つだけです。
4. App Store(iOS)へ提出する場合
App Store に提出する場合も同じ原則が適用されます。さらに以下を確認してください:
- 使用する機能に対応する
Info.plistの使用目的文字列(例:NSCameraUsageDescription、NSFaceIDUsageDescription)を正直かつ明確に記述する - アプリ内課金を使用する場合は StoreKit 2 の商品を App Store Connect で構成する
- 上記の WebView の動作説明メモを App Store Connect の審査メモにも同様に添付する
審査後の注意事項
config.json の変更 = アプリのアップデートが必要
config.json はビルド時に assets/ に含まれます。設定を変更するには:
config.jsonを修正する- アプリを再ビルドする(新しい APK/AAB を生成)
- Google Play にアップデートを提出する(再審査)
config.json はサーバーからリモートで置き換えることができません。アプリにバンドルされた静的ファイルのため、変更には必ずアプリのアップデートが必要です。
ウェブコンテンツの変更は自由
ウェブアプリ(HTML/CSS/JS)はサーバーから自由に更新できます。これは通常のウェブサイトの更新と同じであり、アプリの再審査は必要ありません。
ただし、以下の事項を守る必要があります:
- 審査時に承認された機能の範囲を超えないこと
- ネイティブ機能を回避するコードを追加しないこと
- Google Play のポリシーに違反するコンテンツを表示しないこと
よくあるリジェクトの事例と対応
返信文を AI で素早く作成
リジェクトされたら、リジェクト理由の原文 + 上記の WebView 動作説明メモ + config.json を AI アシスタント(Claude・Gemini・ChatGPT)に渡し、「審査チームに送る丁寧で明確な返信の下書き」を依頼すると、対応を大きく速められます。送信前に事実関係はご自身で確認してください。
| リジェクトの理由 | 対応方法 |
|---|---|
| 「アプリはウェブサイトをラップしているだけ」 | ネイティブ機能(QR スキャン、生体認証、プッシュ通知など)を活用していることを説明する |
| 「コア機能が WebView に依存している」 | Bridge 機能リストと config.json を提出して差別化を説明する |
| 「権限使用の目的が不明確」 | 各権限がどの機能に使われるかを審査メモに明記する |
WebView アプリがリジェクトされる最も一般的な理由は「ウェブサイトをラップしただけのアプリ」と判断されることです。Unveily SDK のネイティブ Bridge 機能(QR スキャン、生体認証、アクセシビリティなど)を積極的に活用して審査メモに明記することで、承認される可能性が高まります。