iOS App Store Review Guidelines for IAP
__CAPGO_KEEP_0__
App Storeへのアプリの承認には、Appleのガイドラインに特にインアプリ購入やサブスクリプションの実装に関して注意が必要です。このガイドでは、初回提出でレビューを通過するために必要なすべての情報をカバーしています。

提出前に
提出前にApp Store Connectのセットアップを完了
Section titled “App Store Connectの設定を完了する”Appleが購入フローのレビューを実施する前に、App Store Connectのアプリレコード自体が完了していることを確認してください:
- Add a プライバシーポリシーURL in App Store Connect
- Add a サポートURL that leads to real contact information for users
- Complete the 年齢制限 questionnaire so the app is publishable
- Add App Review の連絡先情報 とクリアなレビューノート
- レビュー中に期限切れにならないデモアカウントを提供する必要がある場合は、ログインが必要な場合 Note
- Section titled “Prepare Real Screenshots”
- 現実のビルドのスクリーンショットを使用してレビュー中の現実のスクリーンショットを準備する
1290 x 2796(6.7インチ)はデフォルトの最小サイズです - iPadでアプリが実行される場合、iPadのスクリーンショットもアップロードしてください
- 現在受け入れられている大きなiPadサイズには
2064 x 2752(13インチ)と2048 x 2732(12.9インチ)があります - iPhoneのスクリーンショットを拡大してiPadのサポートを偽装することはありません
TestFlightでレビュアージャーニーをDry-Runしてください
TestFlightでレビュアージャーニーをDry-Runする方法TestFlightから最新のビルドをインストールしてください
- レビュー用のアカウントでサインインしてください
- レビュー用のアカウントでサインインして、支払い壁を通過してください。Debugメニューや隠しジェスチャーはありません。
- TestFlightで実行するパスを実際のデバイスで実行してください:
- 購入、復元、サブスクリプション管理フロー
- パーミッションが拒否された場合にアプリが正しく動作することを確認する
インアプリ購入の要件
「インアプリ購入の要件」セクション価格透明性(重要)
「価格透明性(重要)」セクションAppleは購入前に明確な価格の公開が必要です:
必須要素:
- 購入ボタン前に正確な価格を表示する
- 請求頻度(例:「$9.99/月」)を表示する
- ユーザーが得るものを明確に述べる
- ユーザーが支払うことになる時期を示す
一般的な拒否:
「サブスクリプションの価格は明確で事前提示される必要があります。」
:::注意:価格の一貫性 すべての価格は次の場所で一致する必要があります:
- アプリストアのメタデータリスト
- インアプリ購入画面
- サブスクリプション管理画面
ストアリストの価格($4.99)とアプリの価格($5.99)に$1の差異がある場合、自動的に拒否されます。 :::
サブスクリプションプランの提示
「サブスクリプションプランの提示」というセクション必要な披露:
- すべての利用可能なサブスクリプションのレベルが一緒に表示される
- 各レベルごとの機能の明確な比較
- No auto-defaulting to premium tiers through UI tricks
- UI上でプレミアム層への自動切り替えを回避する

UI Design Dos and Don'ts
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> );}Paywall with restore purchases and legal links
購入の復元と法的情報の付いたパイウォールExample of Compliant UI:
規制に適合したUIの例
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>クリップボードにコピーする
Section titled “Common Rejection Reasons”1. App Crashes or Broken Functionality
Section titled “1. App Crashes or Broken Functionality”Why It Fails:
- App crashes on launch
- Purchase flow fails to complete
- Features shown in screenshots don’t work
Prevention:
- Test on real devices (not just simulators)
- Test all subscription flows end-to-end
- Verify receipt validation works
- Check network error handling
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. 誤解を招くマーケティング」というセクションのタイトルなぜ失敗するのか:
- __CAPGO_KEEP_0__の証拠なしの主張
- __CAPGO_KEEP_0__の証拠なしの特徴
- __CAPGO_KEEP_0__の急ぎの戦術(「残り2つ」など)


