メインコンテンツまでスキップ

サブスクリプション

一覧と詳細​

ascelerate sub groups <bundle-id>
ascelerate sub list <bundle-id>
ascelerate sub info <bundle-id> <product-id>

3つのコマンドはいずれも機械可読な出力のための --json を受け付けます(規約)。info は価格未設定の警告を hasPricing ブール値として報告します。

サブスクリプションの作成、更新、削除​

ascelerate sub create <bundle-id> --name "Monthly" --product-id <product-id> --period ONE_MONTH --group-id <group-id>
ascelerate sub update <bundle-id> <product-id> --name "Monthly Plan"
ascelerate sub delete <bundle-id> <product-id>

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

ascelerate sub create-group <bundle-id> --name "Premium"
ascelerate sub update-group <bundle-id> --name "Premium Plus"
ascelerate sub delete-group <bundle-id>

審査への提出​

ascelerate sub submit <bundle-id> <product-id>

プロダクトは保留中のバージョン(「Prepare for Submission」「Ready for Review」または却下状態のバージョン)がある場合に提出できます。前回の承認後に編集された承認済みプロダクトも含まれます。保留中のバージョンがない場合、コマンドはリクエストを送信する前に停止します。sub info は保留中のバージョンがあれば表示します。

サブスクリプションのローカライゼーション​

ascelerate sub localizations view <bundle-id> <product-id>
ascelerate sub localizations export <bundle-id> <product-id>
ascelerate sub localizations import <bundle-id> <product-id> --file sub-de.json

グループのローカライゼーション​

ascelerate sub group-localizations view <bundle-id>
ascelerate sub group-localizations export <bundle-id>
ascelerate sub group-localizations import <bundle-id> --file group-de.json

インポートコマンドは、存在しないロケールを確認のうえ自動的に作成するため、App Store Connectにアクセスせずに新しい言語を追加できます。

価格設定​

サブスクリプションの価格設定は地域ごとに行われます。App内課金のような自動均等化の概念はないため、価格を設定したい各地域に独自のレコードが必要です。CLIでは単一の地域の価格を設定するか、Appleの現地通貨価格層を使用してすべての地域に価格を展開することができます。

# 現在の地域別価格を表示(存在しない場合は警告)
ascelerate sub pricing show <bundle-id> <product-id>

# JSONとして表示(地域ごとの価格、通貨、開始日、保持フラグ)
ascelerate sub pricing show <bundle-id> <product-id> --json

# ある地域で利用可能な価格層を一覧表示
ascelerate sub pricing tiers <bundle-id> <product-id> --territory USA

# 単一地域の価格を設定
ascelerate sub pricing set <bundle-id> <product-id> --price 4.99 --territory USA

# すべての地域に価格を展開(地域ごとに1回のPOST)
ascelerate sub pricing set <bundle-id> <product-id> --price 4.99 --equalize-all-territories

価格変更と既存サブスクライバー​

Appleは、価格変更の方向によって既存サブスクライバーへの扱いを変えます。sub pricing set は影響を受ける各地域の現在の価格を取得し、変更を分類して、適切な動作を強制します。

  • 値下げ: 既存サブスクライバーは自動的に低い価格に移行します。インタラクティブな実行では警告とともに確認を求めます。--yes モードでは、収益への影響を確認するために --confirm-decrease を追加する必要があります — --yes だけでは不十分です。
  • 値上げ: 既存サブスクライバーをどのように扱うかを明示的に選択する必要があります。以下のいずれかが設定されない限り、コマンドはエラーになります:
    • --preserve-current — 既存サブスクライバーを以前の価格のまま維持
    • --no-preserve-current — Appleの通知期間後に既存サブスクライバーに新しい価格を適用
  • 新規地域(既存価格なし): 考慮すべき既存サブスクライバーはなく、フラグは任意です。
  • 変更なし: 何もせずスキップされます。

--equalize-all-territories でも同じルールが集約的に適用されます。展開先の地域のいずれかが値上げの場合、保持フラグはすべてに対して必要です。--yes モードで値下げが含まれる場合、--confirm-decrease が必要です。

