在 Flutter SDK 中响应按钮操作

如果你正在使用 Adapty 编辑工具构建流程或付费墙,务必正确设置按钮:

  1. 编辑工具中添加按钮,并为其分配已有操作或创建自定义操作 ID。
  2. 在应用代码中编写逻辑,处理每个已分配的操作。

本指南介绍如何在代码中处理自定义操作和已有操作。

关闭视图和打开 URL 由默认的 flowViewDidPerformAction 实现自动处理,SDK 本身负责处理购买和恢复操作。其他所有按钮动作,例如登录或打开另一个流程,则需要在应用代码中实现相应的响应逻辑。请注意,对已完成购买和恢复操作的响应发生在必要的观察者回调中——详见处理流程和付费墙事件

关闭流程和付费墙

要添加一个关闭流程或付费墙的按钮,请在编辑工具中添加一个按钮,并为其分配 Close 操作。无需编写任何代码:默认的 flowViewDidPerformAction 实现会在收到 CloseAction 时自动关闭视图。

Android 系统的返回按钮不再默认关闭视图。它会以 AndroidSystemBackAction 的形式传递给 flowViewDidPerformAction——如果你希望返回按钮能够关闭流程或付费墙,请自行处理该事件。

如需自定义行为,可覆写 flowViewDidPerformAction——例如,像 v3 中那样,在用户点击 Android 系统返回按钮时关闭视图:

void flowViewDidPerformAction(AdaptyUIFlowView view, AdaptyUIAction action) {
    switch (action) {
      case const CloseAction():
      case const AndroidSystemBackAction():
        view.dismiss();
        break;
      case OpenUrlAction(:final url, :final openIn):
        AdaptyUI().openUrl(url, openIn: openIn);
        break;
      default:
        break;
    }
}

覆盖 flowViewDidPerformAction 会完全替换默认实现——如果你希望保留默认的关闭和打开 URL 行为,请保留 CloseActionOpenUrlAction 的处理逻辑。

从流程和付费墙中打开 URL

如果您想添加一组链接(例如使用条款和购买恢复),请在编辑工具中添加 Link 元素,并以与具有 Open URL 操作的按钮相同的方式处理它。

要添加一个打开链接的按钮(例如使用条款隐私政策),请在编辑工具中添加一个按钮,为其分配 Open URL 操作,然后输入您想要打开的 URL。 无需编写代码:flowViewDidPerformAction 的默认实现会通过 AdaptyUI().openUrl 以原生方式打开 URL,并遵循看板中设置的应用内浏览器或外部浏览器偏好。

默认行为已能满足大多数场景的需求。如果你仍希望自行处理 URL 的打开方式,可以覆盖该处理器:

void flowViewDidPerformAction(AdaptyUIFlowView view, AdaptyUIAction action) {
    switch (action) {
      case const CloseAction():
        view.dismiss();
        break;
      case OpenUrlAction(url: final url):
        // Open the URL in whatever way fits your app
        break;
      default:
        break;
    }
}

登录应用

要添加一个让用户登录应用的按钮:

  1. 在编辑工具中,添加一个按钮并为其分配 Login 操作。
  2. 在应用代码中,实现一个 login 操作的处理器,用于识别当前用户。
void flowViewDidPerformAction(AdaptyUIFlowView view, AdaptyUIAction action) {
    switch (action) {
      case CustomAction(action: 'login'):
        // Navigate to your login screen in whatever way fits your app
        break;
      default:
        break;
    }
}

处理自定义操作

要添加一个处理其他操作的按钮:

  1. 在编辑工具中,添加一个按钮,为其分配 Custom 操作,并为其设置一个 ID。
  2. 在应用代码中,为你创建的操作 ID 实现对应的处理逻辑。

例如,如果你有另一组订阅优惠或一次性购买,可以添加一个按钮来展示另一个流程或付费墙:

void flowViewDidPerformAction(AdaptyUIFlowView view, AdaptyUIAction action) {
   switch (action) {
     case CustomAction(action: 'openNewPaywall'):
       // Display another flow or paywall
       break;
     default:
       break;
   }
}

如果您正在使用 Adapty 付费墙编辑工具构建付费墙,正确设置按钮至关重要:

  1. 付费墙编辑工具中添加按钮,并为其分配一个已有的操作,或创建一个自定义操作 ID。
  2. 在应用代码中编写逻辑,处理您分配的每个操作。 本指南介绍如何在代码中处理自定义操作和预设操作。

只有购买和恢复购买会被自动处理。 其他所有按钮操作(例如关闭付费墙或打开链接)都需要在应用代码中实现相应的响应逻辑。

关闭付费墙

要添加一个关闭付费墙的按钮:

  1. 在付费墙编辑工具中,添加一个按钮并为其分配 Close 操作。
  2. 在应用代码中,为 CloseActionAndroidSystemBackAction 操作实现处理程序。

在 Flutter SDK 中,CloseActionAndroidSystemBackAction 操作默认会触发关闭付费墙。不过,如有需要,你可以在代码中覆盖此行为。例如,关闭一个付费墙可能会触发打开另一个付费墙。

void paywallViewDidPerformAction(AdaptyUIPaywallView view, AdaptyUIAction action) {
    switch (action) {
      case const CloseAction():
      case const AndroidSystemBackAction():
        view.dismiss();
        break;
      default:
        break;
    }
}

从付费墙打开 URL

如果你想添加一组链接(例如使用条款和购买恢复),可以在付费墙编辑工具中添加 Link 元素,并像处理带有 Open URL 操作的按钮一样进行处理。

要添加一个从付费墙打开链接的按钮(例如使用条款隐私政策):

  1. 在付费墙编辑工具中,添加一个按钮,为其分配 Open URL 操作,并输入要打开的 URL。
  2. 在你的应用代码中,实现一个 openUrl 操作的处理器,用于在浏览器中打开接收到的 URL。
// You have to install url_launcher plugin in order to handle urls:
// https://pub.dev/packages/url_launcher

void paywallViewDidPerformAction(AdaptyUIPaywallView view, AdaptyUIAction action) {
    switch (action) {
      case OpenUrlAction(url: final url):
        final Uri uri = Uri.parse(url);
        launchUrl(uri, mode: LaunchMode.inAppBrowserView);
        break;
      default:
        break;
    }
}

登录应用

要添加一个让用户登录应用的按钮:

  1. 在付费墙编辑工具中,添加一个按钮并为其分配 Login 动作。
  2. 在应用代码中,实现一个用于标识用户的 login 动作处理器。
void paywallViewDidPerformAction(AdaptyUIPaywallView view, AdaptyUIAction action) {
    switch (action) {
      case CustomAction(action: 'login'):
        // Navigate to your login screen in whatever way fits your app
        break;
      default:
        break;
    }
}

处理自定义操作

要添加一个处理其他任意操作的按钮:

  1. 在付费墙编辑工具中,添加一个按钮,为其分配 Custom 操作,并为其指定一个 ID。
  2. 在应用代码中,为你创建的操作 ID 实现对应的处理逻辑。

例如,如果你有另一组订阅方案或一次性购买产品,可以添加一个按钮来展示另一个付费墙:

void paywallViewDidPerformAction(AdaptyUIPaywallView view, AdaptyUIAction action) {
   switch (action) {
     case CustomAction(action: 'openNewPaywall'):
       // Display another paywall
       break;
     default:
       break;
   }
}