防止法
- 説明を具体的で事実に基づいて書く
- 証拠なしの超越的な表現を避ける
- ユーザーに偽の不足感を与えない
5. 非表示のキャンセルプロセス
「5. 非表示のキャンセルプロセス」のセクションなぜ失敗するのか:
- No cancellation method mentioned
- キャンセルボタンの表示が隠されている
- 複数ステップのキャンセルプロセスが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年以降、Appleはプライバシー要件を大幅に強化しました。
必要な披露
「必要な披露」各パーミッションごとに:
- なぜ必要なのか(具体的な用途)
- When it will be used
- How data is stored/shared
- Whether it’s optional or required
Example: Proper Permission Flow
例: 正しい許可フロー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年、不正確なプライバシーラベルはよくある却下理由です。データ収集を慎重に検査してください。
提出前に確認するチェックリスト
提出前に確認するチェックリスト
-
各サブスクリプションのレベルを購入してください
- 無料トライアルをテストしてください
- 導入オファーが正しく適用されることを確認してください
- 購入の復元をテストしてください
- ファミリーシェアリング (有効の場合) をテストしてください
- 複数のデバイスでテストしてください
- __CAPGO_KEEP_0__
-
価格の一致性を確認する
- App Storeのメタデータとインアプリ価格が一致するか確認する
- すべての通貨が正しいか確認する
- 無料試用期間の説明と実際の期間が一致するか確認する
- 導入オファーの条件が正確か確認する
-
すべてのコンテンツを確認する
- プレースホルダーテキストを削除する
- 主張がテスト可能か確認する
- 文法とスペルを確認する
- 現在のビルドと説明が一致するか確認する
- 競合他社の言及を削除する
-
権限のテスト
- 必要な権限のみを要求する
- アプリの説明を明確に表示する前に要求する
- 「拒否」フローをテストする (アプリは正常に動作するはず)
- Info.plistの説明が明確であることを確認する
-
テストアカウントを準備する
- レビュー期間中有効なレビュー用アカウントを作成する
- App Review情報にログイン情報を記載する
- レビュアーがpaywallに到達し購入フローを完了できることを確認する
- 必要に応じてNotesフィールドに追加アカウントまたはアプリ固有のSwitchを含める
-
メタデータを確認する
- スクリーンショットが現在のUIと一致することを確認する
- サポートURLに実際の連絡先情報を含める
- __CAPGO_KEEP_0__はプライバシーポリシーURLに埋め込まれています。
- __CAPGO_KEEP_0__はアプリの内容と一致しています。
- アプリのプレビュー動画(ある場合)は現在のバージョンを表示しています。
- 説明は機能を正確に説明しています。
- プライバシーポリシーはアプリ内とストアのリストからアクセス可能です。
-
詳細なレビュー用ノートを書く
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が実際に収集するプライバシー情報と一致するプライバシー情報が必要です
- App Reviewの連絡先情報とメモは最初の提出時に完全な状態でなければなりません。
- デモクレデンシャルは、全体的なレビュー期間中に有効でなければなりません。
4. 提出の準備
- Appleは定期的に最小限のSDK要件を更新しているため、リリースビルドをアップロードする前に現在の締切を確認してください。
- TestFlightは、提出前に正確なレビュ modalパスを確認する最も安全な場所です。
ネイティブ購入プラグインのベストプラクティス
ネイティブ購入プラグインのベストプラクティス適切なエラーハンドリングを実装する
適切なエラーハンドリングを実装する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> );}__CAPGO_KEEP_1__
__CAPGO_KEEP_2__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> );}__CAPGO_KEEP_3__
__CAPGO_KEEP_4____CAPGO_KEEP_5__
__CAPGO_KEEP_2__-
__CAPGO_KEEP_6__
- __CAPGO_KEEP_7__
- __CAPGO_KEEP_8__
-
__CAPGO_KEEP_9__
- 根本的な原因を修正するだけではありません
- 修正を徹底的にテストする
- 変更したことをドキュメントする
-
解決センターで回答する
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時間以内にレビューされます
- 通常24時間以内
抗議プロセス
抗議プロセス再提出の却下が不正であると考えている場合:

- App Store Connectで「Appeal」をクリックしてください。
- 明確な証拠を提供してください:
- 規制に適合していることを示すスクリーンショット
- 具体的なガイドラインへの言及
- 要件を満たしていることを説明してください
- プロフェッショナルで事実に基づいた内容でください
- 機能が見つからない場合はテストアカウントを含めてください

追加リソース
「追加リソース」のセクション- Apple App Storeのレビュー規定
- インアプリ購入規定
- サブスクリプションのベスト プラクティス
- App Store Connect ヘルプ
- スクリーンショットの仕様
- プラットフォーム バージョン情報
サポート
サポートのセクション問題が解決しない場合は:
- Review the ネイティブ購入のドキュメント
- Check 一般的なトラブルシューティングの問題
- Apple Developer サポートに連絡してガイドラインの説明を確認
Need Expert Help?
セクション:ニーズ エキスパート ヘルプ?アプリのレビューに苦戦しているか、個別の支援が必要ですか? 専門チームと電話会議を予約してください 専用サポートのために:
- IAP実装のレビューと最適化
- App Storeレビューの準備と戦略
- 提出物のチェックリストのレビュー
- 却下の解決と訴え
- 完全なテストと検証
私たちの専門家は、IAPのためにレビューを通過するために成功した数百のアプリを支援しました!
iOS App Store Review GuidelinesのIAPの部分から続けてください
iOS App Store レビュー ガイドラインの IAP セクションから続けてくださいIAP を使用している場合 iOS App Store レビュー ガイドラインの IAP ストアの承認と配信を計画するには、接続する必要があります。 @capgo/native-purchases を使用して @capgo/native-purchases のネイティブ機能を使用する場合、 @capgo/capacitor-in-app-review を使用して @capgo/capacitor-in-app-review の実装詳細を参照する場合、 @capgo/capacitor-in-app-review を使用して @capgo/capacitor-in-app-review のネイティブ機能を使用する場合、 @capgo/capacitor-native-market を使用して @capgo/capacitor-native-market の実装詳細を参照する場合、 @capgo/capacitor-native-marketを使用して native capabilityを使用して@capgo/capacitor-native-marketを使用します。