# 標準的なグローバル値上げ: すべての地域で $4.99 → $9.99、
# 既存サブスクライバーは旧価格のまま
ascelerate sub pricing set myapp com.example.monthly \
--price 9.99 --territory USA --equalize-all-territories \
--preserve-current

製品間で価格をコピー​

# 各地域の現在価格をJSONにエクスポート
ascelerate sub pricing export <bundle-id> <product-id> --output prices.json

# 別のサブスクリプションに適用(同じアプリでも別のアプリでも可)
ascelerate sub pricing import <other-bundle-id> <other-product-id> --file prices.json

ファイルには地域コードをキーとした顧客価格が保存されます(保持中の旧価格や将来適用予定の価格はエクスポートに含まれません)。インポート時には各価格が顧客価格に基づいて適用先サブスクリプション自身の価格層と照合されるため、同じファイルを製品やアプリをまたいで使えます。インポートはファイルに記載された地域のみを変更し、すでに記載どおりの価格になっている地域はスキップし、set と同じ値上げ・値下げの安全ルール(--preserve-current/--no-preserve-current と --confirm-decrease を含む)を適用します。

適用先の価格層にない価格があるとインポートは失敗し、最も近い価格層が表示されます。--snap を付けると、そのような価格はそれぞれ最も近い価格層(同じ距離なら安いほう)になり、確定の前に一覧表示されます。

複数地域への書き込み中に発生した App Store Connect の一時的なエラー(HTTP 429/5xx)は自動的に再試行されます。まずその場でバックオフ付きで再試行し、実行の最後にもう一度まとめて再試行します。それでも失敗した地域は最終レポートに一覧表示され、コマンドは非ゼロで終了します。同じコマンドを再実行すると、更新済みの地域は変更なしとしてスキップされるため、失敗した地域だけが再試行されます。

地域別の利用可否​

各サブスクリプションは、アプリとは独立した独自の地域別利用可否を持ちます。デフォルトではサブスクリプションはアプリの地域を継承しますが、sub availability で変更を加えると、サブスクリプションに明示的なリストが作成されます。

ascelerate sub availability <bundle-id> <product-id>
ascelerate sub availability <bundle-id> <product-id> --add CHN,RUS
ascelerate sub availability <bundle-id> <product-id> --remove ITA
ascelerate sub availability <bundle-id> <product-id> --available-in-new-territories true
ascelerate sub availability <bundle-id> <product-id> --plan monthly --add DEU,FRA

年間サブスクリプションは12か月契約の月払いとしても提供できます(毎月請求。米国とシンガポールでは提供されません)。この課金プランには独自の地域リストがあり、--plan monthly を付けると表示・編集できます。--plan を省略すると、通常の前払いプランが対象になります。

導入オファー​

導入オファーは新規サブスクライバーを対象とします — 無料トライアルおよび導入時の割引です。

ascelerate sub intro-offer list <bundle-id> <product-id>

# 無料トライアル(価格不要;--periods と --duration で期間を設定)
ascelerate sub intro-offer create <bundle-id> <product-id> \
--mode FREE_TRIAL --duration ONE_WEEK --periods 1 --territories all

# Pay-as-you-go割引(3ヶ月、月額$0.99、USA限定)
ascelerate sub intro-offer create <bundle-id> <product-id> \
--mode PAY_AS_YOU_GO --duration ONE_MONTH --periods 3 \
--territories USA --price 0.99

# 終了日のみを更新(他のフィールドは削除+再作成が必要)
ascelerate sub intro-offer update <bundle-id> <product-id> <offer-id> --end-date 2026-12-31

ascelerate sub intro-offer delete <bundle-id> <product-id> <offer-id>

モード:FREE_TRIAL、PAY_AS_YOU_GO、PAY_UP_FRONT。--territories は必須です。USA,TUR のような国または地域のコード、または all を指定します。Appleは国または地域ごとに1つのオファーを保持し、ascelerateはそれらを1回のリクエストで作成します。既存のオファーと期間が重なる国や地域、または今後開始するオファーがすでにある国や地域はスキップされます。有料オファーの --price は最初の国または地域の通貨で指定し、その他の国や地域にはAppleの同等の価格が適用されます。--price は2つの有料モードでは必須で、FREE_TRIAL では使用できません。

プロモーションオファー​

