UrbanAirship - HTML 按钮 - 设置要传递给代码的标签

UrbanAirship - HTML Button - set tag to pass to code

我想做的很简单。我正在使用 UrbanAirship 来显​​示模态视图 ("In-app Automation"),即 HTML。我的 HTML 中有一个按钮。 message/view 在触发事件时显示正常。现在我在 HTML 中有按钮:

<button class="light" type="button" onclick="UAirship.close()">OK</button>

点击按钮时,对 UAirship.close() 的调用工作正常并关闭消息。我在 Android 代码中设置了一个监听器,如下所示:

UAirship.shared()
            .getInAppMessagingManager()
            .addListener(new InAppMessageListener() {
                @Override
                public void onMessageDisplayed(@NonNull String scheduleId, @NonNull InAppMessage message) {
                    // gets here fine
                }

                @Override
                public void onMessageFinished(@NonNull String scheduleId, @NonNull InAppMessage message, @NonNull ResolutionInfo resolutionInfo) {
                    // gets here fine as well
                }
            });

当 message/view 显示并关闭时,它可以毫无问题地进入这些方法。但是,我希望能够检测到一个特定按钮被点击,而不是 HTML 中的其他按钮。有没有办法轻松解决这个问题,以便可以在 "ResolutionInfo" 对象或 "InAppMessage" 中传递一些自定义标记或其他内容?

我希望有类似 "UAirship.close('tag')" 的东西,那个标签会被传回。甚至我可以将自定义 HTML 标记放在代码中可以识别的按钮上。实际上,任何解决方法都可以,我似乎无法在文档中找到如何使用 HTML.

正确执行此操作

我正在查看文档 here。我看到了 UAirship.runAction() 方法,但我并不清楚一个简单的实现是什么(另外,动作注册中引用的 "CustomAction" class 甚至都没有似乎存在于图书馆中......)。

我基本上只需要在点击该按钮后飞艇消息关闭时调用 Activity 中的一行代码。

想法?

我发现此解决方案有效,尽管可能有更好的解决方案。 在 HTML 中,对于按钮,调用 close(),然后调用 runAction():

onclick="UAirship.close(); UAirship.runAction('my_action', null, null)"

然后在代码中,在我 Activity 的 onCreate() 中,我有这个:

final String actionName = "my_action";
Action customAction = new Action() {
    @NonNull
    @Override
    public ActionResult perform(@NonNull ActionArguments actionArguments) {
        String buttonActionName = actionArguments.getMetadata().getString(ActionArguments.REGISTRY_ACTION_NAME_METADATA);
        if (buttonActionName.equals(actionName)) {
            // DO WHAT IS NEEDED HERE
        }
        return ActionResult.newEmptyResult();
    }
};
​
UAirship.shared()
    .getActionRegistry()
    .registerAction(customAction, actionName);