メインコンテンツへスキップ

iOSの自動更新サブスクリプションの作成

GitHub

自動更新サブスクリプションは、iOSアプリ内のコンテンツ、サービス、またはプレミアム機能への継続的なアクセスを提供します。このガイドでは、App Store Connectでのサブスクリプション作成手順を説明します。

自動更新サブスクリプションは、ユーザーがキャンセルしない限り、各請求期間の終了時に自動的に更新されます。以下のような用途に最適です:

  • プレミアムコンテンツや機能
  • 広告なしの体験
  • クラウドストレージと同期
  • ストリーミングサービス
  • プロフェッショナル向けツールやユーティリティ

サブスクリプションを作成する前に、以下の準備が必要です:

  1. サブスクリプショングループの作成 サブスクリプションを整理するため
  2. Apple Developer Programの有効なメンバーシップが必要です
  3. App Store Connectで銀行口座と税務情報を設定してください
  1. Subscriptionsへ移動

    App Store Connectでアプリを選択し、以下へ進みます 収益化 > サブスクリプション.

    サブスクリプショングループを選択するか、必要に応じて新規作成してください。

    Subscriptionsへ移動

  2. 新規サブスクリプションを作成

    次をクリックします: + サブスクリプショングループの横にあるアイコンから、新しいサブスクリプションを追加できます。

  3. 基本情報の入力

    リファレンス名: 社内管理用の名称(ユーザーには表示されません)

    • 例: “Premium Monthly”, “Ultimate Annual”, “Basic Plan”

    プロダクトID: このサブスクリプションの一意識別子(後から変更できません)

    • 形式: com.yourcompany.yourapp.premium_monthly
    • 分かりやすい小文字の名称をアンダースコアで繋いで使用してください
    • native-purchases pluginの設定に必須です

    サブスクリプションの詳細を入力

  4. 期間の設定

    利用可能なオプションからサブスクリプションの期間を選択してください:

    • 1週間
    • 1ヶ月
    • 2ヶ月
    • 3ヶ月
    • 6ヶ月
    • 1年

    この期間に基づいて、ユーザーへの請求サイクルが決定されます。

  5. 価格の設定

    クリック サブスクリプション価格の追加 価格を設定するには:

    基本対象地域: 主要な市場を選択してください(通常は自国)

    料金: サブスクリプション価格を設定

    • Appleが他の通貨へ自動的に換算します
    • Appleの価格ティアから選択
    • 顧客が感じる価値や市場レートを考慮してください

    価格を設定

  6. ファミリー共有(オプション)

    ファミリー共有を有効にするかどうかを選択します。有効にすると、最大6人の家族がサブスクリプションを利用できます。

    有効にする条件:

    • コンテンツがファミリー利用に適している場合
    • 価値提案を強化したい場合
    • ビジネスモデルが対応している場合

    無効にする条件:

    • サブスクリプションが個人利用限定の場合
    • コンテンツがユーザーごとにパーソナライズされている場合
    • ユーザーあたりの収益を最大化したい場合
  7. ローカライズを追加

    アプリがサポートするすべての言語で、サブスクリプションの表示情報を追加してください:

    サブスクリプションの表示名: ユーザーに表示される名称(例:「プレミアム月額プラン」)

    説明: サブスクリプションの内容に関する簡潔な説明

    • 簡潔に、メリットが伝わるように記述してください
    • 主要な機能を記載する
    • 価値提案(バリュープロポジション)を強調する

    ローカライズを追加する

  8. App Store プロモーション用画像(任意)

    このサブスクリプションのプロモーション用画像をアップロードしてください (312x390 ピクセル):

    • App Store のサブスクリプションページに表示されます
    • アプリのデザインと一致させてください
    • 分かりやすくサブスクリプション名を入力してください
  9. 保存して送信

    クリック 保存 サブスクリプションを作成するには、

    最初のサブスクリプションの場合:

    • 新しいアプリのバージョンと一緒に提出する必要があります
    • 次回のApp Store申請時に含めてください
    • 単独での提出はできません

    2回目以降のサブスクリプション:

    • サブスクリプションページから直接申請可能
    • アプリの新規バージョン更新は不要
    • 初回サブスクリプションの承認後に利用可能

サブスクリプションのステータス

「サブスクリプションのステータス」セクション

サブスクリプションのステータスは以下のいずれかになります:

ステータス説明テスト可能?
メタデータ不足セットアップ未完了はい (sandbox)
提出準備完了完了(未提出)はい (sandbox)
審査待ちAppleに提出済みはい (sandbox)
審査中Appleによる審査中はい (sandbox)
承認済み購入可能はい
却下修正が必要はい (sandbox)

作成後、アプリ内では以下のプロダクトIDを使用してサブスクリプションを参照してください:

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Fetch subscription products direct from StoreKit
const { products } = await NativePurchases.getProducts({
productIdentifiers: [
'com.yourcompany.yourapp.premium_monthly',
'com.yourcompany.yourapp.premium_annual',
],
productType: PURCHASE_TYPE.SUBS,
});
products.forEach((product) => {
console.log(`${product.title}: ${product.priceString}`);
console.log(`Duration: ${product.subscriptionPeriod}`);
console.log(`Description: ${product.description}`);
});
// Purchase a subscription (StoreKit 2 automatically handles intro pricing and offers)
try {
const transaction = await NativePurchases.purchaseProduct({
productIdentifier: 'com.yourcompany.yourapp.premium_monthly',
productType: PURCHASE_TYPE.SUBS,
});
console.log('Transaction ID:', transaction.transactionId);
// StoreKit receipts are included on iOS for server-side validation
await sendReceiptToBackend(transaction.receipt);
} catch (error) {
console.error('Purchase failed:', error);
}
// Check subscription status using the store's data
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const premium = purchases.find(
(purchase) => purchase.productIdentifier === 'com.yourcompany.yourapp.premium_monthly',
);
if (premium?.isActive) {
console.log('Expires:', premium.expirationDate);
console.log('Will renew:', premium.willCancel === false);
console.log('Store state:', premium.subscriptionState);
unlockPremiumFeatures();
} else {
showPaywall();
}

