消息寻址方案
消息目标URI是一种标识符,用于标识作为IMessage对象目标的目标终端节点。目标资源代表生命周期入口点组件或抽象主题,接收者可以在其上注册筛选器以监听更新。所有消息URI都符合RFC 3986的子集。
语法
消息目标URI应遵循标准URI语法:方案 "://" 权限 ["/"路径] ["?"查询] ["#"片段]。它可以分为4个部分 - 方案、权限、查询参数和片段。如果URI不遵循此语法,或者不遵循下文所述为每个个体定义的规则,则makeMessageBuilder API将引发InvalidArgument错误。
仅使用URI的方案、权限和路径部分进行寻址。
方案
方案是URI中位于方案分隔符://之前的部分。方案字符串用于传达将消息路由到正确的接收者必须遵循的协议。
方案字符串必须是包含小写字母数字的单个单词,并且不得包含任何空格。每个URI都必须以非空的方案字符串开头。
权限
权限由主机字符串和端口字符串组成,以:分隔。但是,消息URI中无法识别端口规范。
主机
主机是URI中方案分隔符://之后的部分,位于/或?之前。如果未包含/或?,URI结束。
主机字符串必须是通配符形式的文字*或包含小写字母数字。它们不得包含任何空格,但可以有多个带句点.的单词,以表明命名方案的层次结构。例如,com.amazon.ota。每个URI必须在方案字符串和分隔符后面包含一个非空的主机字符串。
路径
路径是URI的可选部分,位于/之后(在主机字符串之后),可以位于字符?之前。如果未包含/或?,URI结束。
路径可用于标识消息接收者在收到消息后必须执行的功能。
路径字符串只能包含字母数字(小写或大写),不含任何空格,但单词之间可以有/来表示嵌套功能。路径字符串必须紧接在主机字符串之后,否则必须将其省略。
查询参数
查询参数是位于?之后的可选字符串,位于路径字符串之后,如果不存在路径字符串,则在主机字符串之后。查询参数不用于将消息路由到其目标。
查询参数用于将字符串数据作为URI的一部分传递。
请注意,最好使用消息附件而非查询参数。
查询参数必须采用以下格式?key1=value1&key2=value2...。键和值只能包含字母数字(小写或大写),不得包含任何空格。
片段
片段是一个可选字符串,位于#后面,可以出现在查询参数之后。它们通常用于提供有关要执行的任务的任何其他元数据。片段必须包含字母数字(小写或大写),不含任何空格。如本文档后面所述,片段在有限的情况下用于将消息路由到其目标。
Vega消息传递中的URI方案
启动和深层链接方案
共同特征:
- 筛选器规格: 仅限清单
- 可配置的消息优先级: 否。立即处理。
- 支持内联消息响应: 是
PKG方案 (pkg)
pkg方案可让您直接按名称处理生命周期组件。
格式:pkg://<组件id>
示例:pkg://com.amazon.lcm.test.main
筛选器匹配: 主机
说明:
- 主机字符串是应用清单中的组件ID。
- 这是第三方应用开发者可以用来定义新消息的唯一方案。
- 您可以确定要启动的生命周期组件。
操作系统方案 (os)
os系统方案提供了一种独立于平台的方法,用来访问操作系统的核心功能,例如启动主屏幕或设置应用。
格式:os://<用例>[<子页面>]
示例:
os://settings- 设置主页os://home- 用于将固定到后台堆栈的组件标识为默认应用os://browser- 用于启动默认浏览器
筛选器匹配: 主机 + 路径
访问要求: 应用必须在其清单中添加以下部分才能访问操作系统方案URI。
[[wants.module]]
id = "/com.amazon.kepler.os_messages@IOsMessageModule"
amzns方案 (amzns)
程序包管理器使用amzns方案,根据查询参数中提供的标识符启动应用。
格式:amzns://apps[/路径]?<标识符类型>=<标识符值>
示例:
amzns://apps?si=ABCD1234amzns://apps?p=com.foo.baramzns://apps?asin=ABCD1234
筛选器匹配: 主机
访问要求: 应用必须在其清单中添加以下部分才能访问亚马逊方案URI。
[[wants.module]]
id = "/com.amazon.kepler.os_messages@IOsMessageModule"
说明:
- 主机字符串必须是“apps”。
- 标识符类型必须是
si、p或asin之一,其中si代表商店标识符(亚马逊或其他应用商店),p代表应用清单中列出的程序包id,asin代表亚马逊应用商店标识符。 - 如果设备上不存在此类应用,则启动默认应用商店(如果有)。
- 不允许任何其他应用为此URI安装消息目标。
http、https方案(http、https)
http和https方案允许应用打开针对通常在浏览器中打开的网站的网页URI。
格式:{http/https}://<主机>[<路径>][?查询参数]
示例:https://www.amazon.com/shop
筛选器匹配: 主机 + 路径
说明:
- 通过使用标准网页URI深层链接到应用内的内容,应用开发者可以在未安装应用的设备上得体地回退到其网站。
- 优先选择https而不是http,因为它更安全,可以防止意外泄露隐私敏感的用户信息。
自定义方案
自定义方案由应用定义,允许应用直接从其他应用或网站启动。
格式:<自定义方案>://[<主机>[<路径>]][?查询参数]
示例:livetv://watchnow
筛选器匹配: 主机 + 路径
说明:
- 必须在配置文件中使用正确的程序包ID来定义方案。
- 对主机和路径没有限制。
- 与http相比,自定义方案只能在安装应用后被拦截,并且在未安装应用的情况下不提供回退。
- 与自定义方案相比,优选https。
事件方案
共同特征:
- 筛选器匹配: 主机 + 路径
- 筛选器规格: 仅限运行时
广播方案 (broadcast)
broadcast方案URI是一个事件主题标识符,允许发布者向所有注册订阅者分发消息。
格式:broadcast://*/<反向dns命名空间>/<主题>/<子主题>
示例:broadcast://*/com.amazon.idle/state/idle/screensaver
说明:
- 可配置的消息优先级: 否。立即传递,任务管理器启动除外。
- 支持内联消息响应: 否。
单播方案 (unicast)
unicast方案URI是一种事件主题标识符,它可让发布者根据其程序包ID将消息分发给特定的一部分已注册订阅者。
格式:unicast://*/<反向dns命名空间>.<主题>/<子主题>
示例:unicast://*/com.amazon.push-service/force-ota
说明:
- 可配置的消息优先级: 是。立即传递或延迟传递。
- 支持内联消息响应: 是。
支持Android意图样式URI
Kepler消息传递主要使用基于URI的系统。但是,为了保持与现有Fire OS应用的兼容性,对意图样式URI的支持有限。请谨慎使用此兼容性功能。
HTTPS URI是确保跨平台兼容性的首选方法。应用开发者应使用标准URI方案,因为将来可能不支持意图样式URI。
自定义方案、amzns、amzn、http和https支持URI末尾的意图片段。此外,可以在Kepler消息传递中使用以下意图对象的URI表示。
所有基于意图的方案的共同特征:
- 筛选器规格: 仅限清单
- 可配置的消息优先级: 否。立即处理。
- 支持内联消息响应: 是
- 筛选器匹配: 意图规则
仅限片段
格式:#Intent;<键1>=<值1>;<键2>=<值2>;....;end;
示例:#Intent;action=OPEN_NETFLIX_ACTION_2;end;
说明:
- 每个URI只能有一个意图片段。
键1、键2等是意图中支持的一系列已知键。- 某些键对可以支持的值的数据类型有限制。
- 此方案必须在清单中使用
fos://前缀进行定义。但是,在运行时,可以使用不带前缀的URI发送消息。
Android应用方案 (android-app)
格式:android-app://<程序包id>[<方案>[<主机>[<路径>]]][#<意图片段>]
示例:android-app://com.netflix#Intent;action=OPEN_NETFLIX_ACTION;end;
说明:
- 主机字符串必须是应用清单中的程序包ID。
- 清单中不直接支持此方案。要在清单中定义它,请将其转换为带有
fos://前缀的仅限片段的表示。但是,在运行时,可以使用这些URI发送消息,无需进行任何更改。
意图方案 (intent)
格式:intent:[//][<主机>][<路径>][#<意图片段>]
示例:intent:#Intent;action=OPEN_NETFLIX_ACTION;end;
说明:
//如果URI中存在scheme=,则必须在intent:之后填写内容。- 片段中不应存在任何主机或路径。
- 清单中不直接支持此方案。要在清单中定义它,请将其转换为带有
fos://前缀的仅限片段的表示。但是,在运行时,可以使用这些URI发送消息,无需进行任何更改。
支持的片段键
下表列出了支持的意图键及其限制:
| 键 | 值类型 | 组件分解 | 允许在URI中使用 | 单个URI中是否能有多个项目? |
|---|---|---|---|---|
| 操作 | 字符串 | 是 | 是 | 否 |
| 类别 | 字符串 | 是 | 是 | 否 |
| 程序包 | 字符串 | 是 | 是 | 不适用 |
| 组件 | 字符串 | 是 | 是 | 不适用 |
| 方案 | 字符串 | 是 | 是 | 不适用 |
| S.<> | 字符串 | 否 | 是 | 是 键foo不能对不同的类型重复。 相同类型的重复键foo被覆盖。 |
| B.<> | 布尔值 | 否 | 是 | 是 键foo不能对不同的类型重复。 相同类型的重复键foo被覆盖。 |
| b.<> | 字节 | 否 | 是 | 是 键foo不能对不同的类型重复。 相同类型的重复键foo被覆盖。 |
| c.<> | char | 否 | 是 | 是 键foo不能对不同的类型重复。 相同类型的重复键foo被覆盖。 |
| d.<> | double | 否 | 是 | 是 键foo不能对不同的类型重复。 相同类型的重复键foo被覆盖。 |
| f.<> | float | 否 | 是 | 是 键foo不能对不同的类型重复。 相同类型的重复键foo被覆盖。 |
| i.<> | 整数 | 否 | 是 | 是 键foo不能对不同的类型重复。 相同类型的重复键foo被覆盖。 |
| l.<> | 长型 | 否 | 是 | 是 键foo不能对不同的类型重复。 相同类型的重复键foo被覆盖。 |
| s.<> | 短型 | 否 | 是 | 是 键foo不能对不同的类型重复。 相同类型的重复键foo被覆盖。 |
相关主题
Last updated: 2025年9月30日

