コンテンツにジャンプ

iOS App Store での IAP の審査ガイドライン

GitHub

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

iOS App Store レビューのプロセス

提出前に

提出前に

アプリのレコード自体が完了していることを確認するまで、Apple が購入フローのレビューを実行しません:

アプリのレコードに

レコード

  • レコード プライバシーポリシーURL App Store Connect内
  • 追加 サポートURL ユーザーに実際の連絡先情報を提供するもの
  • 質問票を完了してアプリが公開可能になるように 追加 アプリレビュー連絡先情報
  • レビューノートが明確で ログインが必要な場合、 and clear reviewer notes
  • If login is required, provide a __CAPGO_KEEP_0__
App Storeのリストメタデータにポリシーとサポートのリンクを含めます。

実際のビルドのスクリーンショットを使用してください。

iPhoneの場合、
  • (6.7インチ)はデフォルトのサイズです。
  • iPadで動作する場合は、iPadのスクリーンショットもアップロードしてください。 1290 x 2796 現在認可されている大きなiPadサイズには
  • Appleはサポートサイトをプレースホルダーとして扱わないでください。実際の連絡先情報を含めるようにしてください。ユーザーはアプリの問題、フィードバック、機能要求について連絡することができます。
  • App Storeのリストメタデータにポリシーとサポートのリンクを含めます。 2064 x 2752 (13インチ) と 2048 x 2732 (12.9インチ)
  • iPhoneのスクリーンショットを拡大してiPadのサポートを偽装することはない

TestFlightでレビュアージャーニーをドライランする

セクション “TestFlightでレビュアージャーニーをドライランする”

実機でAppleが実行するパスを正確に走らせる:

  • TestFlightから最新のビルドをインストールする
  • レビュー用のアカウントでサインインする
  • 非表示のジェスチャーやデバッグメニューを隠さずに
  • 購入、復元、サブスクリプション管理フローを完了する
  • パーミッションが拒否された場合でも、アプリが正しく動作することを確認する

インアプリ購入要件

「インアプリ購入要件」

価格透明性(重要)

「価格透明性(重要)」

Appleは購入前に明確な価格の披露が必要です:

必須要素:

  • 購入ボタン前に正確な価格を表示する
  • 購入金額に対してユーザーが何を得るかを明確に示す
  • 課金時期を示す
  • 一般的な拒否理由:

Common Rejection:

「サブスクリプション価格は明確かつ事前提示でなければなりません。

:::caution 価格一貫性 すべての価格は次のものと一致する必要があります:

  • App Store メタデータリスト
  • インアプリ購入画面
  • サブスクリプション管理画面

ストアリスト画面とアプリ画面の間で$1の差でも自動的に拒否される

サブスクリプションプランの表示

「サブスクリプションプランの表示」セクション

必要な披露:

  • すべてのサブスクリプションのレベルを一緒に表示する
  • 各レベルの機能の明確な比較
  • プレミアムレベルへの自動切り替えをUIのトリックで行わない
  • キャンセル方法の簡単な位置付け

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. アプリのクラッシュまたは機能の不具合」セクション

なぜ失敗するのか:

  • アプリ起動時にクラッシュする
  • 購入フローが完了しない
  • スクリーンショットに表示されている機能が機能しない

対策:

  • 実機でテストする (シミュレータだけでは)
  • すべてのサブスクリプションフローをエンドツーエンドでテストする
  • 受け取り証明書の検証が正常に動作することを確認する
  • ネットワークエラーのハンドリングを確認する

なぜ失敗するのか:

  • スクリーンショットは現在のビルドにない機能を表示している
  • 説明では実際に存在しない機能を記載している
  • メタデータの価格設定がアプリ内価格設定と異なる

メタデータチェックリスト

対策:

// Document exactly what's in each tier
const 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 description

なぜ失敗するのか:

  • カメラ/位置情報/健康情報の許可を求めることなく説明
  • 許可の要求が複数の画面奥に埋め込まれている
  • 曖昧または一般的な許可の説明

対策:

アップデートを 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>

なぜ失敗するのか:

  • 「世界で#1のアプリ」などの証拠なしの主張
  • 「無制限」な機能が実際には制限がある
  • 「限りある時間」などの偽の緊急感の使用

説明ガイドライン例

追加の説明ガイドライン

対策:

  • 説明では具体的かつ事実に基づいて記述する
  • 超lativesを使用しない
  • ユーザーに偽の不足感を与えない

5. 非表示のキャンセルプロセス

セクション「5. 非表示のキャンセルプロセス」

なぜ失敗するか:

  • キャンセル方法の説明がない
  • キャンセルボタンが非表示または隠されている
  • Appleのネイティブフローを使用しない複数ステップのキャンセルプロセス

対策:

// Always inform users about cancellation
function 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はプライバシー要件を大幅に厳格化しました。

必要な披露

各権限の場合:

なぜ必要なのか(具体的な用途)

  1. どの時点で使用されるか
  2. データの保存/共有方法
  3. オプションか必須か
  4. コピー
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 年に不正確なプライバシー ラベルは、一般的な却下理由です。データ収集を慎重に検討してください。

