コンテンツにスキップ

iOS サブスクリプション グループを作成

サブスクリプション グループは、iOSアプリで複数のサブスクリプション レベルを整理および管理するために不可欠です。機能を実装するには、アップグレード、ダウン グレード、クロス グレードの機能を理解することは不可欠です。

サブスクリプション グループとは何か

「サブスクリプション グループとは何か」のセクション

サブスクリプション グループは、ユーザーが選択できる関連するサブスクリプションの集合体です。ユーザーは、グループ内で 1 つのサブスクリプションにのみサブスクライブできます。サブスクリプションを切り替えると、Apple は自動的に移行を処理します。

サブスクリプション グループにより:

  • 段階的な価格設定: 基本、プレミアム、そして究極のプランを提供
  • 異なる期間: 月額、年額、そしてライフタイムのオプション
  • アップグレード/ダウン グレード ロジック: サブスクリプションの変更を自動的に処理
  • 簡素化された管理: 関連するサブスクリプションをグループ化

サブスクリプション レベル

サブスクリプション レベル

グループ内では、各サブスクリプションは、値が最も高いレベル (レベル 1) から最も低い値までランク付けされます。このランク付けは、サブスクリプションの変更がどのように分類されるかを決定します。

サブスクリプション グループ階層

レベル例

レベル 1

(最高値) プレミアム 年間 ($99.99/年)

  • アウトレーチャー 月額 ($19.99/月)
  • レベル 2

(中間値) __CAPGO_KEEP_0__

  • __CAPGO_KEEP_0__ (1年 $49.99)
  • __CAPGO_KEEP_1__ (月額 $9.99)

レベル 3 (最低価格)

  • __CAPGO_KEEP_0__ (年額 $29.99)
  • __CAPGO_KEEP_1__ (月額 $4.99)

サブスクリプション変更の種類

サブスクリプション変更の種類

Appleは、レベルランキングに基づいて3種類のサブスクリプション変更を自動的に処理します。

1. アップグレード

レベル 3に進む

レベル 3に進む 上位層 __CAPGO_KEEP_0__ (例: level 2 → level 1).

動作:

  • 直ちに ユーザーは残り時間分の割引を受け取ります
  • 残り時間分の割引を受け取る 新しいサブスクリプションはすぐに始まります 例:
  • コピー

2. ダウングレード

// User currently has: Standard Monthly (Level 2)
// User upgrades to: Premium Annual (Level 1)
// Result: Immediate access to Premium, refund for unused Standard time

ユーザーは残り時間分の割引を受け取ります

セクションのタイトル “2. ダウングレード”

レベルを 下の サブスクリプションに切り替える (例: レベル 1 → レベル 2).

動作:

  • 効果が現れるのは 次回の更新日
  • ユーザーは現在のサブスクリプションを利用できるまでは変わりません
  • 新しいサブスクリプションは自動的に有効になります

例:

// User currently has: Premium Annual (Level 1)
// User downgrades to: Standard Monthly (Level 2)
// Result: Premium access continues until annual renewal date, then switches

同じレベルで別のサブスクリプションに切り替える 同じレベルでサブスクリプションを切り替える.

期間が異なる場合の動作は期間によって異なります:

期間が異なる → 以下のようになります ダウングレード

  • 次回の更新日付で効果を発揮
  • 例:月額プレミアム(レベル1)→ 年額プレミアム(レベル1)

同じ期間 → 以下のようになります アップグレード

  • 即時有効
  • 例:プレミアム月額(レベル1)→アルティメット月額(レベル1)

サブスクリプション グループの作成

「サブスクリプション グループの作成」のセクション
  1. サブスクリプションに移動

    App Store Connectでアプリを選択し、 Monetize > サブスクリプション.

  2. グループの作成

    「サブスクリプション グループ」に隣接して新しいグループを作成するには、 + グループの名前

  3. 選択したサブスクリプションを反映する説明的な名前を選択してください:

    Choose a descriptive name that reflects the subscriptions it contains:

    • “プレミアム アクセス”
    • “クラウド ストレージ プラン”
    • “プロ機能”
  4. サブスクリプションを追加する

    グループを作成した後、個別のサブスクリプションを追加します。各サブスクリプションにはレベルランキングがあります。

  5. レベルランキングを設定する

    サブスクリプションを、値が高い順 (1) から低い順に並べます。考慮する点は次のとおりです。

    • 年間プランは月額プランよりもランクが高い
    • 価格が高い層は価格が低い層よりも上にランク付けされる
    • 最高ランクはプレミアム/最終層

