ÿÿ 米国ã®iOSアプリã§ã‚¦ã‚§ãƒ–決済をå—ã‘付ã‘ã‚‹ | Adapty ドキュメント

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)")
}
ÿÿÿÿ