iOS App Store の IAP ガイドライン
インストール、同期、そしてこのプラグインのフルマークダウンガイドまでのすべてのステップを含む設定用の質問をコピーしてください。
App Storeでアプリを承認するには、Appleのガイドラインに注意して、特にインアプリ購入とサブスクリプションを実装する際に、十分な注意が必要です。このガイドでは、初回提出でレビューを通過するために必要なすべての情報をカバーしています。

提出前に
セクション「提出前に」App Store Connect の設定を完了する
セクション「App Store Connect の設定を完了する」購入フローを Apple がレビューする前に、まずアプリのレコード自体が完了していることを確認してください:
- 追加 プライバシーポリシー URL App Store Connect 内
- 追加 サポート URL ユーザーに実際の連絡先情報を提示するようにする
- アプリの公開を可能にするために、 年齢制限 アプリの公開を可能にするために、
- 追加 「アプリレビューの連絡先情報」と「クリアなレビューノート」 ログインが必要な場合、レビュー期間中は有効期限が切れないデモアカウントを提供してください。
- 注 試験用アカウントです。
実際のスクリーンショットを準備する
「実際のスクリーンショットを準備する」- 実際のビルドの下でレビュー中の現在のスクリーンショットを使用する
- iPhoneの場合、
1290 x 2796(6.7インチ)はデフォルトのサイズで最も簡単 - アプリがiPadで動作する場合、iPadのスクリーンショットもアップロードする
- 現在受け入れられている大きなiPadサイズには
2064 x 2752(13インチ)と2048 x 2732(12.9インチ)が含まれます - iPhoneのスクリーンショットをiPadのサポートを偽装するために伸ばさない
テストフライトでレビュアーの旅をドライランする
「テストフライトでレビュアーの旅をドライランする」実機でAppleが実行するパスを正確に実行してください:
- 最新のビルドをTestFlightからインストールしてください
- レビュー用のアカウントでサインインしてください
- 非表示のジェスチャーやデバッグメニューなしで、壁を通過してください
- 購入、復元、サブスクリプション管理フローの購入フローを完了してください
- パーミッションが拒否された場合でも、アプリが正しく動作することを確認してください
インアプリ購入の要件
「インアプリ購入の要件」セクション価格の透明性(重要)
「価格の透明性(重要)」セクションAppleは購入前に明確な価格の披露が必要です:
必須要素:
- 購入ボタンの前に正確な価格を表示する
- 請求頻度を表示する(例: "$9.99/月")
- ユーザーが何を得るかを明確に述べる
- 課金時期を示す
一般的な拒否理由:
「サブスクリプション価格は明確かつ事前提示でなければならない。」
:::caution Price Consistency すべての価格は次の場所で一致する必要がある。 アプリストアのメタデータリスト
- アプリ内購入画面
- サブスクリプション管理画面
- ストアリストの価格($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';}プライバシー栄養ラベル
「プライバシー栄養ラベル」セクションApp Storeプライバシーラベルを正確に反映させることを確認してください:
- 購入履歴の収集
- 受領のためのメールアドレス
- 不正防止のためのデバイスID
- 分析のための使用データ
2025年には不正確なプライバシーラベルが再提出の理由としてよく出てきました。データ収集を慎重に検討してください。
提出前に確認するチェックリスト
提出前に確認するチェックリストのセクション
-
すべての購入フローのテスト
- 各サブスクリプションのレベルを購入してください
- 無料トライアルのテスト
- 初回割引の適用が正しく行われることを確認する
- 購入の復元テスト
- ファミリー共有が有効の場合、共有をテストする
- 複数のデバイスでテストする
-
価格の一貫性を確認する
- アプリストアのメタデータとインアプリ価格が一致することを確認する
- すべての通貨が正しいことを確認する
- 無料試用期間の長さが説明と一致することを確認する
- 初回割引の条件が正確であることを確認する
-
すべてのコピーを確認する
- プレースホルダーテキストを削除する
- 主張がテスト可能であることを確認する
- 文法とスペルを確認する
- 説明が現在のビルドに合わせていることを確認する
- 競合他社の言及を削除する
-
権限をテストする
- 必要な権限のみを要求する
- 権限を要求する前に明確な説明を表示する
- 「拒否」フローをテストする (アプリはまだ動作するはず)
- 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の休日リリース) 週末: レビューは処理されません 優先レビュー: 緊急修正用に利用可能(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パスを確認する最も安全な場所です。
ネイティブ購入プラグインのベストプラクティス
セクションのタイトル「ネイティブ購入プラグインのベストプラクティス」適切なエラーハンドリングを実装する
Section titled “適切なエラー処理を実装する”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.'); } }}ロード中の状態を表示
Section titled “ロード中の状態を表示”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> );}利用規約を明確に表示
Section titled “利用規約を明確に表示”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> );}アプリが却下された場合
Section titled “アプリが却下された場合”問題を解決する手順
Section titled “問題を解決する手順”-
Appleの拒否理由を丁寧に読み取ってください。
- 具体的なガイドラインを確認してください(例:3.1.1、5.1.1)
- Appleが指摘した問題を完全に理解してください。
-
根本的な問題を修正してください。
- 問題を単にパッチするのではなく、根本的な原因を修正してください。
- 修正を徹底的にテストしてください。
- 変更した内容を記録してください。
-
Resolutionセンターで回答してください。
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 ヘルプ
- スクリーンショット スペック
- プラットフォーム バージョン情報
サポート
サポートサポート
- 問題が解決しない場合: Native Purchases ドキュメント
- 確認 共通のトラブルシューティング
- Apple Developer サポートに連絡してください
プロの助けが必要ですか?
「プロの助けが必要ですか?」アプリレビューに苦労しているか、個別のアシスタンスが必要ですか? 専門チームと電話会議を予約してください 以下の専門的なサポートをご希望の場合
- IAP の実装の確認と最適化
- アプリレビューの準備と戦略
- 提出用チェックリストの確認
- 拒否解決と異議申し立て
- テストと検証の完了
私たちの専門家は、数百のアプリをレビューに通すのに成功しました!
iOS App Store Review Guidelines for IAPから続けてください
タイトル「iOS App Store Review Guidelines for IAPから続けてください」あなたが使用している iOS App Store レビュー ガイドライン (IAP) レビューと配布の計画と実施に使用している場合、@__CAPGO_KEEP_0__/native-purchases native capabilityの@capgo/native-purchasesの使用 @capgo/__CAPGO_KEEP_1__-in-app-review 実装詳細の@capgo/capacitor-in-app-reviewの使用 @capgo/capacitor-in-app-review iOS App Storeレビューの使用 @capgo/capacitor-in-app-review iOS App Storeレビューのためのネイティブ機能の使用 @capgo/capacitor-in-app-review iOS App Storeネイティブマーケット @capgo/capacitor-native-market iOS App Storeネイティブマーケットの実装詳細のための @capgo/capacitor-native-market @capgo/capacitor-native-market Native機能のために、@capgo/capacitor-native-marketを使用します。