actions.xml 应用操作 URL 模板中的 {@url} 有什么用?
What is the use of {@url} in actions.xml app action URL templates?
在我的 actions.xml 文件中,我可以使用 <entity-set>
标签为我的意图参数提供清单。对于每个 <entity>
,文档指出我可以为 identifier
或 url
指定一个值。 identifier
和 url
有什么区别?为什么我使用 identifier
时需要 <parameter-mapping>
标签,而使用 url
时则不需要?
主要区别在于 identifier
值是 URL-escaped。例如:
<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 说“hi”,解析的 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.
此外,请注意,如果您的 urlTemplate 中有 {@url}
,则不应为其包含 <parameter-mapping>
;假定您只有一个 <entity-set>
具有 url
值。
在我的 actions.xml 文件中,我可以使用 <entity-set>
标签为我的意图参数提供清单。对于每个 <entity>
,文档指出我可以为 identifier
或 url
指定一个值。 identifier
和 url
有什么区别?为什么我使用 identifier
时需要 <parameter-mapping>
标签,而使用 url
时则不需要?
主要区别在于 identifier
值是 URL-escaped。例如:
<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 说“hi”,解析的 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.
此外,请注意,如果您的 urlTemplate 中有 {@url}
,则不应为其包含 <parameter-mapping>
;假定您只有一个 <entity-set>
具有 url
值。