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

始める前に、ダッシュボードでウェブペイウォールを設定済みであること、および 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)")
}

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

  1. openWebPaywall(product) はペイウォールごとに URL を生成し、プロダクトのデータも URL に追加します。
  2. openWebPaywall(paywall) はペイウォールごとに URL を生成しますが、プロダクトのデータは URL に追加しません。Adapty のペイウォールに設定されたプロダクトとウェブペイウォールのプロダクトが異なる場合に使用してください。

エラーを処理する

エラー説明推奨される対処法
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) { /* ... */ }
}

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

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

アプリ内ブラウザでのウェブペイウォール表示は、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)")
}