プロモーションオファーは既存サブスクライバーを対象とします — 通常はアプリ内のアップセルフローで使用されます。--code の値(オファーコード)は、クライアントがオファーを利用する前に、サーバーが実行時に生成する署名付きペイロードに埋め込まれている必要があります。

ascelerate sub promo-offer list <bundle-id> <product-id>
ascelerate sub promo-offer info <bundle-id> <product-id> <offer-id>

# 作成 — 単一地域または --equalize-all-territories パターンを使用
ascelerate sub promo-offer create <bundle-id> <product-id> \
--name "Loyalty 50%" --code LOYALTY50 \
--mode PAY_AS_YOU_GO --duration ONE_MONTH --periods 3 \
--price 4.99 --territory USA --equalize-all-territories

# 価格のみを更新(他のフィールドは削除+再作成が必要)
ascelerate sub promo-offer update <bundle-id> <product-id> <offer-id> \
--price 5.99 --equalize-all-territories

ascelerate sub promo-offer delete <bundle-id> <product-id> <offer-id>

リテンションメッセージとオファー​

サブスクライバーが App Store のサブスクリプション設定から解約しようとすると、App Store はリテンションメッセージを表示できます。サブスクライバーの言語の見出しと本文、任意の画像、そして継続を促すオファーです。メッセージは App に属し、App Review の審査を受けます。各サブスクリプションは1つのメッセージを表示し、その中で任意のリテンションオファーを提示できます。

ascelerate sub retention-message list <bundle-id>
ascelerate sub retention-message info <bundle-id> "Stay with us"
ascelerate sub retention-message create <bundle-id> --name "Stay with us" \
--locale en-US --header "Before you go" --body "Your plan gets new features every month."
ascelerate sub retention-message localizations set <bundle-id> "Stay with us" \
--locale ja --header "解約する前に" --body "プランには毎月新しい機能が追加されます。"
ascelerate sub retention-message image upload <bundle-id> "Stay with us" ./retention.png
ascelerate sub retention-message submit <bundle-id> "Stay with us"
ascelerate sub retention-message new-version <bundle-id> "Stay with us"

# リテンションオファー、次にサブスクリプションが表示するメッセージとオファー
ascelerate sub retention-offer create <bundle-id> <product-id> \
--name "Half off" --offer-id stay.half --mode PAY_AS_YOU_GO --duration ONE_MONTH --periods 3 \
--paid-months 6 --wait-months 12 --price 4.99 --territories all
ascelerate sub retention-offer update <bundle-id> <product-id> stay.half --paid-months 3
ascelerate sub retention-message assign <bundle-id> <product-id> "Stay with us" --offers stay.half
  • テキストと画像: 見出しは66文字、本文は144文字までです。画像は透明部分のない16:9で、3840×2160(PNG または JPEG)または5244×2950(PNG)、バージョンごとに1枚です。
  • バージョン: メッセージの未公開バージョンは一度に1つだけです。App Review がバージョンを受け取った後、new-version で次のバージョンを開始します。submit はメッセージを下書きの提出に追加します。提出は apps review submit で行ってください。
  • オファーの対象: --paid-months か月(1〜24、36、48、60)以上支払ったサブスクライバー、および --wait-months を指定した場合は前回のオファーから2〜24か月が経過したサブスクライバーです。オファーの作成後に変更できるのはこの2つだけで、待機期間は一度設定すると削除できません。
  • 価格: 有料オファーの --price は --territories の最初の国または地域の価格で、その他にはAppleの同等の価格が適用されます。無料トライアルには価格がありません。--plan monthly は年間サブスクリプションの月払いプランを対象にします(デフォルトは前払い)。

オファーコード​

サブスクリプション用の引換可能コードで、2種類あります:

  • ワンタイムユースコード:Appleが非同期でN個の一意のコードをバッチで生成します。
  • カスタムコード:開発者が指定する文字列で、N回まで使用可能です。
ascelerate sub offer-code list <bundle-id> <product-id>
ascelerate sub offer-code info <bundle-id> <product-id> <offer-code-id>

# オファーコードを作成(すべてのオファー属性を含む)
ascelerate sub offer-code create <bundle-id> <product-id> \
--name "Launch Free Month" \
--eligibility NEW \
--offer-eligibility STACK_WITH_INTRO_OFFERS \
--mode FREE_TRIAL --duration ONE_MONTH --periods 1 \
--price 0 --territory USA --equalize-all-territories

