Что такое {@url} в шаблонах URL действий приложения action.xml?

В моем файле actions.xml я могу предоставить инвентарь для параметров моего намерения, используя <entity-set> теги. Для каждого <entity>, документы указывают, что я могу указать значение для любого identifier или же url, В чем разница между identifier а также url? Зачем мне <parameter-mapping> пометить, если я использую identifier, но не если я использую url?

1 ответ

Главное отличие в том, что identifier значения экранированы URL. Например:

<intent name="actions.intent.SOME_INTENT">
  <parameter name="param.name">
    <entity-set-reference entitySetId="identifier_entity_set">
  </parameter>
  <fulfillment urlTemplate="https://app.com/{param_value}">
    <parameter-mapping intentParameter="param.name" urlParameter="param_value" />
  </fulfillment>
</intent>
<entity-set entitySetId="identifier_entity_set">
  <entity identifier="escaped/url/path" name="hi">
</entity-set>

Если пользователь говорит "привет" для param.name, разрешенный urlTemplate будет иметь вид: https://app.com/escaped%2Furl%2Fpath.

<intent name="actions.intent.SOME_INTENT">
  <parameter name="param.name">
    <entity-set-reference entitySetId="url_entity_set">
  </parameter>
</intent>
  <fulfillment urlTemplate="{@url}" />
<entity-set entitySetId="url_entity_set">
  <entity url="https://app.com/not/esacaped/url/path" name="bye">
</entity-set>

Если пользователь говорит "пока" для param.name, разрешенный шаблон urlTemplate будет иметь вид: https://app.com/not/esacaped/url/path.

Также обратите внимание, что если есть {@url} в шаблоне urlTemplate вы не должны включать <parameter-mapping> для этого; предполагается, что у вас есть ровно один <entity-set> с url ценности.

Другие вопросы по тегам