iOS SDKでウェブペイウォールを実装する

Important

始める前に、ダッシュボードでウェブペイウォールを設定済みであること、および Adapty SDK バージョン 3.6.1 以降がインストールされていることを確認してください。

ウェブペイウォールを開く

自分で開発したペイウォールを利用している場合は、SDK メソッドを使ってウェブペイウォールを処理する必要があります。.openWebPaywall メソッドは次の処理を行います。

  1. 特定のユーザーに表示されたペイウォールとリダイレクト先のウェブページを Adapty が紐付けるための一意の URL を生成します。
  2. ユーザーがアプリに戻ったタイミングを検知し、短い間隔で .getProfile を呼び出して、プロファイルのアクセス権が更新されたかどうかを確認します。

これにより、決済が成功してアクセス権が更新された場合、アプリ内でほぼ即座にサブスクリプションが有効化されます。

do {
    try await Adapty.openWebPaywall(for: product)
} catch {
    print("Failed to open web paywall: \(error)")
}
Note

openWebPaywall メソッドには2つのバージョンがあります:

  1. openWebPaywall(product) — ペイウォールによってURLを生成し、プロダクトデータもURLに追加します。
  2. openWebPaywall(paywall) — ペイウォールによってURLを生成しますが、プロダクトデータはURLに追加しません。SDK v4では、取得したフローのペイウォールバリアントである AdaptyFlowPaywall を受け取ります。インデックスアクセスの前に flow.paywalls が空でないことを確認してください(例:flow.paywalls[0])。

エラーを処理する

エラー説明推奨される対処法
AdaptyError.paywallWithoutPurchaseUrlペイウォールにウェブ購入 URL が設定されていないAdapty ダッシュボードでペイウォールが正しく設定されているか確認してください
AdaptyError.productWithoutPurchaseUrlプロダクトにウェブ購入 URL が設定されていないAdapty ダッシュボードでプロダクトの設定を確認してください
AdaptyError.failedOpeningWebPaywallUrlブラウザで URL を開くことができなかったデバイスの設定を確認するか、別の購入方法を提供してください
AdaptyError.failedDecodingWebPaywallUrlURL 内のパラメーターを正しくエンコードできなかったURL パラメーターが有効かつ適切にフォーマットされているか確認してください

実装例

class SubscriptionViewController: UIViewController {
    var paywall: AdaptyPaywall?
    
    @IBAction func purchaseButtonTapped(_ sender: UIButton) {
        guard let paywall = paywall, let product = paywall.products.first else { return }
         Task {
            await offerWebPurchase(for: product)
         }
    }
    
    func offerWebPurchase(for paywallProduct: AdaptyPaywallProduct) async {
        do {
            // Attempt to open web paywall
            try await Adapty.openWebPaywall(for: paywallProduct)
        } catch let error as AdaptyError {
            
            switch error {
            case .paywallWithoutPurchaseUrl, .productWithoutPurchaseUrl:
                showAlert(message: "Web purchase is not available for this product.")
            case .failedOpeningWebPaywallUrl:
                showAlert(message: "Could not open web browser. Please try again.")
            default:
                showAlert(message: "An error occurred: \(error.localizedDescription)")
            }
        } catch {
            showAlert(message: "An unexpected error occurred.")
        }
    }
    
    // Helper methods
    private func showAlert(message: String) { /* ... */ }
}
Note

ユーザーがアプリに戻った後は、プロファイルの更新を反映するために UI をリフレッシュしてください。AdaptyDelegate がプロファイル更新イベントを受信して処理します。

アプリ内ブラウザでウェブペイウォールを開く

Important

アプリ内ブラウザでのウェブペイウォール表示は、Adapty SDK v3.15 以降でサポートされています。

デフォルトでは、ウェブペイウォールは外部ブラウザで開きます。

シームレスなユーザー体験を提供するために、アプリ内ブラウザでウェブペイウォールを開くことができます。これにより、アプリを切り替えることなく、アプリ内でウェブ購入ページを表示してトランザクションを完了できます。

この機能を有効にするには、in パラメーターを .inAppBrowser に設定します。

do {
    try await Adapty.openWebPaywall(for: product, in: .inAppBrowser) // default – .externalBrowser
} catch {
    print("Failed to open web paywall: \(error)")
}