iOS App Store Review Guidelines for IAP
このプラグインのインストール手順とフルマークダウンガイドを含むセットアップコマンドをコピーしてください。
iOS App Store レビュー プロセス

提出前に
「提出前に」というセクションApp Store Connectの設定を完了する
「App Store Connectの設定を完了する」というセクション購入フローをAppleがレビューする前に、まずアプリのレコード自体が完了していることを確認してください:
- App Store Connectに プライバシーポリシーURL App Store Connectに
- サポートURL ユーザーが実際の連絡先にアクセスできるようにする App Store Connectの設定を完了する
- アプリのレコード自体が完了していることを確認する __CAPGO_KEEP_0__ アプリの公開に必要なアンケートを実施してください
- 追加 アプリレビューの連絡先情報 レビュアーが確認しやすいように、連絡先情報とメモを記載してください
- レビュー中に有効期限が切れないデモアカウントを用意してください 注意
__CAPGO_KEEP_1__
「実際のスクリーンショットを準備する」セクションのタイトル- __CAPGO_KEEP_0__から現在の実際のビルドのスクリーンショットを使用する
- iPhoneの場合、
1290 x 2796(6.7インチ)はデフォルトの最も簡単なサイズ - あなたのアプリがiPadで動作する場合、iPadのスクリーンショットもアップロードする
- 現在受け入れられている大きなiPadのサイズには、
2064 x 2752(13インチ)と2048 x 2732(12.9インチ)が含まれます - iPhoneのスクリーンショットをiPadのサポートを偽るために伸ばさない
テストフライトでレビュアーの旅をドライランする
「テストフライトでレビュアーの旅をドライランする」セクションのタイトル実際のデバイス上でAppleが実行する正確なパスを実行する
- 最新バージョンをTestFlightからインストールする
- __CAPGO_KEEP_0__にサインインする
- 非表示のジェスチャーやデバッグメニューなしで壁を通過する
- 購入、復元、サブスクリプション管理フロー
- パーミッションが拒否された場合でも、アプリが正しく動作することを確認する
In-App Purchase Requirements
「In-App Purchase Requirements」価格の透明性 (重要)
「価格の透明性 (重要)」Appleは購入前に明確な価格の披露が必要です:
必須要素:
- 購入ボタン前に正確な価格を表示する
- 請求頻度の表示 (例: "$9.99/月")
- ユーザーが得るものを明確に述べる
- 課金時期を示す
一般的な拒否理由:
“Subscription pricing must be clear and upfront.”
:::注意:価格の一貫性 すべての価格は次の場所で一致する必要があります:
- App Store メタデータ リスト
- インアプリ購入画面
- サブスクリプション管理画面
ストアのリスト価格 ($4.99) とアプリの価格 ($5.99) の 1 ドル未満の差異でも自動的に拒否されます。 :::
サブスクリプション プランの提示
「サブスクリプション プランの提示」というセクション必要な披露事項:
- すべての利用可能なサブスクリプションの階層を一緒に表示
- 各階層ごとの機能の明確な比較
- 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. 権限の説明が不足している理由
「3. 権限の説明が不足している理由」セクションなぜ失敗するのか:
- カメラ/位置情報/健康情報の要求に説明がない
- 許可の要求が複数の画面奥に埋め込まれている
- 曖昧または一般的な許可の説明
対策:
更新してください 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のアプリ」などと主張する
- 「無制限」な機能が実際には制限がある
- 「最後の2つのスポットだけ残っている!」などの偽の緊急性の戦術


