ÿÿ フローアクションã¸ã®å¿œç­” - iOS | Adapty ドキュメント

フローアクションã¸ã®å¿œç­” - iOS

Adapty ã®ãƒ•ロービルダーã¾ãŸã¯ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ãƒ“ルダーを使用ã—ã¦ãƒ•ローやペイウォールを構築ã™ã‚‹å ´åˆã€ãƒœã‚¿ãƒ³ã‚’é©åˆ‡ã«è¨­å®šã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ã€‚

  1. ペイウォールビルダーã§ãƒœã‚¿ãƒ³ã‚’追加ã—ã€æ—¢å­˜ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’割り当ã¦ã‚‹ã‹ã€ã‚«ã‚¹ã‚¿ãƒ ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ ID を作æˆã—ã¾ã™ã€‚
  2. 割り当ã¦ãŸå„アクションを処ç†ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’アプリã«è¨˜è¿°ã—ã¾ã™ã€‚

ã“ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€ã‚«ã‚¹ã‚¿ãƒ ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŠã‚ˆã³æ—¢å­˜ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’コードã§å‡¦ç†ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚

フロー/ペイウォールã®ã‚¯ãƒ­ãƒ¼ã‚ºã¨ URL オープンã®ã¿è‡ªå‹•処ç†ã•れã¾ã™ã€‚ ãã®ä»–ã®ãƒœã‚¿ãƒ³ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã™ã¹ã¦ã€ã‚¢ãƒ—リコードå´ã§é©åˆ‡ãªå‡¦ç†ã‚’実装ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚

iOS SDKã¯ã€AdaptySystemRequestsHandlerを通ã˜ã¦ã€ãƒ—ッシュ通知やカメラアクセスãªã©ã®ã‚·ã‚¹ãƒ†ãƒ æ¨©é™ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¿œç­”ã§ãã¾ã™ã€‚フローã¯ã¾ã ã“れらã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’トリガーã—ãªã„ãŸã‚ã€ç¾æ™‚点ã§ã¯å¯¾å¿œä¸è¦ã§ã™ã€‚

フローã¨ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’é–‰ã˜ã‚‹

フローã¾ãŸã¯ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’é–‰ã˜ã‚‹ãƒœã‚¿ãƒ³ã‚’追加ã™ã‚‹ã«ã¯:

  1. ビルダーã§ãƒœã‚¿ãƒ³ã‚’追加ã—ã€Close アクションを割り当ã¦ã¾ã™ã€‚
  2. アプリã®ã‚³ãƒ¼ãƒ‰ã§ close アクションã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’実装ã—ã¾ã™ã€‚

iOS SDK ã§ã¯ã€close アクションã¯ãƒ‡ãƒ•ォルトã§ãƒ•ローã¾ãŸã¯ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’é–‰ã˜ã‚‹å‹•作をトリガーã—ã¾ã™ã€‚ãŸã ã—ã€å¿…è¦ã«å¿œã˜ã¦ã‚³ãƒ¼ãƒ‰å†…ã§ã“ã®å‹•作をオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚るフローを閉ã˜ã‚‹ã¨åˆ¥ã®ãƒ•ローãŒé–‹ãよã†ã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚

.flow(
    isPresented: $flowPresented,
    flowConfiguration: flowConfiguration,
    didPerformAction: { action in
        switch action {
        case .close:
            flowPresented = false // dismiss the flow or paywall
        default:
            break
        }
    },
    didFinishPurchase: { product, purchaseResult in /* dismiss, or do nothing to let the flow continue */ },
    didFailPurchase: { product, error in /* handle the error */ },
    didFinishRestore: { profile in /* check access level and dismiss */ },
    didFailRestore: { error in /* handle the error */ },
    didReceiveError: { error in flowPresented = false }
)

フローã¨ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‹ã‚‰URLã‚’é–‹ã

