iOS でカスタマーポータルページでのサブスクリプションの管理を許可する
カスタマーポータルを設定して、アプリからブラウザーで開きます。
一部の国では、外部のウェブサイトをリンクして、iOS で、アプリ内デジタル商品の決済を受け付けられます。このガイドでは、サブスクリプション管理のためにカスタマーポータルを設定し、アプリからカスタマーポータルに顧客をリダイレクトする方法について説明します。

アプリ外のリンクでサブスクリプションと決済手段を管理する
作成する内容
注
このガイドでは、サブスクリプション管理についてのみ説明します。サブスクリプションの購入を設定する場合は、事前構築された決済ページを使用して iOS でデジタル商品の決済を受け付けるをご覧ください。
このガイドでは以下の方法を説明します。
- 顧客がサブスクリプションの管理に使用できるカスタマーポータルページを設定する
- ユニバーサルリンクを使用して、ユーザーをカスタマーポータルからアプリにリダイレクトする
- Webhook を監視して、顧客のサブスクリプションステータスを更新する
対象範囲外の内容
このガイドでは、Stripe カスタマーポータルを設定し、アプリからポータルに接続する方法を説明します。以下は対象範囲に含まれません。
- サブスクリプションの購入: Stripe Checkout を使用してアプリ内の商品やサブスクリプションを販売するには、iOS で事前構築された決済ページを使用してデジタル商品の決済を受け付けるをご覧ください。
- ユーザー認証: 既存の認証プロバイダーがない場合には、Sign in with Apple (Apple でサインイン) や Firebase Authentication などのサードパーティプロバイダーを使用できます。
- ネイティブのアプリ内購入: StoreKit を使用してアプリ内購入を実装するには、Apple のアプリ内課金 ガイドをご覧ください。
ポータルを設定
まず、Stripe アカウントを登録する必要があります。
カスタマーポータルを実装する前に、ダッシュボードを使用して、ポータル内でユーザーに許可する操作を定義します。商品カタログと価格カタログに基づいて、サンドボックスと本番環境の設定を選択します。
よくある間違い
Stripe Connect でカスタマーポータルを使用している場合は、連結アカウントではなく、プラットフォームのカスタマーポータルを設定してください。
さまざまな顧客に合わせて複数のポータル設定を作成する場合 (または Connect プラットフォームで連結アカウントの設定を管理する場合) は、API を使用して行えます。
商品カタログを設定する
顧客が定期支払いのアップグレード、ダウングレード、数量の変更を実行できるようにする場合は、商品カタログの設定も必要です。これには、顧客がアップグレードまたはダウングレードできる対象の商品と価格、および顧客が数量を更新できる定期支払いが掲載されます。商品と価格の作成について、詳細は商品を作成する方法をご覧ください。カスタマーポータルを請求処理にのみ使用している場合は、商品カタログを設定する必要はありません。
ポータルには、商品カタログの以下の属性が表示されます。
- 商品名と説明: これらの属性は、ダッシュボードと API で編集できます。
- 商品ごとの数量制限: これらの属性は、ダッシュボードで編集できます。
- 金額、通貨、請求期間: これらの属性は固定されており、ダッシュボードと API で作成するときにのみ設定できます。
納税者番号の収集を有効にする
Stripe Tax を使用してサブスクリプションや請求書の税金を自動徴収する場合、カスタマーポータルで、顧客に納税番号の設定と更新を行ってもらえます。Stripe Billing はその顧客の請求書に納税者番号を追加します。顧客による納税者番号の設定を許可するには、カスタマーポータルの設定に移動して 納税者番号 をオンに切り替えます。詳細については、顧客の納税者番号がサブスクリプションと請求書でどのように機能するかをご確認ください。
Stripe Tax の設定、継続支払いの税金の徴収、カスタムの決済フローでの税金の徴収、およびラインアイテムと請求書の税率の設定の方法についてご紹介します。
プレビューしてテストする
設定を行う際に、プレビュー をクリックしてポータルをプレビューします。これにより、ポータルの読み取り専用バージョンが表示され、顧客がサブスクリプションや請求の詳細をどのように管理しているかを確認できます。
設定の保存後に、サンドボックスの顧客を使用してポータルを起動し、テストできます。ダッシュボードで顧客に移動し、アクションをクリックしてから、カスタマーポータルを開くを選択します。
ポータルを読み取り専用バージョンとしてプレビューできるのは、ダッシュボードをサンドボックス内で使用する場合のみです。ポータルをプレビューしてテストできない場合は、設定をチェックして、ポータル設定がサンドボックスに保存されていることを確認してください。プレビューとテストを有効にするには、ダッシュボードでの編集権限も変更する必要があります。
Stripe を設定するサーバー側
サーバー側
次に、Stripe CLI をインストールします。CLI は必要な Webhook のテストを提供します。
その他のインストールオプションについては、Stripe CLI を使ってみるをご覧ください。
クライアント側
Stripe iOS SDK はオープンソースです。詳細なドキュメントが提供されており、iOS 13 以降をサポートするアプリと互換性があります。
注
SDK の最新リリースおよび過去バージョンの詳細については、GitHub の Releases (リリース) ページをご覧ください。リポジトリのリリースをウォッチして、新しいリリースの公開時に通知を受け取ることも可能です。
また、SDK が Stripe への API コールを実行できるように、公開可能キーを設定する必要もあります。すぐに開始するには、導入中にクライアント側でこれをハードコード化できますが、本番環境ではサーバーから公開可能キーを取得します。
// Set your publishable key: remember to change this to your live publishable key in production // See your keys here: https://dashboard.stripe.com/apikeys STPAPIClient.shared.publishableKey =
"pk_test_TYooMQauvdEDq54NiTphI7jx"
ポータルセッションを作成するサーバー側
顧客がサブスクリプションに変更を加えるには、portal session API で Stripe 顧客 ID を使用してポータルページの URL を生成します。
ユニバーサルリンクを設定するクライアント側サーバー側
ユニバーサルリンクを使用すると、カスタマーポータルをアプリにディープリンクできます。ユニバーサルリンクを設定するには、次の手順を行います。
- ドメインに
apple-app-site-association
ファイルを追加します。 - アプリに Associated Domains エンタイトルメントを追加します。
- ポータルのリダイレクト URL のフォールバックページを追加します。
関連ドメインを定義する
.well-known/apple-app-site-association メインにファイルを追加し、アプリで処理する URL を定義します。アプリ ID の前にチーム ID を付加します。チーム IDは、Apple Developer Portal のメンバーシップページにあります。
{ "applinks": { "apps": [], "details": [ { "appIDs": [ "A28BC3DEF9.com.example.MyApp1", "A28BC3DEF9.com.example.MyApp1-Debug" ], "components": [ { "/": "/checkout_redirect*", "comment": "Matches any URL whose path starts with /checkout_redirect" } ] } ] } }
警告
このファイルは、MIME タイプ application/json
で提供する必要があります。curl -I
を使用してコンテンツタイプを確認します。
curl -I https://example.com/.well-known/apple-app-site-association
詳細については、関連ドメインのサポートに関する Apple のページを参照してください。
アプリに Associated Domains エンタイトルメントを追加する
- アプリのターゲットの、Signing & Capabilities (署名とケイパビリティ) ウィンドウを開きます。
- + ケイパビリティ をクリックし、関連ドメイン を選択します。
applinks:example.
のエントリーを Associated Domains リストに追加します。com
ユニバーサルリンクの詳細については、Apple の Universal Links for Developers (開発者のためのユニバーサルリンク) (英語) ページをご覧ください。
iOS は、apple-app-site-association
ファイルで定義された URL へのリンクをインターセプトしますが、リダイレクトでアプリを開くことができないケースが発生することがあります。
return_
にフォールバックページを作成してください。たとえば、アプリのカスタム URL スキームを定義して、ユニバーサルリンクが失敗した場合にそのスキームを使用してリンクし直すことができます。
Safari でカスタマーポータルを開くクライアント側
アプリに、カスタマーポータルを開くボタンを追加します。このボタンは以下を行います。
- サーバー側のエンドポイントを呼び出して、ポータルセッションを作成します。
- ポータルページの URL をクライアントに返します。
- Safari で URL を開きます。
import Foundation import SwiftUI import StoreKit struct SubscriptionManagementView: View { @EnvironmentObject var myBackend: MyServer var body: some View { // Check if payments are blocked by Parental Controls on this device. if !SKPaymentQueue.canMakePayments() { Text("Payments are disabled on this device.") } else { Button { myBackend.createCustomerPortalSession { url in UIApplication.shared.open(url, options: [:], completionHandler: nil) } } label: { Text("Manage subscriptions") }.onOpenURL { url in // Handle the universal link from the customer portal. // Implement any necessary behavior, such as refreshing the customer's subscription status. } } } }
顧客のサブスクリプションステータスの変更を処理するサーバー側
顧客がカスタマーポータルを使用してサブスクリプションステータスを変更すると、customer.
、customer.
、customer.
などの Webhook が Stripe からお客様に送信されます。イベントの一覧とその情報については、サブスクリプションで Webhook を使用するをご覧ください。設定したサブスクリプションのステータスを正確に監視するために必要な、すべてのイベントを処理していることを確認してください。
テスト目的の場合は、ダッシュボードまたは Stripe CLI を使用してイベントをモニタリングします。本番環境では、Webhook エンドポイントを設定して適切なイベントタイプに登録します。STRIPE_
キーが不明な場合は、ダッシュボードで Webhook リンクをクリックして表示します。