native-purchases プラグインは自動的にサブスクリプション グループ ロジックを処理します:

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Fetch all subscriptions in a group
const { products } = await NativePurchases.getProducts({
productIdentifiers: ['premium_monthly', 'premium_annual', 'ultimate_monthly'],
productType: PURCHASE_TYPE.SUBS,
});
// Display current subscription using StoreKit transactions
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const activeSubs = purchases.filter((purchase) => purchase.isActive);
// Detect pending downgrade/cancellation (StoreKit sets willCancel === true)
const pendingChange = purchases.find((purchase) => purchase.willCancel === true);
if (pendingChange) {
console.log('Subscription will stop auto-renewing on', pendingChange.expirationDate);
}
// Purchase (StoreKit handles upgrades/downgrades automatically)
await NativePurchases.purchaseProduct({
productIdentifier: 'premium_annual',
productType: PURCHASE_TYPE.SUBS,
});
// Listen for StoreKit updates (fires on upgrades/downgrades/refunds)
NativePurchases.addListener('transactionUpdated', (transaction) => {
console.log('Subscription updated:', transaction);
});

サブスクリプションの変更を処理する

「サブスクリプションの変更を処理する」のセクション
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Get current subscription info
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const currentSubscription = purchases.find(
(purchase) => purchase.subscriptionState === 'subscribed',
);
if (currentSubscription) {
// StoreKit reports if user cancelled auto-renew
if (currentSubscription.willCancel) {
console.log(
`User cancelled. Access remains until ${currentSubscription.expirationDate}`,
);
}
if (currentSubscription.isUpgraded) {
console.log('User recently upgraded to this plan.');
}
}
// Listen for automatic upgrades/downgrades
NativePurchases.addListener('transactionUpdated', (transaction) => {
console.log('Subscription changed!', transaction);
if (transaction.subscriptionState === 'revoked') {
revokeAccess();
} else if (transaction.isActive) {
unlockPremiumFeatures();
}
});

常に、変更の動作を明確に伝えます:

アップグレードの場合:

“You’ll get immediate access to Premium features. We’ll prorate your current subscription.”

For Downgrades:

「プレミアムアクセスは[更新日]まで維持されます。次に、標準プランに切り替わります。」

For Crossgrades:

「次回の更新日[日付]に、プランは年間課金に切り替わります。」

ベストプラクティス transactionUpdated グループ組織

「サーバー通知をリスナーと組み合わせて、クライアントとバックエンドが同期されるようにします。」

サーバーモニタリング

グループ組織

ベストプラクティス
  • 関連するサブスクリプションを同じグループに保つ
  • 無関係な機能を混ぜない (例:ストレージと広告削除)
  • 異なる機能セットごとに別々のグループを作成する
  • 年間プラン → 月額と同じレベルでは月額より高い
  • 価格が高いプラン → 高いレベル
  • 価値を考慮するだけではなく価格を考慮する
  • 現在のサブスクリプションを明確に表示する
  • グループ内で利用可能なすべてのオプションを表示する
  • 即時の変更と更新の変更を区別する
  • プランを簡単に切り替える
  • すべてのアップグレードシナリオをテストする
  • すべてのダウングレードシナリオをテストする
  • クロスグレードの動作を検証する
  • ウェブフックの発火を確認する
Level 1: Ultimate Monthly ($19.99)
Level 2: Premium Monthly ($9.99)
Level 3: Basic Monthly ($4.99)
  • 基本プラン → プレミアムプラン: 即時アップグレード
  • プレミアムプラン → アンリミテッドプラン: 即時アップグレード
  • アンリミテッドプラン → プレミアムプラン: 再契約時にダウングレード
  • 基本プラン → アンリミテッドプラン: 即時アップグレード

シナリオ 2: 混合期間プラン

「シナリオ 2: 混合期間プラン」
Level 1: Premium Annual ($99.99/year)
Level 2: Premium Monthly ($9.99/month)
  • 月額 → 年額: 再契約時にクロスグレード
  • 年額 → 月額: 再契約時にダウングレード

シナリオ 3: 多層・多期間

「シナリオ 3: 多層・多期間」
Level 1: Ultimate Annual ($199/year)
Level 2: Ultimate Monthly ($19.99/month)
Level 3: Premium Annual ($99/year)
Level 4: Premium Monthly ($9.99/month)
Level 5: Basic Annual ($49/year)
Level 6: Basic Monthly ($4.99/month)

このセットアップは、明確なアップグレード/ダウン グレードロジックを維持しながら、最大限の柔軟性を提供します。

グループ内に表示されないサブスクリプション:

  • 正しいグループに割り当てられていることを確認してください
  • 「準備中」ステータス以上のステータスでいることを確認してください
  • 製品IDが正しいことを確認してください

不正なアップグレード/ダウン グレード動作:

  • レベルランキングを確認してください (1 = 最高)
  • サブスクリプションの階層が意味をなしていることを確認してください
  • レベルが正しく設定されていることを確認してください

異なるグループの製品:

  • ユーザーは同時に複数のグループにサブスクライブできます
  • これは意図的な動作です - 関連する製品を同じグループに残してください

__CAPGO_KEEP_0__が複数のサブスクライブを示す:

  • サブスクライブが異なるグループにあるかどうかを確認する
  • ファミリー シェアリングを介してユーザーがサブスクライブしていないことを確認する
  • App Store Connectでサブスクライブのステータスを確認する

詳細については、 サブスクライブ グループに関する公式のAppleドキュメントを参照してください.