提出前にチェックリスト

  1. すべての購入フローのテスト

    • 各サブスクリプションのレベルを購入してください
    • 無料トライアルをテストしてください
    • 導入オファーが正しく適用されることを確認してください
    • 購入を復元してください
    • ファミリーシェアリング (有効の場合) を確認してください
    • 複数のデバイスでテストしてください
  2. 価格の一貫性を確認してください

    • App Store のメタデータがインアプリ価格と一致することを確認してください
    • すべての通貨が正しいことを確認してください
    • 試行期間の説明と一致するか確認する
    • 導入オファーの条件が正確か確認する
  3. 全てのコピーを確認する

    • プレースホルダーテキストを削除する
    • 実行可能なテストが可能な宣言を確認する
    • 文法とスペルを確認する
    • 現在のビルドと一致する説明を確認する
    • 競合他社の言及を削除する
  4. 権限をテストする

    • 必要な権限のみを要求する
    • 権限を要求する前に明確な説明を表示する
    • 「拒否」フローをテストする (アプリは正常に動作するはず)
    • Info.plistの説明が明確であることを確認する
  5. テストアカウントを準備する

    • レビュー中に有効なまま残るレビュー用アカウントを作成する
    • App Review情報にログイン情報を記載する
    • レビュアーが支払い壁を通過し購入フローを完了できることを確認する
    • 必要に応じて、Notesフィールドに追加アカウントまたはアプリ固有のSwitchを含める
  6. メタデータを確認する

    • スクリーンショットが現在のUIと一致する
    • サポートURLに実際の連絡先情報が含まれている
    • プライバシーポリシーURLが入力されている
    • ビルド内のコンテンツと一致する年齢制限が設定されている
    • アプリプレビュー動画(有効な場合)が現在のバージョンを表示している
    • 機能の正確な説明
    • プライバシーポリシーはアプリ内およびストアのリストからアクセスできます
  7. 詳細なレビューノートを書く

    Contact:
    Name: Jane Developer
    Email: review@yourapp.com
    Phone: +1 555-0100
    Test Account:
    Email: reviewer@test.com
    Password: TestPass123!
    This account does not expire during review.
    Testing Instructions:
    1. Log in with test account above
    2. Tap "Upgrade to Premium" button
    3. Select "Monthly Premium" subscription
    4. Complete purchase (no charge in sandbox)
    5. Verify premium features unlock
    Note: Subscription pricing is clearly shown before purchase.
    Cancellation instructions are in Settings > Account.

App Storeのレビューのタイムライン

標準レビュー: 24-48時間 ピーク期間: 3-5日 (App Storeのホリデーリリース) 週末: レビューが処理されていません 優先レビュー: 緊急修正用のバグ修正が可能 (App Store Connect からリクエストしてください)

App Store Connect でよく見るステータス:

  • Waiting for Review
  • In Review
  • Pending Developer Release
  • Rejected

2026 年の提出焦点

2026 年の提出焦点

現在の焦点領域

現在の焦点領域

1. サブスクリプションの明確性

  • iOSアプリストアレビューのためのネイティブ購入
  • 比較対象のアプリの価格を隠すような「暗いパターン」は使用しないでください
  • ダウングレード/アップグレードのパスは明確でなければなりません

2. メタデータの正確さ

  • レビューされるビルドと一致するスクリーンショットが必要です
  • iPadのサポートが有効になっている場合、iPad用のスクリーンショットは必須です
  • サポートURLとプライバシーポリシーは提出前にすでに公開されている必要があります

3. プライバシーとレビュー詳細の品質

  • SDKが実際に収集するものと一致するプライバシー情報が必要です
  • アプリレビューの連絡先情報とメモは最初の提出時に完了している必要があります
  • デモクレデンシャルはレビュー期間中に有効なままにしてください

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>
);
}
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>
);
}
  1. 却下の理由をよく読み

    • 具体的なガイドラインを確認する (例:3.1.1、5.1.1)
    • Appleが指摘した問題を完全に理解する
  2. 根本的な問題を修正する

    • 問題を根本的に修正するだけではなく、根本的な原因を修正する
    • 修正を徹底的にテストする
    • 変更した内容をドキュメント化する
  3. 対応センターで回答する

    Thank you for your feedback. I have addressed the issue:
    Issue: Subscription pricing not clear upfront
    Fix: Added explicit pricing display on subscription selection
    screen showing "$9.99/month" before purchase button. Also added
    cancellation instructions on the same screen.
    The changes are in this submission and can be tested using the
    provided test account.
  4. すぐに再提出する

    • 再提出は通常速くレビューされる
    • 通常24時間以内

あなたが拒否が間違っていることを信じる場合:

App Storeの説明プロセス

  1. App Store Connectで「抗議」ボタンをクリックする
  2. 明確な証拠を提供する:
    • コンプライアンスを示すスクリーンショット
    • iOS App Store レビューのためのネイティブ購入
    • 具体的なガイドラインへの参照
  3. 要件を満たす方法の説明
  4. プロフェッショナルで事実に基づいた

テストアカウントの提供

ドキュメントの例

追加リソース

サポート

サポート

問題が解決しない場合

アプリレビューの問題や個別のアシスタンスが必要ですか? Capgoのチームと専門家と電話で会議を予約してください 以下の専門的なサポートに対して

  • IAPの実装の確認と最適化
  • App Storeのレビューの準備と戦略
  • 提出物のチェックリストの確認
  • 却下の解決と異議申し立て
  • 完全なテストと検証

Capgoの専門家は、IAPのためのiOS App Storeのレビューのガイドラインを超えて、数百のアプリをレビューに通わせました!

IAPのためのiOS App Storeのレビューのガイドラインから続けてください

セクションのタイトル “IAPのためのiOS App Storeのレビューのガイドラインから続けてください”

あなたが使用している IAPのためのiOS App Storeのレビューのガイドライン ストアの承認と配布を計画するには、接続する Using @capgo/native-purchases Using @capgo/native-purchases のネイティブ機能 Using @capgo/capacitor-in-app-review Using @capgo/capacitor-in-app-review の実装詳細 Using @capgo/capacitor-in-app-review Using @capgo/capacitor-in-app-review のネイティブ機能 Using @capgo/capacitor-native-market Using @capgo/capacitor-native-market の実装詳細 Using @capgo/capacitor-native-market Using @capgo/capacitor-native-market のネイティブ機能