防止策:
- 説明では具体的かつ事実に基づいて表現する
- 証拠のない超越的な表現を避ける
- ユーザーに偽の不足感を植え付けるのを避ける
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)」セクションAppleは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';}プライバシー栄養ラベル
アプリストアのプライバシー ラベルが正確に反映されるようにするアプリストアのプライバシー ラベルが正確に反映されるようにする
- 購入履歴の収集
- 請求書のためのメールアドレス
- 不正行為防止のためのデバイスID
- 分析のための使用データ
2025年には不正なプライバシーラベルが一般的な却下理由です。データ収集を慎重に検査してください。
提出前にチェックリスト
提出前にチェックリスト
-
各サブスクリプションのレベルを購入してください
- 無料試用版をテストしてください
- 導入オファーが正しく適用されていることを確認してください
- 提出前にチェックリスト
- 購入の復元テスト
- 家族共有機能が有効な場合の検証
- 複数のデバイスでテスト
-
価格の一貫性を検証
- App Storeのメタデータとインアプリ価格が一致するか確認
- すべての通貨が正しいか確認
- 無料試用期間の説明と一致するか確認
- 導入オファーの条件が正しいか確認
-
すべてのコンテンツを確認
- プレースホルダー テキストを削除
- すべての主張がテスト可能であるか確認
- 文法とスペルを確認
- 現在のビルドに合わせて説明を更新する
- 競合他社の言及を削除する
-
権限をテストする
- 必要な権限のみを要求する
- 権限を要求する前に明確な説明を表示する
- 「拒否」フローをテストする (アプリはまだ動作するはず)
- Info.plist の説明が明確であることを確認する
-
テストアカウントを準備する
- レビュー期間中でも有効なレビュー用アカウントを作成する
- App Review 情報にログインクレデンシャルを記載する
- レビュアーがパイウォールに到達し購入フローを完了できることを確認する
- 必要に応じて、Notes フィールドに追加アカウントまたはアプリ固有のSwitchを含める
-
メタデータを確認
- スクリーンショットが現在の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 の休日リリース) 週末: レビューが処理されません 優先レビュー: 重要なバグ修正のために利用可能 (App Store Connect からリクエスト)
App Store Connect でよく見るステータス:
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
2026 提出物の焦点
2026 提出物の焦点現在の焦点分野
現在の焦点分野1. サブスクリプションの明確性
- 両側のプランの比較が必要です。
- 安いオプションを隠す「暗いパターン」はありません。
- 明確なダウングレード/アップグレードパス
2. メタデータの正確性
- レビューされるビルドと一致するスクリーンショットが必要です。
- iPad のサポートが有効になっている場合、iPad のスクリーンショットが必要です。
- サポートURLとプライバシーポリシーは、提出前にすでに公開されているはずです
3. プライバシーとレビュー詳細の品質
- SDKが実際に収集するものと一致するプライバシー情報を公開する必要があります
- アプリレビューの連絡先情報とメモは、最初の提出時に完了しているはずです
- デモクレデンシャルは、レビュー期間中に有効なまま残す必要があります
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> );}アプリが却下された場合
「アプリが却下された場合」のセクション却下を解決する手順
「却下を解決する手順」のセクション-
却下の理由をよく読み
- 特定のガイドラインを参照してください (例: 3.1.1、5.1.1)
- Apple が指摘したことを正確に理解する
-
問題を徹底的に修正する
- 根本的な原因だけを修正せずに、問題を修正する
- 修正を徹底的にテストする
- 変更したことをドキュメントする
-
Resolution Center に回答する
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 時間以内
異議申し立てプロセス
アピールプロセス__CAPGO_KEEP_0__が不正であると信じる場合:

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

https://capgo.com/docs/additional-resources
追加リソース- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
問題が解決しない場合
- を確認してください ネイティブ購入のドキュメント
- 確認 一般的なトラブルシューティングの問題
- アプリのガイドラインの明確化についてのサポートを求める場合は、Apple Developer Supportに連絡してください。
専門家の助けが必要ですか?
「専門家の助けが必要ですか?」というセクションのタイトルアプリレビューに苦戦しているか、個別の支援が必要ですか? チームと電話会議を予約してください 以下の専門的なサポートに専念してください
- IAPの実装レビューと最適化
- App Storeのレビュー準備と戦略
- 提出物のチェックリストのレビュー
- 却下の解決と異議申し立て
- 完全なテストと検証
私たちの専門家は、数百のアプリをレビューに通すのに成功しました!
iOS App Store Review ガイドラインのIAPから続けて
iOS App Store Review ガイドラインのIAPから続けてあなたが iOS App Store Review ガイドラインのIAP レビューと配布のためのストアの承認と計画に使用し、@__CAPGO_KEEP_0__/native-purchases Using @capgo/native-purchases Using @capgo/native-purchases @capgo/capacitor-in-app-review Using @capgo/capacitor-in-app-review for the implementation detail in @capgo/capacitor-in-app-review ネイティブ機能の使用に@capgo/capacitor-in-app-reviewを使用します。 @capgo/capacitor-native-marketを使用します。 @capgo/capacitor-native-marketの実装詳細について Using @capgo/capacitor-native-market ネイティブ機能の使用に@capgo/capacitor-native-marketを使用します。