响应流程操作 - Unity

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

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

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

只有购买和恢复操作会被自动处理。 其他所有按钮操作(如关闭流程或打开链接)都需要在应用代码中进行相应的响应处理。

设置流程事件监听器

要处理流程操作,请实现 IAdaptyFlowsEventsListener 接口,并通过 Adapty.SetFlowsEventsListener() 进行注册。建议在应用生命周期的早期完成此操作,通常在主场景或应用初始化时进行。

using AdaptySDK;

public class FlowsListener : MonoBehaviour, IAdaptyFlowsEventsListener
{
    void Start()
    {
        Adapty.SetFlowsEventsListener(this);
    }

    // implement all IAdaptyFlowsEventsListener methods here
}

IAdaptyFlowsEventsListener 是一个 C# 接口,因此需要实现其所有方法——完整列表请参阅处理流程与付费墙事件。以下示例仅展示 FlowViewDidPerformAction 方法。

所有按钮操作都会通过 FlowViewDidPerformAction(view, action) 回调以 AdaptyUIUserAction 对象的形式传入,该对象包含一个 Type(值为 CloseSystemBackOpenUrlCustom)以及一个可选的 Value(即 URL 或自定义操作 ID)。

关闭流程和付费墙

要添加一个可关闭流程或付费墙的按钮:

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

已关闭的视图会被销毁,无法再次显示。如需再次展示该流程,请重新调用 CreateFlowView

public void FlowViewDidPerformAction(
    AdaptyUIFlowView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Close:
            view.Dismiss(null);
            break;
        default:
            // handle other events
            break;
    }
}

处理 Android 系统返回按钮

按下 Android 系统返回按钮(或使用返回手势)会触发 SystemBack 类型的动作。该动作本身不会关闭流程——流程保持打开状态,用户需要通过你定义的路径离开,例如 Close 按钮或编辑工具中的 on_device_back 动作。如果你希望系统返回按钮能够关闭流程,请自行处理该动作:

public void FlowViewDidPerformAction(
    AdaptyUIFlowView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Close:
        case AdaptyUIUserActionType.SystemBack:
            view.Dismiss(null);
            break;
        default:
            // handle other events
            break;
    }
}

从流程和付费墙中打开 URL

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

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

  1. 在编辑工具中,添加一个按钮,为其分配 Open URL 动作,并输入你想要打开的 URL。
  2. 在应用代码中,为 OpenUrl 动作实现一个处理程序,用于打开接收到的 URL。

使用 AdaptyUI.OpenUrl 方法以原生方式打开 URL,并遵循在编辑工具中配置的外部浏览器或应用内浏览器选项(action.OpenIn):

public void FlowViewDidPerformAction(
    AdaptyUIFlowView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.OpenUrl:
            var urlString = action.Value;
            if (!string.IsNullOrWhiteSpace(urlString)) {
                AdaptyUI.OpenUrl(
                    urlString,
                    action.OpenIn ?? AdaptyWebPresentation.ExternalBrowser,
                    (error) => {
                        // handle the error
                    }
                );
            }
            break;
        default:
            // handle other events
            break;
    }
}

登录应用

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

  1. 在编辑工具中,添加一个按钮,并为其指定 ID 为 loginCustom 动作。
  2. 在应用代码中,为 login 自定义动作实现一个处理程序,用于识别用户身份。
public void FlowViewDidPerformAction(
    AdaptyUIFlowView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Custom:
            if (action.Value == "login") {
                // Navigate to login scene
                SceneManager.LoadScene("LoginScene");
            }
            break;
        default:
            // handle other events
            break;
    }
}

处理自定义操作

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

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

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

public void FlowViewDidPerformAction(
    AdaptyUIFlowView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Custom:
            if (action.Value == "openNewFlow") {
                // Display another flow or paywall
                ShowAlternativeFlow();
            }
            break;
        default:
            // handle other events
            break;
    }
}

private void ShowAlternativeFlow() {
    // Implement your logic to show an alternative flow
}

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

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

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

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

关闭付费墙

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

  1. 在付费墙编辑工具中,添加一个按钮并为其分配 Close 操作。
  2. 在您的应用代码中,为 close 操作实现一个处理程序,用于关闭付费墙。
public void PaywallViewDidPerformAction(
    AdaptyUIPaywallView view, 
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Close:
            view.Dismiss(null);
            break;
        default:
            // handle other events
            break;
    }
}

从付费墙打开 URL

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

要添加一个从付费墙打开链接的按钮(例如 Terms of usePrivacy policy):

  1. 在付费墙编辑工具中,添加一个按钮,为其分配 Open URL 操作,并输入你想打开的 URL。
  2. 在应用代码中,实现一个 openUrl 操作的处理程序,在浏览器中打开收到的 URL。
public void PaywallViewDidPerformAction(
    AdaptyUIPaywallView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.OpenUrl:
            var urlString = action.Value;
            if(!string.IsNullOrWhiteSpace(urlString)) {
                Application.OpenURL(urlString);
            }
            break;
        default:
            // handle other events
            break;
    }
}

登录应用

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

  1. 在付费墙编辑工具中,添加一个按钮,并为其分配 ID 为 loginCustom 操作。
  2. 在应用代码中,实现一个处理 login 自定义操作的处理器,用于识别用户身份。
public void PaywallViewDidPerformAction(
    AdaptyUIPaywallView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Custom:
            if (action.Value == "login") {
                // Navigate to login scene
                SceneManager.LoadScene("LoginScene");
            }
            break;
        default:
            // handle other events
            break;
    }
}

处理自定义操作

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

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

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

public void PaywallViewDidPerformAction(
    AdaptyUIPaywallView view,
    AdaptyUIUserAction action
) {
    switch (action.Type) {
        case AdaptyUIUserActionType.Custom:
            if (action.Value == "openNewPaywall") {
                // Display another paywall
                ShowAlternativePaywall();
            }
            break;
        default:
            // handle other events
            break;
    }
}

private void ShowAlternativePaywall() {
    // Implement your logic to show alternative paywall
}