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

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

3
0
449
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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/путь.

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

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