ascelerate sub offer-code toggle <bundle-id> <product-id> <offer-code-id> --active true

# ワンタイムユースコードを生成(非同期)
ascelerate sub offer-code gen-codes <bundle-id> <product-id> <offer-code-id> \
--count 500 --expires 2026-12-31

# 生成完了後に実際のコード値を取得
ascelerate sub offer-code view-codes <one-time-use-batch-id> --output codes.txt

# 開発者指定のカスタムコードを追加
ascelerate sub offer-code add-custom-codes <bundle-id> <product-id> <offer-code-id> \
--code SUBPROMO --count 1000 --expires 2026-12-31

サブスクリプションオファーコードの顧客対象:NEW、EXISTING、EXPIRED。オファー対象:STACK_WITH_INTRO_OFFERS または REPLACE_INTRO_OFFERS。

サブスクリプショングループを審査に提出​

サブスクリプショングループは次のアプリバージョンと一緒に審査されます。sub submit-group は sub submit のグループレベルに相当します。

ascelerate sub submit-group <bundle-id>

グループ自体に保留中のバージョン(たとえば編集されたグループのローカライズ)が必要です。ない場合、コマンドはリクエストを送信する前に停止します。

プロモーション画像​

App Storeでサブスクリプションと並んで表示されるプロモーション画像をアップロードします。

ascelerate sub images list <bundle-id> <product-id>
ascelerate sub images upload <bundle-id> <product-id> ./hero.png
ascelerate sub images delete <bundle-id> <product-id> <image-id>

App Reviewスクリーンショット​

各サブスクリプションは最大1つのApp Reviewスクリーンショットを持つことができます。アップロードすると既存のスクリーンショットが置き換えられます。

ascelerate sub review-screenshot view <bundle-id> <product-id>
ascelerate sub review-screenshot upload <bundle-id> <product-id> ./review.png
ascelerate sub review-screenshot delete <bundle-id> <product-id>

画像およびスクリーンショットのアップロードはAppleの3ステップフローを使用します(予約 → チャンクをPUT → MD5でコミット)。単一の upload 呼び出しで3つのステップすべてを処理します。

ウィンバックオファー​

ウィンバックオファーは、サブスクリプションが終了した人を対象としたオファーです。App Store は開始日から任意の終了日まで、戻ってもらうための割引や無料期間を提示します。承認済みのサブスクリプションのみが利用できます。

ascelerate sub win-back-offer list <bundle-id> <product-id>
ascelerate sub win-back-offer info <bundle-id> <product-id> comeback.half
ascelerate sub win-back-offer create <bundle-id> <product-id> \
--name "Come back" --offer-id comeback.half --mode PAY_AS_YOU_GO --duration ONE_MONTH --periods 3 \
--since-months 3-12 --paid-months 6 --end-date 2027-01-31 --priority high --promote \
--price 4.99 --territories all
ascelerate sub win-back-offer update <bundle-id> <product-id> comeback.half --since-months 2-24 --end-date 2027-03-31
ascelerate sub win-back-offer delete <bundle-id> <product-id> comeback.half
  • オファーの対象: サブスクリプションが --since-months か月前(1〜23から2〜24か月の範囲)に終了し、--paid-months か月(1〜24、36、48、60)以上支払った人。--wait-months を指定した場合は、前回のオファーから2〜24か月が経過した人です。
  • 日付: --start-date に開始し(最短かつデフォルトは翌日)、--end-date を指定した場合は少なくとも3日後に終了します。
  • App Store での表示: --priority high は他のオファーより先に表示します。--promote を指定すると、App Store が Apple の生成するアセットでオファーを宣伝します。
  • 価格: リテンションオファーと同様に、--price は --territories の最初の国または地域の価格で、その他にはAppleの同等の価格が適用されます。無料トライアルには価格がありません。PAY_AS_YOU_GO のオファーの期間は、サブスクリプション自体の期間です(年間サブスクリプションでは ONE_YEAR)。
  • 変更: 対象条件、日付、優先度、宣伝は変更できます。それ以外を変えるには、オファーを削除して作り直してください。