12ヶ月継続利用を条件とした月額プラン

「12ヶ月継続を条件とした月額プラン」セクション

App Store Connectのサブスクリプションが月額請求プランと12ヶ月の継続条件で設定されている場合、StoreKitはその製品の追加の価格条件を返すことがあります。購入前に、これらの条件を使って月額料金、契約総額、契約期間全体を表示してください。

const yearlyProduct = products.find(
(product) => product.identifier === 'com.yourcompany.yourapp.premium_annual',
);
const monthlyCommitment = yearlyProduct?.pricingTerms?.find(
(term) => term.billingPlanType === 'monthly',
);
if (yearlyProduct && monthlyCommitment) {
console.log('Monthly charge:', monthlyCommitment.billingDisplayPrice);
console.log('Total commitment:', monthlyCommitment.commitmentInfo?.priceString);
await NativePurchases.purchaseProduct({
productIdentifier: yearlyProduct.identifier,
productType: PURCHASE_TYPE.SUBS,
billingPlanType: 'monthly',
});
}

ペイウォールとエンタイトルメントのフロー全体については、次を参照してください: iOSの月額コミットメント請求プラン.

  • 月額プラン導入のハードルが低く、習慣化を促せる
  • 年額プラン: 高いLTV、低いチャーン、より高い価値
  • 複数のティア: ユーザー層に合わせたBasic、Premium、Ultimate
  • 競合分析: 類似アプリの価格設定を調査
  • 一貫した命名規則を使用: company.app.tier_duration
  • IDにティアと期間を含める: premium_monthly, ultimate_annual
  • Product IDの変更は避ける(一度設定すると固定されるため)
  • チーム向けにすべてのProduct IDをドキュメント化する
  • ファミリー向けアプリ(ゲーム、教育、エンタメ)で有効にする
  • 収益への影響を検討する
  • 共有時の挙動を徹底的にテストする
  • マーケティングで共有機能について伝える
  • すべてのサブスクリプション名と説明を翻訳する
  • 地域ごとの価格差を考慮する
  • サポートされている全言語での表示をテストする
  • 文化的に適切なマーケティング表現を使用する
  • 一貫したビジュアルスタイルを維持する
  • サブスクリプション名と主なメリットを含める
  • 季節ごとのプロモーションに合わせて更新する
  • アプリ全体のデザイン言語に合わせる

一般的なサブスクリプションのパターン

「一般的なサブスクリプションのパターン」セクション

シングルティア(フリーミアム)

「シングルティア(フリーミアム)」セクション
Free App + Premium Subscription
- Basic: Free (limited features)
- Premium Monthly: $4.99
- Premium Annual: $39.99 (save 33%)

マルチティア(Good, Better, Best)

「マルチティア(Good, Better, Best)」セクション
- Basic Monthly: $4.99
- Premium Monthly: $9.99
- Ultimate Monthly: $19.99
- Basic Annual: $49.99
- Premium Annual: $99.99
- Ultimate Annual: $199.99

消耗型 + サブスクリプションのハイブリッド

「消耗型 + サブスクリプションのハイブリッド」というセクション
- Credit packs (consumable)
- Monthly subscription (unlimited credits)
- Annual subscription (unlimited + bonus features)

アプリ内でサブスクリプションが読み込まれない場合:

  • 製品IDが完全に一致しているか確認(大文字・小文字を区別)
  • サブスクリプションがサブスクリプショングループに含まれているか確認
  • Bundle IdentifierがApp Store Connectと一致しているか確認
  • 製品作成後、2〜3時間待機してください

サブスクリプションを送信できない場合:

  • 必須項目(名前、説明、価格)をすべて入力してください
  • 少なくとも1つのローカライズを追加してください
  • 銀行・税務情報の承認状況を確認してください
  • 初回サブスクリプションか確認(アプリのバージョンが必要)

ファミリー共有がオフになっています:

  • 既に有効です(オフにできません)
  • サブスクリプションの詳細を確認してください
  • 解決しない場合はAppleサポートへ

価格ティアが利用できません:

  • 一部の地域で制限されている可能性があります
  • 別のティアを選択してください
  • 価格に関する質問はAppleへ

「Invalid Product ID」エラー:

  • リバースドメイン形式である必要があります
  • スペースや特殊文字は使用できません
  • タイポ(入力ミス)がないか確認してください
  • すべての製品間で一意であることを確認してください

詳細については、以下を参照してください: 自動更新サブスクリプションに関するApple公式ドキュメント.

「iOSの自動更新サブスクリプションの作成」から続ける

「Create iOS Auto-Renewable Subscription」内の「Keep going」セクション

使用している場合 iOSの自動更新サブスクリプションの作成 ストアの承認と配信を計画するには、これを次と連携させてください: @capgo/native-purchases を使用する 「Using @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 の使用 「@capgo/capacitor-native-market. の使用」のネイティブ機能については