リンクã®ã‚°ãƒ«ãƒ¼ãƒ—(利用è¦ç´„や購入ã®å¾©å…ƒãªã©ï¼‰ã‚’追加ã—ãŸã„å ´åˆã¯ã€ãƒ“ルダー㧠Link è¦ç´ ã‚’追加ã—ã€Open URL アクションをæŒã¤ãƒœã‚¿ãƒ³ã¨åŒã˜æ–¹æ³•ã§å‡¦ç†ã—ã¦ãã ã•ã„。

フローã¾ãŸã¯ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã«ãƒªãƒ³ã‚¯ã‚’é–‹ãボタン(例:Terms of use ã‚„ Privacy policy)を追加ã™ã‚‹ã«ã¯ï¼š

  1. ビルダーã§ãƒœã‚¿ãƒ³ã‚’追加ã—ã€Open URL アクションを割り当ã¦ã€é–‹ããŸã„URLを入力ã—ã¾ã™ã€‚
  2. アプリã®ã‚³ãƒ¼ãƒ‰ã«ã€å—ã‘å–ã£ãŸURLをブラウザã§é–‹ã openURL アクションã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’実装ã—ã¾ã™ã€‚

iOS SDK ã§ã¯ã€openURL アクションã¯ãƒ‡ãƒ•ォルトã§URLã‚’é–‹ã動作をã—ã¾ã™ã€‚ãŸã ã—ã€å¿…è¦ã«å¿œã˜ã¦ã‚³ãƒ¼ãƒ‰å†…ã§ã“ã®å‹•作を上書ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

.flow(
    isPresented: $flowPresented,
    flowConfiguration: flowConfiguration,
    didPerformAction: { action in
        switch action {
        case let .openURL(url):
            UIApplication.shared.open(url, options: [:]) // default behavior
        default:
            break
        }
    },
    didFinishPurchase: { product, purchaseResult in /* dismiss, or do nothing to let the flow continue */ },
    didFailPurchase: { product, error in /* handle the error */ },
    didFinishRestore: { profile in /* check access level and dismiss */ },
    didFailRestore: { error in /* handle the error */ },
    didReceiveError: { error in flowPresented = false }
)

カスタムアクションを処ç†ã™ã‚‹

ãã®ä»–ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’処ç†ã™ã‚‹ãƒœã‚¿ãƒ³ã‚’追加ã™ã‚‹ã«ã¯:

  1. ビルダーã§ãƒœã‚¿ãƒ³ã‚’追加ã—ã€Custom アクションを割り当ã¦ã€ID を設定ã—ã¾ã™ã€‚
  2. アプリã®ã‚³ãƒ¼ãƒ‰ã«ã€ä½œæˆã—ãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ ID ã«å¯¾å¿œã™ã‚‹ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’実装ã—ã¾ã™ã€‚

ãŸã¨ãˆã°ã€åˆ¥ã®ã‚µãƒ–スクリプションオファーや買ã„切り購入ãŒã‚ã‚‹å ´åˆã€åˆ¥ã®ãƒ•ローやペイウォールを表示ã™ã‚‹ãƒœã‚¿ãƒ³ã‚’追加ã§ãã¾ã™ã€‚

.flow(
    isPresented: $flowPresented,
    flowConfiguration: flowConfiguration,
    didPerformAction: { action in
        switch action {
        case let .custom(id):
            if id == "openNewPaywall" {
                // Display another flow or paywall
            }
        default:
            break
        }
    },
    didFinishPurchase: { product, purchaseResult in /* dismiss, or do nothing to let the flow continue */ },
    didFailPurchase: { product, error in /* handle the error */ },
    didFinishRestore: { profile in /* check access level and dismiss */ },
    didFailRestore: { error in /* handle the error */ },
    didReceiveError: { error in flowPresented = false }
)

Adapty ペイウォールビルダーを使ã£ã¦ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’構築ã™ã‚‹å ´åˆã€ãƒœã‚¿ãƒ³ã‚’é©åˆ‡ã«è¨­å®šã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã™ï¼š

  1. ペイウォールビルダーã«ãƒœã‚¿ãƒ³ã‚’追加ã—ã€æ—¢å­˜ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’割り当ã¦ã‚‹ã‹ã€ã‚«ã‚¹ã‚¿ãƒ ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ ID を作æˆã—ã¾ã™ã€‚
  2. 割り当ã¦ãŸå„アクションを処ç†ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’アプリã«è¨˜è¿°ã—ã¾ã™ã€‚

ã“ã®ã‚¬ã‚¤ãƒ‰ã§ã¯ã€ã‚³ãƒ¼ãƒ‰å†…ã§ã‚«ã‚¹ã‚¿ãƒ ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãŠã‚ˆã³æ—¢å­˜ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’処ç†ã™ã‚‹æ–¹æ³•を説明ã—ã¾ã™ã€‚

購入ã€å¾©å…ƒã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®ã‚¯ãƒ­ãƒ¼ã‚ºã€URL ã®ã‚ªãƒ¼ãƒ—ンã®ã¿è‡ªå‹•çš„ã«å‡¦ç†ã•れã¾ã™ã€‚ ãã®ä»–ã®ãƒœã‚¿ãƒ³ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ã‚¢ãƒ—リã®ã‚³ãƒ¼ãƒ‰ã§é©åˆ‡ã«å¯¾å¿œã‚’実装ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚

ペイウォールを閉ã˜ã‚‹

ペイウォールを閉ã˜ã‚‹ãƒœã‚¿ãƒ³ã‚’追加ã™ã‚‹ã«ã¯:

  1. ペイウォールビルダーã§ãƒœã‚¿ãƒ³ã‚’追加ã—ã€Close アクションを割り当ã¦ã¾ã™ã€‚
  2. アプリã®ã‚³ãƒ¼ãƒ‰ã§ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’é–‰ã˜ã‚‹ close アクションã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’実装ã—ã¾ã™ã€‚

iOS SDK ã§ã¯ã€close アクションã¯ãƒ‡ãƒ•ォルトã§ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’é–‰ã˜ã‚‹å‹•作をトリガーã—ã¾ã™ã€‚ãŸã ã—ã€å¿…è¦ã«å¿œã˜ã¦ã‚³ãƒ¼ãƒ‰ã§ã“ã®å‹•作をオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã‚るペイウォールを閉ã˜ã‚‹ã“ã¨ã§åˆ¥ã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’é–‹ãよã†ã«ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚

func paywallController(_ controller: AdaptyPaywallController,
                       didPerform action: AdaptyUI.Action) {
    switch action {
        case .close:
            controller.dismiss(animated: true) // default behavior
            break
    }
}

ペイウォールã‹ã‚‰URLã‚’é–‹ã

リンクã®ã‚°ãƒ«ãƒ¼ãƒ—(利用è¦ç´„や購入ã®å¾©å…ƒãªã©ï¼‰ã‚’追加ã—ãŸã„å ´åˆã¯ã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ãƒ“ルダー㧠Link è¦ç´ ã‚’追加ã—ã€Open URL アクションをæŒã¤ãƒœã‚¿ãƒ³ã¨åŒã˜æ–¹æ³•ã§å‡¦ç†ã—ã¦ãã ã•ã„。

ペイウォールã«ãƒªãƒ³ã‚¯ã‚’é–‹ãボタン(Terms of use ã‚„ Privacy policy ãªã©ï¼‰ã‚’追加ã™ã‚‹ã«ã¯ï¼š

  1. ペイウォールビルダーã§ãƒœã‚¿ãƒ³ã‚’追加ã—ã€Open URL アクションを割り当ã¦ã¦ã€é–‹ããŸã„URLを入力ã—ã¾ã™ã€‚
  2. アプリã®ã‚³ãƒ¼ãƒ‰ã§ã€å—ã‘å–ã£ãŸURLをブラウザã§é–‹ã openUrl アクションã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’実装ã—ã¾ã™ã€‚

iOS SDKã§ã¯ã€openUrlアクションã¯ãƒ‡ãƒ•ォルトã§URLã‚’é–‹ã動作をã—ã¾ã™ã€‚ãŸã ã—ã€å¿…è¦ã«å¿œã˜ã¦ã‚³ãƒ¼ãƒ‰å†…ã§ã“ã®å‹•作をオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã§ãã¾ã™ã€‚

func paywallController(_ controller: AdaptyPaywallController,
                       didPerform action: AdaptyUI.Action) {
    switch action {
        case let .openURL(url):
            UIApplication.shared.open(url, options: [:]) // default behavior
        break
    }
}

アプリã¸ã®ãƒ­ã‚°ã‚¤ãƒ³

ユーザーをアプリã«ãƒ­ã‚°ã‚¤ãƒ³ã•ã›ã‚‹ãƒœã‚¿ãƒ³ã‚’追加ã™ã‚‹ã«ã¯ï¼š

  1. ペイウォールビルダーã§ãƒœã‚¿ãƒ³ã‚’追加ã—ã€Login アクションを割り当ã¦ã¾ã™ã€‚
  2. アプリã®ã‚³ãƒ¼ãƒ‰ã§ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’識別ã™ã‚‹ login アクションã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’実装ã—ã¾ã™ã€‚
func paywallController(_ controller: AdaptyPaywallController,
                      didPerform action: AdaptyUI.Action) {
   switch action {
       case .login:
           // Show a login screen
           let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController")
           controller.present(loginVC, animated: true)
   }
}

カスタムアクションã®å‡¦ç†

ãã®ä»–ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’処ç†ã™ã‚‹ãƒœã‚¿ãƒ³ã‚’追加ã™ã‚‹ã«ã¯:

  1. ペイウォールビルダーã§ãƒœã‚¿ãƒ³ã‚’追加ã—ã€Custom アクションを割り当ã¦ã¦ã€IDを設定ã—ã¾ã™ã€‚
  2. アプリã®ã‚³ãƒ¼ãƒ‰ã§ã€ä½œæˆã—ãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³IDã®ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’実装ã—ã¾ã™ã€‚

ãŸã¨ãˆã°ã€åˆ¥ã®ã‚µãƒ–スクリプションオファーや買ã„切り購入ãŒã‚ã‚‹å ´åˆã€åˆ¥ã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’表示ã™ã‚‹ãƒœã‚¿ãƒ³ã‚’追加ã§ãã¾ã™:

func paywallController(_ controller: AdaptyPaywallController,
                      didPerform action: AdaptyUI.Action) {
   switch action {
       case let .custom(id):
           if id == "openNewPaywall" {
              // Display another paywall
              }
           }
           break
   }
}
ÿÿÿÿ