Mozilla Push Service
Mozilla Push Service is the server-side project supporting Push Notifications in Firefox. The current server is autopush. You can learn how to use the web based API to push messages to web applications running Push by reading the autopush HTTP API document.
Architecture
Code
The current production deployment of Push is a Python-based websocket server named autopush, developed on Github. The Push Service team has several repositories for development of the Push Server, and supporting tooling.
- autopush - Push connection and endpoint server
- megaphone - Global broadcast server
- autopush-rs - Push connection server, written in Rust
- ap-loadtester - Load and end-to-end Push testing application
See the architecture image for reference on what components each of these code pieces correspond to.
People and Places
- Ben Bangert - Engineering (San Francisco, UTC-8)
- JR Conlin - Engineering (Mountain View, UTC-8)
- Philip Jenvey - Engineering (San Francisco, UTC-8)
- Chris Hartjes - QA (Ontario, UTC-5)
- Jeremy Orem - Operations (Portland, UTC-8)
- Janet Dragojevic - Application Services Manager (New York, UTC-5)
Mail Lists and IRC
Additional ways to get in contact with the team:
- The Push-Service mail list (public)
- The Push mailing list (Mozilla internal)
- The
#push
channel on Mozilla IRC
Sending Push Messages
If you are interested in using WebPush for your application, there are a number of resources that should help.
If you are adding Push to your browser or progressive enhancement application, see Using the Push API on MDN.
If you are creating a service that sends Push messages to remote browser applications, see HTTP Endpoints for Notifications.
Terminology
The Push Service uses a range of terminology that can be difficult at first to keep straight. This is a list of commonly used terms and phrases with their meaning in the context of Push.
For an overview of how these terms fit together to deliver a push message to a user-agent, see the Firefox Push Notification high-level diagram. This page also includes descriptions of related technologies that help to deliver a cohesive Push Notification experience.
Where applicable, these match the Webpush Spec Terminology.
- Application
- Both the sender and ultimate consumer of push messages. Many applications have components that are run on a user agent and other components that run on servers.
- Application Server
- The component of an application that runs on a server and requests the delivery of a push message.
- Channel ID
- Legacy terminology for a Push Message Subscription utilized by WebPush and the websocket client protocol.
- Endpoint
- A REST-ful HTTP URL uniquely associated with a Push Message Subscription. This is referred to as a "push resource" in the WebPush specification.
- Push Message Subscription
- A message delivery context that is established between the user agent and the push service and shared with the application server. All push messages are associated with a push message subscription.
- Push Message
- A message sent from an application server to a user agent via a push service.
- Push Message Receipt
- A message delivery confirmation sent from the push service to the application server.
- Push Service
- A service that delivers push messages to user agents.
- SimplePush
- Deprecated Firefox OS specific Push system that carries no data, only an incrementing version number. The Mozilla Push Service no longer continues to support this legacy API.
- UAID
- A globally unique UserAgent ID. Used by the Push Service to associate clients utilizing the websocket protocol with their associated channel ID's. This string is always a UUID.
- User Agent
- A device and software that is the recipient of push messages.
- WebPush
- IETF specification regarding Push Messages, the protocol for their delivery (HTTP 2.0) to User Agents, and how the Application Server interacts with the Push Service. See the complete Webpush Specification.
Alternate Implementation
Other groups have implemented Push Services implementing WebPush.
Community Contributions
Matthias Wessendorf has provided a quick hack showing how to call the server by hand.