Notification
AllJoyn™ Notification Service 架构为设备/应用发送的可读文本提供了一套通用的显示或渲染机制。通知被广播在 AllJoyn 网络中,所有设备/应用都能够接收,它的持续时间根据通知的发出者设定的 TTL 决定。除了文本信息,也可以发送其他类型的数据,如音频、图像、控制面板对象或其他自定义属性;由接收者决定处理和渲染自定义属性的最佳方式。另外,接受者可以全局拒收通知。
概念和术语
生产者和消费者
两个角色: 生产者。它发送通知。 消费者。它接收通知。
消息类型
通知可以属于以下三种类型:信息、警告、紧急。通常情况下,使用信息的方式发送。当情况合适时,可以用警告使通知获得更多关注。同样,在紧急情况发生时,可以谨慎地使用紧急方式。
存活时间(TTL)
发送的每一条信息都会伴随一个特定的 Time-to-live (TTL),以毫秒为单位。消息会保持在网络中直到它的 TTL 超时。如果消费者在 TTL 之内加入了网络,它将能够收到消息。
此外,使用相同类型的消息将会被覆盖。所以,在任意时间,生产者发送的同类型消息至多有一个生效。举例说明,如果生产者发送了一条信息类型的消息,并且在 20 秒之前它发送了一条 100 秒 TTL 的信息类型的程序。那么新的消息将会覆盖之前的消息。消费者只能接收到新的消息,尽管旧消息的 TTl 仍没有过期。
多语言支持
如所有 AllJoyn 服务一样,通知服务支持多语言。生产者用所有支持的语言发送通知字符串。消费者可以根据需求选择最合适的语言。
驳回
有以下三种方式驳回通知:
-
消费者可以将通知移出它的用户接口,那么它的用户就不会收到通知,就达到了拒绝通知的目的。当这个通知可以被网络上的其它消费者收到时,那么此方法不适用。
-
消费者或生产者,能够通过向所有网络中的消费者发送一个信息以拒绝通知。在收到此信号后,消费者预计将移除该通知。
-
消费者能够通知生产者停止广播通知。随后,新消费者将不会收到这个通知。
声音和图像
通知允许指定类型。这为通知提供了超越文本的额外维度。最常见的类型是声音和图像。它们可以被指定为特定 URL 或者作为一个 AllJoyn 对象路径。如果提供了 URL,消费者可以选择通过指定的 URL 中提取的音频或图像并酌情在本地渲染。
控制面板对象路径
控制面板对象路径是一个特殊的属性。生产者填写这个属性,为消费者提供了额外的指示。当消费者收到此通知,如果它支持控制面板服务,就可以从对象路径得到控制面板并提供给用户使用。通常这样做是为了使消费者能够执行与通知关联的操作。
举例说明,如果一个烤箱被留在某地,并且是打开的状态。它可以发送一个带有控制面板的通知,为用户提供一个可以将它关闭的选项。
定制属性
通知能够包含任意数量的定制键/值对属性。消费者能够选择性地利用这些信息获得更多的通知。定制属性是针对应用程序的,所以消费者需要有关于生产者的特定信息,以适当地使用定制属性。
举例说明,试想一个收音机每播放一个新乐曲时发送一个通知。这个通知包含了通知文本形式的艺术家和曲名,以及一份专辑封面 URL 的定制属性。普通消费者在收到该通知后只会显示通知文本形式的部分,也就是艺术家和曲名。但是那些更加关注生产者的消费者,也能够从通知中获得专辑封面 URL 并显示出来以提供更丰富的定制通知。
运行方式
从内部来看,通知通过 AllJoyn Sessionless Signal 信号进行发送。Sessionless Signal 满足了发送和接收通知的一切需要:
-
使生产者能够在 AllJoyn 网络中向 AllJoyn 应用程序/设备广播信息的机制。
-
TTL 的概念
-
当新消费者加入网络时,能被 TTL 尚未到期的广播通知到的机制。
Sessionless signal 包含完全版本的通知,包含所有支持的语言和所有的元数据。更多详细信息和信号的具体内容请参阅 Notification Interface Definition。
拒绝通知也由 sessionless signal 处理。
综上所述,以下是它工作的方法:
-
生产者发送包含通知的 sessionless signal。
-
消费者在接收信号后显示通知。
-
稍晚接入网络的消费者也会接收并显示该信息。
-
当 TTL 超时后,生产者将会停止广播 sessionless signal。消费者将停止显示该通知。
-
任何时间,生产者或者消费者都可以通过发送一个 sessionless signal 以停止通知。消费者,一旦接收到这个信号,将会停止显示该通知。
-
消费者可以联系生产者,要求停止广播某一通知。