Notification storage and delivery
- A server, application, or plugin sends a message to our Messaging API over HTTPS (TLS), including its application (API) token, one or more user or group keys, and the message details such as the title, message, sound, attachment image, etc.
- Our server encrypts the message with each recipient device's specific encryption key (if encryption is supported by the device) and stores the message in our database, then responds to the API client that the message was successfully received.
- Our dispatch server communicates with the appropriate carrier push server (Google's, Apple's, or ours) over TLS and hands off the encrypted message. If successful, the message is marked as delivered in our database.
- Google's or Apple's push servers deliver the message to the end-user device over their proprietary, persistent TLS connections. Our Desktop push server delivers notifications to web browsers over a WebSocket connection.
- On Android phones, the notification is received by Google's Firebase service which then forwards it to the Pushover application, launching it in the background if needed. The message is decrypted by the Pushover app and stored unencrypted in its local database, and a system notification is generated.
- On iOS, the Pushover application's notification extension is launched which decrypts the message, stores it in its local database, and generates a system notification.
- On Desktop browser devices, the a signal is sent over its persistent WebSocket connection notifying it of a new message pending, which causes it to do a sync with our server and store any new messages in its local database, and a local browser notification is generated.
- On macOS desktops, the notification is received by macOS's push notification service and a notification is generated. No sync is performed until Safari is opened by clicking on the notification or visiting our Desktop client site.
- If an image attachment was included with the original message sent to our API, the Pushover app downloads the image attachment from our servers and stores it locally before generating a local notification. Once the image attachment has been downloaded, the client notifies our API and once all devices that the image was delivered to have reported in, the attachment is marked for deletion on our servers.
- When the Pushover device client is opened and has not synchronized recently (or a manual sync is requested), the device client communicates with the Pushover servers over TLS and downloads any new messages that were not received by push notification, usually due to transient network issues.
- Finally, the Pushover device client notifies the Pushover servers of the highest message ID that it has in its database that has been reliably received. The Pushover servers delete all messages up to and including that ID. At this point, the message exists only on the user's devices that it was delivered to. Image attachments marked for deletion are permanently deleted from our servers so the images are only existing on the devices they have been delivered to.
Messages delivered to devices but not acknowledged will be automatically deleted from our servers after 21 days, and image attachments after 3 days.