iOS App StoreのIAPのレビュー ガイドライン
このプラグインのインストール手順と全マークダウンガイドを含むセットアッププロンプトをコピーする
App Storeへのアプリの承認には、特にインアプリ購入とサブスクリプションの実装に関して、Appleのガイドラインに注意する必要があります。このガイドでは、初回提出でレビューを通過するために必要なすべての情報をカバーしています。

提出前に
タイトル「提出前に」App Store Connect設定を完了する
タイトル「App Store Connect設定を完了する」購入フローのAppleレビュー前に、まずアプリレコード自体が完了していることを確認してください:
- プライバシーポリシーURLを追加する Add a __CAPGO_KEEP_0__ App Store Connect に追加
- Add a サポート URL ユーザーに実際の連絡先情報を提供するための URL
- 質問票を完了してアプリを公開できるようにする 年齢制限の質問票を完了 Add
- App Review の連絡先情報と明確なレビューノート ログインが必要な場合、レビュー中に期限切れにならないデモアカウントを提供する レビュー中に期限切れにならないデモアカウントを提供する
- レビュー中に期限切れにならないデモアカウントを提供する レビュー中に期限切れにならないデモアカウントを提供する
Prepare Real Screenshots
Section titled “Prepare Real Screenshots”- Use current screenshots from the actual build under review
- For iPhone,
1290 x 2796(6.7-inch) is the easiest default size - If your app runs on iPad, upload iPad screenshots too
- Current accepted large iPad sizes include
2064 x 2752(13-inch) and2048 x 2732(12.9-inch) - iPhoneのスクリーンショットを拡大してiPadのサポートを偽装することはない
実機でAppleが実行するパスを完全に再現するDry-Runのレビュージョーンリー
TestFlightでDry-Runするレビュージョーンリー実機でAppleが実行するパスを完全に再現するDry-Runのレビュージョーンリーの実行
- TestFlightから最新のビルドをインストール
- レビュー用のアカウントでサインイン
- 非表示のジェスチャーやデバッグメニューなしで壁紙に到達
- 購入、復元、サブスクリプション管理フローの完了
- 権限が拒否された場合でもアプリが正しく動作することを確認
In-App Purchaseの要件
In-App Purchaseの要件価格明示 (重要)
価格明示 (重要)というセクションのタイトルAppleは購入前に明確な価格の披露を要求しています:
必須要素:
- 購入ボタン前に正確な価格を表示する
- 請求頻度を明確に表示する(例:「$9.99/月」)
- ユーザーが得るものを明確に述べる
- 課金時期を明確に示す
一般的な拒否理由:
“Subscription pricing must be clear and upfront.”
サブスクリプション価格は明確かつ事前提示でなければなりません。
- :::caution Price Consistency すべての価格は次のものと一致する必要があります:
- In-app purchase screens
- サブスクリプション管理画面
Even a $1 discrepancy between store listing ($4.99) and app ($5.99) will trigger automatic rejection.
:::
サブスクリプションプランの表示「サブスクリプションプランの表示」のセクション
- 必要な披露
- すべてのサブスクリプションの階層が表示される
- 各階層ごとの機能の明確な比較
- プレミアム階層への自動切り替えをUIのトリックで行わない

UIの例:
import { NativePurchases } from '@capgo/native-purchases';
function SubscriptionScreen() { return ( <div> <h2>Choose Your Plan</h2>
{/* Show all tiers equally */} <PlanCard title="Basic" price="$4.99/month" features={['Feature A', 'Feature B']} /> <PlanCard title="Premium" price="$9.99/month" features={['All Basic', 'Feature C', 'Feature D']} highlighted={false} // Don't force premium />
{/* Clear cancellation info */} <Text> Cancel anytime in Settings > Subscriptions. No refunds for partial periods. </Text> </div> );}購入を復元
購入を復元のセクション必須実装:
IAPを利用するすべてのアプリは、ユーザーが以前の購入を復元する方法を提供する必要があります。サポートに連絡することなく。
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function restorePurchases() { try { await NativePurchases.restorePurchases();
const { purchases } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.SUBS, });
const activeSub = purchases.find( (purchase) => purchase.isActive && purchase.expirationDate, );
if (activeSub) { unlockPremiumFeatures(); showMessage('Purchases restored successfully!'); return; }
const { purchases: iaps } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.INAPP, }); const hasIap = iaps.some((purchase) => purchase.productIdentifier === 'premium_unlock');
showMessage( hasIap ? 'Premium purchase restored!' : 'No previous purchases found.', ); } catch (error) { showError('Failed to restore purchases. Please try again.'); }}
// Add a visible "Restore Purchases" button<Button onClick={restorePurchases}> Restore Purchases</Button>一般的な却下理由
セクション「一般的な却下理由」1. アプリのクラッシュまたは機能の不具合
セクション「1. アプリのクラッシュまたは機能の不具合」なぜ失敗するのか:
- 起動時にアプリがクラッシュする
- 購入フローが完了しない
- スクリーンショットに表示されている機能が実際に機能しない
対策:
- 実機でテストする (シミュレータだけでは不十分)
- すべてのサブスクリプションフローをエンドツーエンドでテストする
- 受け取り確認が正常に動作することを確認する
- ネットワークエラーのハンドリングを確認する
2. メタデータの不一致
「2. メタデータの不一致」セクションなぜ失敗するのか:
- スクリーンショットに表示されている機能は現在のビルドに含まれていない
- 機能が存在しないことを説明しています
- メタデータの価格とアプリ内価格が異なります

