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);
我想做的很简单。我正在使用 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);