防止:
// Document exactly what's in each tierconst SUBSCRIPTION_FEATURES = { basic: ['Ad-free', 'Cloud sync', 'Basic themes'], premium: ['Ad-free', 'Cloud sync', 'All themes', 'Priority support']};
// Use these in both your app AND App Store description3. 権限の説明が不足している
権限の説明が不足している理由なぜ失敗するのか:
- カメラ/位置情報/健康情報の許可を求めるが説明がない
- 許可の要求が複数の画面奥に隠れている
- 曖昧または一般的な許可の説明
防止:
アップデート Info.plist わかりやすい説明で
<key>NSCameraUsageDescription</key><string>Camera access is needed to scan product barcodes for quick subscription upgrades.</string>
<key>NSLocationWhenInUseUsageDescription</key><string>Location helps us show relevant local content in your Premium subscription.</string>4. 誤解を招くマーケティング
セクション “4. 誤解を招くマーケティング”なぜ失敗するのか
- 証明なしで “世界で1位のアプリ”と主張する
- 「無制限」な機能が実際には制限がある
- 「限りある時間」で急いで購入するように迫る


防止:
- 具体的で事実に基づいた説明を記載する
- 証拠のない超越的な表現を避ける
- ユーザーに偽の限界感を与えない
5. 非表示のキャンセルプロセス
「5. 非表示のキャンセルプロセス」のセクションなぜ失敗するか:
- キャンセル方法の説明が欠落している
- キャンセルボタンが非表示または隠されている
- Appleのネイティブフローを使用しない複数ステップのキャンセルプロセス
防止:
// Always inform users about cancellationfunction SubscriptionInfo() { return ( <div> <h3>How to Cancel</h3> <ol> <li>Open iPhone Settings</li> <li>Tap your name at the top</li> <li>Tap Subscriptions</li> <li>Select this app and tap Cancel</li> </ol>
<p>Or manage directly in the App Store app.</p>
<Button onClick={openSubscriptionManagement}> Manage Subscription in Settings </Button> </div> );}
async function openSubscriptionManagement() { // Direct link to iOS subscription management await NativePurchases.showManageSubscriptions();}プライバシーとデータ使用について (5.1.1)
「プライバシーとデータ使用について (5.1.1)」というセクション2025年、アップルはプライバシー要件を大幅に強化しました。
必須の開示
「必須の開示」というセクションあらゆるパーミッションの場合
- なぜ必要なのか (具体的な用途)
- どの時点で使用されるか
- どのようにデータが保存/共有されるか
- オプションか必須か
例: 正しいパーミッション フロー
セクションのタイトル “例:適切な許可フロー”async function requestCameraPermission() { // Show explanation BEFORE requesting await showDialog({ title: 'Camera Access', message: 'We need camera access to let you scan barcodes for quick product lookup. Your photos are never uploaded or stored.', buttons: ['Not Now', 'Allow'] });
// Then request permission const result = await Camera.requestPermissions(); return result.camera === 'granted';}プライバシー栄養ラベル
セクションのタイトル “プライバシー栄養ラベル”App Storeのプライバシー栄養ラベルが正確に反映されていることを確認してください。
- 購入履歴の収集
- 受領のためのメールアドレス
- 不正行為防止のためのデバイスID
- 分析のための使用データ
2025年には不正確なプライバシー栄養ラベルが一般的な却下理由です。データ収集を慎重に検討してください。
提出前にチェックリスト
セクションのタイトル “提出前にチェックリスト”
-
すべての購入フローをテストする
- 各サブスクリプション階層を購入する
- 無料試用期間をテストする
- 導入オファーが正しく適用されていることを確認する
- 購入を復元する機能をテストする
- ファミリーシェアリング機能が有効の場合、ファミリーシェアリングをテストする
- 複数のデバイスでテストする
-
価格の一貫性を確認する
- App Storeのメタデータがインアプリ価格と一致していることを確認する
- すべての通貨が正しいことを確認する
- 無料試用期間の長さが説明と一致していることを確認する
- __CAPGO_KEEP_0__の紹介オファーの条件を正確に確認する
-
__CAPGO_KEEP_0__のすべてのコピーを確認する
- プレースホルダーテキストを削除する
- 主張がテスト可能であることを確認する
- 文法とスペルを確認する
- 説明が現在のビルドと一致していることを確認する
- 競合他社の言及を削除する
-
権限のテスト
- 必要な権限のみを要求する
- 権限を要求する前に明確な説明を示す
- 「拒否」フローのテスト(アプリはまだ動作するはず)
- Info.plistの説明が明確であることを確認する
-
テストアカウントを用意する
- レビュー期間中でも有効なレビュー用アカウントを作成する
- App Review情報にログイン情報を記載する
- レビュアーがパイウォールに到達し購入フローを完了できることを確認する
- 必要に応じて、Notesフィールドに追加のアカウントやアプリ固有のスイッチを含める
-
メタデータを確認する
- スクリーンショットが現在のUIと一致する
- サポートURLに実際の連絡先情報が含まれる
- プライバシーポリシーURLが埋められている
- アプリの年齢制限がビルド内のコンテンツと一致する
- アプリプレビュー動画(必要に応じて)が現在のバージョンを表示する
- 説明が機能を正確に説明する
- アプリ内およびストアリストからプライバシーポリシーにアクセス可能
-
詳細なレビューノートを書く
Contact:Name: Jane DeveloperEmail: review@yourapp.comPhone: +1 555-0100Test Account:Email: reviewer@test.comPassword: TestPass123!This account does not expire during review.Testing Instructions:1. Log in with test account above2. Tap "Upgrade to Premium" button3. Select "Monthly Premium" subscription4. Complete purchase (no charge in sandbox)5. Verify premium features unlockNote: Subscription pricing is clearly shown before purchase.Cancellation instructions are in Settings > Account.
クリップボードにコピー
レビューのタイムライン
標準レビュー: 24-48時間 ピーク時期: 3-5日(アプリストアのホリデーリリース) 週末: レビューは処理されません 早期レビュー: App Store Connectでクリティカルなバグ修正のためにリクエスト
App Store Connectで見ることができる一般的なステータス
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
2026 年の提出焦点
2026 年の提出焦点現在の焦点分野
セクション「現在の焦点分野」1. サブスクリプションの明確さ
- プランの比較
- No “dark patterns”が存在しない、より安いオプションを隠さない
- 明確なダウングレード/アップグレードパス
2. メタデータの正確さ
- レビューされるビルドと一致するスクリーンショットが必要
- iPadのスクリーンショットは、iPadのサポートが有効になっている場合にのみ必要
- サポートURLとプライバシーポリシーは、提出前にすでに公開されている必要があります
3. プライバシーとレビュー詳細の品質
- SDKが実際に収集するものと一致するプライバシーの披露が必要
- App Reviewの連絡先情報と注釈は、最初の提出時に完了している必要があります
- デモクレデンシャルは、レビュー期間中に有効なまま残す必要があります
4. 提出の準備
- Appleは、定期的に最小限のSDK要件を更新しているため、現在の締切を確認して、リリースビルドをアップロードする前に提出を確認する必要があります
- TestFlightは、実際のレビュアー パスを確認するために、安全な場所で確認することができます。
ネイティブ購入プラグインのベスト プラクティス
ネイティブ購入プラグインのベスト プラクティス適切なエラー処理を実装する
適切なエラー処理を実装するimport { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function handlePurchase(productId: string) { try { const transaction = await NativePurchases.purchaseProduct({ productIdentifier: productId, productType: PURCHASE_TYPE.SUBS, });
// Success await validateReceiptOnServer(transaction.receipt); showSuccess('Subscription activated!'); unlockFeatures();
} catch (error: any) { // Handle specific error cases if (error.code === 'USER_CANCELLED') { // User cancelled - don't show error console.log('Purchase cancelled by user'); } else if (error.code === 'PAYMENT_PENDING') { showInfo('Payment is pending. Please check back later.'); } else if (error.code === 'PRODUCT_ALREADY_PURCHASED') { // Restore instead await NativePurchases.restorePurchases(); } else { // Show user-friendly error showError('Unable to complete purchase. Please try again.'); } }}ロード中の状態を表示する
ロード中の状態を表示するfunction PurchaseButton({ productId }: { productId: string }) { const [loading, setLoading] = useState(false);
const handlePurchase = async () => { setLoading(true); try { await NativePurchases.purchaseProduct({ productIdentifier: productId }); } finally { setLoading(false); } };
return ( <button onClick={handlePurchase} disabled={loading}> {loading ? 'Processing...' : 'Subscribe Now'} </button> );}条件を明確に表示する
条件を明確に表示するfunction SubscriptionTerms() { return ( <div className="terms"> <p> Subscription automatically renews unless cancelled at least 24 hours before the end of the current period. </p> <p> Your account will be charged for renewal within 24 hours prior to the end of the current period. </p> <p> Subscriptions may be managed by the user and auto-renewal may be turned off in Account Settings after purchase. </p> <p> <a href="/terms">Terms of Service</a> | <a href="/privacy/">Privacy Policy</a> </p> </div> );}If Your App Gets Rejected
「アプリが拒否された場合」のセクションSteps to Resolve
「拒否を解決する手順」のセクション-
拒否の理由をよく読み
- 特定のガイドラインを注意して記録してください (例: 3.1.1, 5.1.1)
- Appleが指摘した問題を完全に理解する
-
根本的な問題を修正する
- 問題を修正するだけではなく、根本的な原因を修正する
- 修正を徹底的にテストする
- 変更した内容を記録する
-
解決センターで回答する
Thank you for your feedback. I have addressed the issue:Issue: Subscription pricing not clear upfrontFix: Added explicit pricing display on subscription selectionscreen showing "$9.99/month" before purchase button. Also addedcancellation instructions on the same screen.The changes are in this submission and can be tested using theprovided test account. -
クリップボードにコピー
- すぐに再提出
- 通常24時間以内
再提出の手続き
「再提出の手続き」セクション再提出が却下された場合に誤りであると考える場合:

- App Store Connectで「再提出」をクリック
- 明確な証拠を提示する:
- 規制に適合していることを示すスクリーンショット
- 特定のガイドラインへの参照
- 要件を満たす方法の説明
- プロフェッショナルで事実に基づいた内容
- 機能が見つからない場合はテストアカウントを含める

追加リソース
「追加リソース」セクション- Apple App Store レビュー ガイドライン
- イン アプリ 購入 ガイドライン
- サブスクリプション ベスト プラクティス
- App Store Connect ヘルプ
- スクリーンショットの仕様
- プラットフォーム バージョン情報
サポート
サポート問題が解決しない場合
- ドキュメントを確認してください ネイティブ購入のドキュメント
- 問題点を確認してください 一般的なトラブルシューティングの問題
- Apple Developer Supportに連絡してください
ガイドラインの説明の確認
専門家の助けが必要ですか?アプリのレビューに苦労しているか、個別のアシスタンスが必要ですか? 専門チームと電話会議を予約してください 専用サポートのために:
- IAP実装のレビューと最適化
- App Storeのレビュー準備と戦略
- 提出要件のチェックリストレビュー
- 却下解決と訴え
- 完全なテストと検証
私たちの専門家は、IAPのためにレビューを通過するために成功した数百のアプリを助けました!
iOS App Store Review Guidelines for IAPから続けてください
「iOS App Store Review Guidelines for IAPから続けてください」のセクションあなたが使用している場合 IAPのためのiOS App Store Review Guidelinesを使用して、ストアの承認と配布の計画に接続する to plan store approval and distribution, connect it with @capgo/native-purchases native capabilityの使用に@capgo/native-purchases @capgo/capacitor-in-app-review @capgo/capacitor-in-app-reviewの実装詳細 Using @capgo/capacitor-in-app-review native capabilityの使用にUsing @capgo/capacitor-in-app-review @capgo/capacitor-native-market @capgo/capacitor-native-marketの実装詳細 Using @capgo/capacitor-native-market native capabilityの使用にUsing @capgo/capacitor-native-market