From 828e5371aa0c48825f68de05169d8d8f4d9ab177 Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Thu, 27 Nov 2025 10:29:27 +0000 Subject: [PATCH 01/14] Add push notifications guide --- src/data/nav/pubsub.ts | 9 + .../docs/guides/pubsub/push-notifications.mdx | 526 ++++++++++++++++++ 2 files changed, 535 insertions(+) create mode 100644 src/pages/docs/guides/pubsub/push-notifications.mdx diff --git a/src/data/nav/pubsub.ts b/src/data/nav/pubsub.ts index b29bc548d4..60dfbfa881 100644 --- a/src/data/nav/pubsub.ts +++ b/src/data/nav/pubsub.ts @@ -316,6 +316,15 @@ export default { }, ], }, + { + name: 'Guides', + pages: [ + { + name: 'Push notifications', + link: '/docs/guides/pubsub/push-notifications', + }, + ], + }, ], api: [ { diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx new file mode 100644 index 0000000000..549844bd26 --- /dev/null +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -0,0 +1,526 @@ +--- +title: "Guide: Implementing push notifications at scale with Ably" +meta_description: "A practical guide to architecting push notifications with Ably across iOS, Android, and web. Design decisions, delivery models, and optimization strategies." +meta_keywords: "push notifications, APNs, FCM, Web Push, mobile notifications, device management, multi-platform, scalability" +--- + +Push notifications are an important channel for engaging users outside of your application. Whether you're sending transactional alerts, breaking news, or marketing messages, push notifications need to be reliable, fast, and work seamlessly across iOS, Android, and web platforms. + +This guide walks through the architectural decisions and practical considerations for implementing push notifications at scale using Ably. You'll learn how to design your notification system, manage devices across platforms, optimize for cost and performance, and handle the complexities of multi-platform delivery. + +## Why Ably for push notifications? + +Push notifications require integration with multiple platform-specific services: Apple Push Notification Service (APNs) for iOS, Firebase Cloud Messaging (FCM) for Android, and Web Push for browsers. Each has its own authentication mechanisms, payload formats, and reliability characteristics. + +Ably provides a unified API that handles all three platforms, managing: + +* **Platform abstraction:** Write once, deliver everywhere. Ably translates your notifications into platform-specific formats. +* **Credential management:** Store your APNs certificates, FCM service accounts, and VAPID keys securely in one place. +* **Delivery reliability:** Ably handles retries, tracks delivery status, and provides error reporting through meta channels. +* **Scale:** From hundreds to millions of devices, Ably's infrastructure scales automatically without requiring you to manage connection pools or rate limits. +* **Users and devices:** Ably provides methods to send notifications to the right recipients. Send notifications to channels, users by `clientId`, or devices by `deviceId`. + +The alternative is maintaining separate integrations with each push service, handling their individual quirks, managing credentials across multiple systems, building your own retry and error handling logic, mapping between devices and users in your application, and managing subscriptions to topics. + +![Push notifications lifecycle](../../../../images/content/diagrams/push-lifecycle.png) + +## Choosing your targeting model: Direct vs. Channel-based + +The first architectural decision is how you'll target notifications. Ably supports two fundamentally different approaches, each suited to different use cases. + +### Direct publishing + +[Direct publishing](/docs/push/publish#direct-publishing) sends notifications to specific devices or users without requiring them to subscribe to channels. You target notifications using one of: +* `deviceId`: The unique identifier Ably assigns to each device during activation. +* `clientId`: Your application's user identifier, which can target all of a user's devices at once. +* **Recipient attributes:** Direct targeting using device tokens or transport types. + +This approach works well for: +* Transactional notifications (order confirmations, password resets, account alerts). +* User-specific messages that don't fit into predefined topics. +* Migrating from an existing push system where you already have device tokens. +* Applications where notification preferences are complex and user-specific. +* Chat features such as at-mentions or direct messages. + + +```javascript +// Send to a specific device +await client.push.admin.publish( + { deviceId: 'device-123' }, + { + notification: { + title: 'Your order has shipped', + body: 'Track your package in the app' + } + } +); + +// Send to all devices for a user +await client.push.admin.publish( + { clientId: 'user-456' }, + { + notification: { + title: 'New message from Sarah', + body: 'Hey, are you free tomorrow?' + } + } +); +``` + + +### Channel-based publishing + +[Publishing via channels](/docs/push/publish#via-channels) uses Ably's pub/sub model. Devices subscribe to channels representing topics, and notifications are broadcast to all subscribers. + +This approach works well for: + +* Topic-based notifications (news categories, sports scores, stock alerts). +* Group messaging or team notifications. +* Geographic or demographic targeting (if channels are organized that way). +* Scenarios where users explicitly opt into notification categories. + +Using channels here is a form of organizing the notifications into categories or topics. While users (or devices) must subscribe for push notifications to channels using `subscribeDevice()` or `subscribeClient()` to receive channel push notifications, they do not need to be attached to the channels to receive them. The notifications are delivered efficiently via the relevant push service (APNs, FCM, or Web Push). Depending on the target device and permissions, they can be received when the app is closed or in the background. + + +```javascript +// Device subscribes to a channel +const channel = client.channels.get('news:breaking'); +await channel.push.subscribeDevice(); + +// Later, publish to all subscribers +const channel = client.channels.get('news:breaking'); +await channel.publish({ + name: 'alert', + data: 'Breaking news story', + extras: { + push: { + notification: { + title: 'Breaking News', + body: 'Major development in ongoing story' + } + } + } +}); +``` + + +### Choosing between the two + +Many applications use both models for different features. For example: + +* Channel-based for optional categories users can subscribe to (sports updates, promotions, new messages to a group chat). +* Direct publishing for critical user-specific alerts (account security, payment confirmations, direct chat messages). + +Consider your notification taxonomy. If you broadcast the same notification to many users, channels simplify this. You can also enable users to have granular preferences ("I want basketball scores but not football") by using different channels for different choices they can make. On the other hand, if most notifications are personal and transactional, direct publishing is simpler: either by `clientId` (target all devices of a specific user) or `deviceId` (target a specific device). + +## Multi-platform considerations + +A core challenge of push notifications is handling three different platforms with different capabilities and payload formats. + +### Platform features + +Each platform has unique features: + +* **iOS (APNs):** Rich notifications with media, notification categories, thread grouping, critical alerts. +* **Android (FCM):** Custom notification colors, large icons, notification channels, background data messages. +* **Web Push:** Basic notifications with icons and actions, limited styling, varies by browser. + +Ably provides a [unified payload structure](/docs/push/publish#payload) that maps to each platform. + + +```javascript +{ + notification: { + title: 'Hello from Ably', // Maps to all platforms + body: 'This is a notification', // Maps to all platforms + icon: '/icon.png', // Used by FCM and Web Push, ignored by APNs + sound: 'default', // Used by APNs and FCM, ignored by Web Push + collapseKey: 'chat' // Maps to collapse_key (FCM) and thread-id (APNs) + }, + data: { // Available on all platforms + customField: 'value' + } +} +``` + + +### Platform-specific overrides + +For platform-specific features, you can override the generic payload: + + +```javascript +{ + notification: { + title: 'New Message', + body: 'You have a new message' + }, + // iOS-specific overrides + apns: { + aps: { + alert: { + title: 'Hello, iOS', // Different title for iOS + }, + } + }, + // Android-specific overrides + fcm: { + notification: { + color: '#FF5722', // Android accent color + } + }, + // Web-specific overrides + web: { + badge: '/badge.png', + } +} +``` + + +This lets you use platform-specific features while maintaining a single codebase for notification publishing. + +### Testing across platforms + +When developing, test notifications on all target platforms early. Platform-specific bugs often relate to: + +* Images don't show, for example because the URLs are not accessible from all platforms. +* Sound files that don't exist or are in the wrong format. +* Custom data that exceeds platform size limits (4KB for iOS, 4KB for FCM data payload). +* Character encoding issues in titles or bodies. + +## Device and browser activation strategies + +Before [devices](/docs/push/configure/device) or [browsers](/docs/push/configure/web) can receive push notifications, they must be activated - registered with both the platform's push service (APNs, FCM, or Web Push) and with Ably. + +### Client-side activation + +Client-side activation is the simplest approach. Registration happens fully on the client device or browser. Ably SDKs provide a simple API to activate push notifications for devices and browsers: + + +```javascript +// Browsers +import Ably from "ably"; +import Push from "ably/push"; + +const client = new Ably.Realtime({ + authCallback: getTokenFromYourServer, + pushServiceWorkerUrl: '/service-worker.js', + plugins: { Push } +}); + +await client.push.activate(); +``` + +```swift +// iOS +let ably = self.getAblyRealtime() +ably.push.activate() +``` + +```kotlin +// Android +val ably = getAblyRealtime() +ably.setAndroidContext(context) +ably.push.activate() +``` + + + +The device gets a `deviceId` from Ably and can immediately subscribe to channels or receive direct notifications. If the Ably client is using a `clientId`, the registration will also be associated with that `clientId`. + +Always deactivate the device when the user logs out or the device is no longer needed. This can be done by calling `push.deactivate()` on the Ably client. + + +```javascript +await client.push.deactivate(); +``` + +```swift +ably.push.deactivate() +``` + +```kotlin +ably.push.deactivate() +``` + + +### Server-side activation + +Server-side activation gives you more control. The device obtains its platform token (FCM registration token, APNs device token, or Web Push subscription) on the client, and then sends it to your server. Your server registers the device with Ably using the push admin API. This approach can also be used to migrate push notifications to Ably without reactivating push notifications on all devices for all platforms. + +Server-side activation also allows you to use FCM for both Android and iOS devices for unified push messaging. + + +```javascript +// On device: Get platform token and send to your server +const platformToken = await getPlatformPushToken(); // Platform-specific +await fetch('https://example.com/register-device', { + method: 'POST', + body: JSON.stringify({ + userId: currentUser.id, + platformToken, + platform: 'ios' // or 'android', 'web' + }) +}); + +// On your server: Register with Ably +app.post('/register-device', async (req, res) => { + const { userId, platformToken, platform } = req.body; + + // Register device with Ably + await ablyClient.push.admin.deviceRegistrations.save({ + id: generateDeviceId(userId, platform), + platform: platform, + formFactor: 'phone', + clientId: userId, + push: { + recipient: { + transportType: platform === 'ios' ? 'apns' : 'fcm', + deviceToken: platformToken + } + } + }); + + res.json({ success: true }); +}); +``` + + +Server-side activation is preferred when: + +* You need strict control over who can register devices. +* You want to validate user identity before enabling notifications. +* You're migrating from another push provider and already have server-side device management. +* You want to use FCM for both Android and iOS devices for unified push messaging. + +## Authentication and security + +Push notifications require careful permission management. Ably uses [capability-based authentication](/docs/auth/capabilities) to control what clients can do. + +### Capabilities + +Push notifications use two main capabilities: + +* **push-subscribe:** Allows a device to manage its own registration and subscribe to channels. Suitable for end user devices. +* **push-admin:** Full access to push admin API - register any device, subscribe any device to channels, send direct notifications. Only for servers. + + +Example capabilities: + +```javascript +// Subscribe to all channels, and push-subscribe for "news:" channels; suitable for a client: +{ + '*': ['subscribe'], // Can subscribe to realtime messages + 'news:*': ['subscribe', 'push-subscribe'] // Can also subscribe to push notifications on news channels +} + +// For your server with push-admin +{ + '*': ['subscribe', 'publish', 'push-admin'] // Full push admin access +} +``` + + +Capabilities can be set for API keys, Ably tokens, and JWT tokens. Read more about [authentication with Ably](/docs/auth). + +If you are using channel-based push notifications, be aware that everyone with `publish` capability can publish messages to that channel, including sending push notifications. We recommend that only your server has `publish` capability on channels you want to use for push notifications. + +### Security considerations + +Follow these practices: + +* Never give clients `push-admin` capability. They could manage registrations and subscriptions for push notifications for any device. +* Do not give `publish` capability to clients on channels used for push notifications. This could allow any clients to publish push notifications to that channel. +* To make permission management straightforward, use separate channels for push notifications and other parts of your application. +* Only grant the capabilities that are needed for the specific use case. +* Use token authentication and not API key authentication. + +## Managing device lifecycle + +Device management is critical for a healthy push notification system. Devices don't last forever: users upgrade phones, uninstall apps, revoke notification permissions, or log out and in with different accounts. + +Devices need updates when: + +* The user logs in or out (changing `clientId`). +* The platform token changes (for example, FCM tokens refresh). +* The user disables push notifications for the app and later re-enables them. + + +```javascript +// Update device registration +await client.push.admin.deviceRegistrations.save({ + id: 'device-123', + clientId: 'new-user-id', // User logged into different account +}); +``` + + +### Handling deactivation + +When users disable notifications in your app or log out, remove the device registration from Ably: + + +```javascript +// User disables notifications in app settings +await client.push.deactivate(); +``` + + +The device will not receive further notifications until reactivated. + +## Subscription management at scale + +If using channel-based notifications, managing subscriptions efficiently is important as your user base grows. + +### Channel organization + +Good channel design makes it easy for users to subscribe to exactly what they want, and for you to target notifications precisely. Design your channels thoughtfully: + +* General categories: topic, geography, user segment. +* Personalized user interests: groups the user is in, discussion threads or chat rooms the user is active in, documents the user is working on, and more. +* Any other business logic. + + +```javascript +// By topic +'news:sports:basketball' +'news:sports:football' +'news:politics' + +// By geography +'alerts:us:california' +'alerts:uk:london' + +// By user segment +'offers:premium-users' +'offers:trial-users' + +// By user-specific interests +'forum:thread:80483243', +'game-session:cd0fe2fe-ba01-49bd-ae2b-6ad334f52197', +'document:5b2aca2d-15f1-4dff-9bae-07e1c9454913' +``` + + +### Subscribing devices + +Devices can subscribe using `deviceId` (this device only) or `clientId` (all user's devices): + + +```javascript +// Subscribe just this device +const channel = client.channels.get('news:breaking'); +await channel.push.subscribeDevice(); + +// Subscribe all devices for this user +await channel.push.subscribeClient(); +``` + + +Subscribe the device when you need to target push notifications directly to this device: +- For applications where there are no user accounts. +- For use cases where each device matters independently, such as "find my," "play on this device," or "send to that device." +- For more control where users can choose which notifications they receive on each of their devices. + +Subscribe the user when you need to target push notifications to all of the user's devices. For example: +- When the user receives a new message, email, or game invite. +- When the user is mentioned in a thread. +- When there is a new comment on a document the user is watching. + +### Bulk subscription management + +For managing subscriptions at scale, use the push admin API from your server. It allows you to manage subscriptions to channels for a device, clientId, or both. It also supports bulk operations such as removing all subscriptions for a clientId or device. + + +```javascript +// Subscribe user-abcd to a new channel +await ablyClient.push.admin.channelSubscriptions.save({ + channel: 'document:5b2aca2d-15f1-4dff-9bae-07e1c9454913', + clientId: 'user-abcd' +}); + +// Get all channel subscriptions of user-abcd +await ablyClient.push.admin.channelSubscriptions.list({"clientId": "user-abcd"}); + +// Remove all channel subscriptions of user-abcd +await ablyClient.push.admin.channelSubscriptions.remove({"clientId": "user-abcd"}); +``` + + +## Batch publishing for efficiency + +When you need to send distinct notifications to many users, use the [batch push API](/docs/push/publish#via-batch-push-api). It allows you to send customised notifications to many users in a single request. If you need to send the same notification to many users, use [channels](/docs/push/publish#via-channels). + +Batch publishing is ideal for scenarios like: + +* Sending personalized notifications to thousands of users (different content per user). +* Daily digests with user-specific content. +* Scheduled reminders that vary by user. +* Re-engagement campaigns with customized messages. + +Example: + +```javascript +// Build an array of notification specs +const notifications = users.map(user => ({ + recipient: { clientId: user.id }, + payload: { + notification: { + title: `Hi ${user.name}!`, + body: `You left ${user.basketSize} items in your basket. Tap to continue shopping.`, + } + } +})); + +// Send up to 10,000 notifications in one request +await rest.request('POST', '/push/batch/publish', 3, null, notifications); +``` + + +## Monitoring and error handling + +Push notification failures are inevitable: devices go offline, users uninstall apps, tokens expire. Monitoring and handling errors properly is critical. + +Ably publishes push errors to a dedicated meta channel `[meta]log:push`. Monitor this channel to track push notification delivery errors. + + +```javascript +const metaChannel = client.channels.get('[meta]log:push'); +metaChannel.subscribe((message) => { + console.log(message); +}); +``` + + +Use meta channel data to: + +* Remove devices with permanent failures (InvalidRegistration, NotRegistered). +* Track delivery rates and identify platform-specific issues. + +### Common failure scenarios + +* **Invalid tokens:** Device token changed or app was uninstalled. Remove the device registration. +* **Platform service down:** APNs or FCM experiencing issues. +* **Payload too large:** Keep total payload under 4KB. Large images should be URLs, not embedded data. +* **Permission denied:** User revoked notification permissions. Prompt them to re-enable in settings. + +## Production-ready checklist + +Before launching push notifications: + +* **Platform configuration:** Ensure APNs certificates/tokens, FCM service account credentials, and Web Push service worker are properly configured and tested across all target platforms. +* **Authentication and security:** Use token authentication for all client-side communication, restrict the `push-admin` capability to your backend servers only, and verify that clients cannot access admin push APIs. +* **Device lifecycle management:** Implement device activation, deactivation, and token refresh handling, and have a strategy in place for removing devices that are no longer active. +* **Channel structure and subscriptions:** Design your channel naming strategy and implement subscription management that allows users to control their notification preferences and easily unsubscribe. +* **Monitoring and error tracking:** Subscribe to the `[meta]log:push` meta channel to monitor push notification delivery errors. +* **Cross-platform testing:** Test notifications across all target platforms to ensure consistent delivery and behavior. +* **Scale planning:** Confirm you are on the right Ably package for your expected notification volume and user base size. + +## Next steps + +* Review the [push notifications documentation](/docs/push) for API details. +* Learn how to [configure devices](/docs/push/configure/device) and [web browsers](/docs/push/configure/web). +* Understand [publishing methods](/docs/push/publish) in depth. +* Explore the [push admin API](/docs/api/realtime-sdk/push-admin). +* Check out [authentication best practices](/docs/auth). +* Read about our [platform architecture](/docs/platform/architecture) for scale considerations. From 882a0aa67c83cafea7db6bcfa06fc8cd03cc4407 Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Thu, 27 Nov 2025 12:58:32 +0000 Subject: [PATCH 02/14] mention retires if delivery platforms are down --- src/pages/docs/guides/pubsub/push-notifications.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index 549844bd26..4f02e5cf33 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -500,7 +500,7 @@ Use meta channel data to: ### Common failure scenarios * **Invalid tokens:** Device token changed or app was uninstalled. Remove the device registration. -* **Platform service down:** APNs or FCM experiencing issues. +* **Platform service down:** APNs or FCM experiencing issues. Ably will automatically retry delivery. * **Payload too large:** Keep total payload under 4KB. Large images should be URLs, not embedded data. * **Permission denied:** User revoked notification permissions. Prompt them to re-enable in settings. From f82e1f79fd6d4cd86103cbfaafe78c994fac4aab Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Fri, 5 Dec 2025 02:19:51 +0000 Subject: [PATCH 03/14] review fixes: remove code blocks when code is not really linked to a language, or is not even code --- .../docs/guides/pubsub/push-notifications.mdx | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index 4f02e5cf33..67de9a82f0 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -42,7 +42,6 @@ This approach works well for: * Applications where notification preferences are complex and user-specific. * Chat features such as at-mentions or direct messages. - ```javascript // Send to a specific device await client.push.admin.publish( @@ -66,7 +65,6 @@ await client.push.admin.publish( } ); ``` - ### Channel-based publishing @@ -81,7 +79,7 @@ This approach works well for: Using channels here is a form of organizing the notifications into categories or topics. While users (or devices) must subscribe for push notifications to channels using `subscribeDevice()` or `subscribeClient()` to receive channel push notifications, they do not need to be attached to the channels to receive them. The notifications are delivered efficiently via the relevant push service (APNs, FCM, or Web Push). Depending on the target device and permissions, they can be received when the app is closed or in the background. - + ```javascript // Device subscribes to a channel const channel = client.channels.get('news:breaking'); @@ -102,7 +100,6 @@ await channel.publish({ } }); ``` - ### Choosing between the two @@ -127,7 +124,6 @@ Each platform has unique features: Ably provides a [unified payload structure](/docs/push/publish#payload) that maps to each platform. - ```javascript { notification: { @@ -142,13 +138,11 @@ Ably provides a [unified payload structure](/docs/push/publish#payload) that map } } ``` - ### Platform-specific overrides For platform-specific features, you can override the generic payload: - ```javascript { notification: { @@ -175,7 +169,6 @@ For platform-specific features, you can override the generic payload: } } ``` - This lets you use platform-specific features while maintaining a single codebase for notification publishing. @@ -202,45 +195,55 @@ Client-side activation is the simplest approach. Registration happens fully on t import Ably from "ably"; import Push from "ably/push"; -const client = new Ably.Realtime({ +const realtimeClient = new Ably.Realtime({ authCallback: getTokenFromYourServer, pushServiceWorkerUrl: '/service-worker.js', plugins: { Push } }); -await client.push.activate(); +await realtimeClient.push.activate(); ``` ```swift // iOS -let ably = self.getAblyRealtime() -ably.push.activate() +let options = ARTClientOptions() +// Implement getTokenFromServer to fetch a token from your server +options.authCallback = getTokenFromServer +let realtimeClient = ARTRealtime(options: options) + +realtimeClient.push.activate() ``` ```kotlin // Android -val ably = getAblyRealtime() -ably.setAndroidContext(context) -ably.push.activate() -``` +val options = ClientOptions().apply { + authCallback = Auth.TokenCallback { params -> + // Implement this function to get a token from your server + getTokenFromServer() + } +} +val realtimeClient = AblyRealtime(options) +realtimeClient.setAndroidContext(context) +realtimeClient.push.activate() +``` The device gets a `deviceId` from Ably and can immediately subscribe to channels or receive direct notifications. If the Ably client is using a `clientId`, the registration will also be associated with that `clientId`. -Always deactivate the device when the user logs out or the device is no longer needed. This can be done by calling `push.deactivate()` on the Ably client. +Always deactivate the device when the user logs out or the device is no longer needed. This can be done by calling `push.deactivate()` on the Ably client: ```javascript -await client.push.deactivate(); +await realtimeClient.push.deactivate(); ``` ```swift -ably.push.deactivate() +realtimeClient.push.deactivate() ``` ```kotlin -ably.push.deactivate() +realtimeClient.push.deactivate() ``` @@ -250,7 +253,6 @@ Server-side activation gives you more control. The device obtains its platform t Server-side activation also allows you to use FCM for both Android and iOS devices for unified push messaging. - ```javascript // On device: Get platform token and send to your server const platformToken = await getPlatformPushToken(); // Platform-specific @@ -284,7 +286,6 @@ app.post('/register-device', async (req, res) => { res.json({ success: true }); }); ``` - Server-side activation is preferred when: @@ -304,9 +305,12 @@ Push notifications use two main capabilities: * **push-subscribe:** Allows a device to manage its own registration and subscribe to channels. Suitable for end user devices. * **push-admin:** Full access to push admin API - register any device, subscribe any device to channels, send direct notifications. Only for servers. +Capabilities can be set for: +- [API keys](/docs/auth/basic): set in the Ably dashboard. +- [Ably tokens](/docs/auth/token#tokens): set in the `capability` field when requesting a token. +- [JWT tokens](/docs/auth/token#jwt): set in the `x-ably-capability` claim as a JSON-encoded string. -Example capabilities: - +Here are some example capabilities: ```javascript // Subscribe to all channels, and push-subscribe for "news:" channels; suitable for a client: { @@ -319,9 +323,8 @@ Example capabilities: '*': ['subscribe', 'publish', 'push-admin'] // Full push admin access } ``` - -Capabilities can be set for API keys, Ably tokens, and JWT tokens. Read more about [authentication with Ably](/docs/auth). +You can read more about [authentication with Ably here](/docs/auth). If you are using channel-based push notifications, be aware that everyone with `publish` capability can publish messages to that channel, including sending push notifications. We recommend that only your server has `publish` capability on channels you want to use for push notifications. @@ -330,7 +333,7 @@ If you are using channel-based push notifications, be aware that everyone with ` Follow these practices: * Never give clients `push-admin` capability. They could manage registrations and subscriptions for push notifications for any device. -* Do not give `publish` capability to clients on channels used for push notifications. This could allow any clients to publish push notifications to that channel. +* Do not give `publish` capability to clients on channels used for push notifications. This will allow the clients to publish push notifications to that channel. Only do this for use cases such as admin dashboards, where sending push notifications by the user is allowed. * To make permission management straightforward, use separate channels for push notifications and other parts of your application. * Only grant the capabilities that are needed for the specific use case. * Use token authentication and not API key authentication. From 377ba43a0686cbabf359a3f63007a9cdbbc9b9cb Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Fri, 5 Dec 2025 02:28:42 +0000 Subject: [PATCH 04/14] merge activation and device lifecycle sections --- .../docs/guides/pubsub/push-notifications.mdx | 52 +++++++------------ 1 file changed, 19 insertions(+), 33 deletions(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index 67de9a82f0..65adee4a39 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -294,6 +294,25 @@ Server-side activation is preferred when: * You're migrating from another push provider and already have server-side device management. * You want to use FCM for both Android and iOS devices for unified push messaging. +### Updating device registrations + +Device registrations don't last forever: users upgrade phones, uninstall apps, revoke notification permissions, or log out and in with different accounts. Devices need updates when: + +* The user logs in or out (changing `clientId`). +* The platform token changes (for example, FCM tokens refresh). +* The user disables push notifications for the app and later re-enables them. + +Example to update a device registration from the server-side: +```javascript +// Update device registration +await client.push.admin.deviceRegistrations.save({ + id: 'device-123', + clientId: 'new-user-id', // User logged into different account +}); +``` + +From the client-side, first deactivate the device, and then activate it again with the new details. + ## Authentication and security Push notifications require careful permission management. Ably uses [capability-based authentication](/docs/auth/capabilities) to control what clients can do. @@ -338,39 +357,6 @@ Follow these practices: * Only grant the capabilities that are needed for the specific use case. * Use token authentication and not API key authentication. -## Managing device lifecycle - -Device management is critical for a healthy push notification system. Devices don't last forever: users upgrade phones, uninstall apps, revoke notification permissions, or log out and in with different accounts. - -Devices need updates when: - -* The user logs in or out (changing `clientId`). -* The platform token changes (for example, FCM tokens refresh). -* The user disables push notifications for the app and later re-enables them. - - -```javascript -// Update device registration -await client.push.admin.deviceRegistrations.save({ - id: 'device-123', - clientId: 'new-user-id', // User logged into different account -}); -``` - - -### Handling deactivation - -When users disable notifications in your app or log out, remove the device registration from Ably: - - -```javascript -// User disables notifications in app settings -await client.push.deactivate(); -``` - - -The device will not receive further notifications until reactivated. - ## Subscription management at scale If using channel-based notifications, managing subscriptions efficiently is important as your user base grows. From e1e320e8d156821a5781ecdaf0b5d9f7e3ea0d5e Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Fri, 5 Dec 2025 06:02:24 +0000 Subject: [PATCH 05/14] make article more guide, less extended doc page --- .../docs/guides/pubsub/push-notifications.mdx | 291 +++++------------- 1 file changed, 72 insertions(+), 219 deletions(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index 65adee4a39..341f13f7dc 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -24,9 +24,13 @@ The alternative is maintaining separate integrations with each push service, han ![Push notifications lifecycle](../../../../images/content/diagrams/push-lifecycle.png) -## Choosing your targeting model: Direct vs. Channel-based +## High-volume delivery and targeting at scale -The first architectural decision is how you'll target notifications. Ably supports two fundamentally different approaches, each suited to different use cases. +One of the hardest problems with push notifications at scale is managing who gets what. A news app might have millions of users subscribed to hundreds of topic combinations. A collaboration tool needs dynamic subscriptions as users join and leave projects. + +Ably handles this complexity server-side. You don't need to maintain subscription databases or fan-out logic - Ably tracks which devices are subscribed to which channels and delivers efficiently. + +Ably supports two fundamentally different approaches to targeting notifications, each suited to different use cases. The same app can use both approaches for different features. ### Direct publishing @@ -66,9 +70,13 @@ await client.push.admin.publish( ); ``` +#### Batch API + +The [batch push API](/docs/push/publish#via-batch-push-api) allows you to send up to 10,000 personalized notifications in a single request. This is ideal for scenarios like daily digests, re-engagement campaigns, or any case where each user gets different content. See the [batch push API docs](/docs/push/publish#via-batch-push-api) for implementation details. + ### Channel-based publishing -[Publishing via channels](/docs/push/publish#via-channels) uses Ably's pub/sub model. Devices subscribe to channels representing topics, and notifications are broadcast to all subscribers. +[Publishing via channels](/docs/push/publish#via-channels) uses Ably's pub/sub model. Devices subscribe to channels representing topics, and notifications are broadcast to all subscribers. Ably delivers the same notification to all push subscribers of a channel. Ably handles the fan-out - whether that's 100 or 1 million devices. This approach works well for: @@ -79,13 +87,31 @@ This approach works well for: Using channels here is a form of organizing the notifications into categories or topics. While users (or devices) must subscribe for push notifications to channels using `subscribeDevice()` or `subscribeClient()` to receive channel push notifications, they do not need to be attached to the channels to receive them. The notifications are delivered efficiently via the relevant push service (APNs, FCM, or Web Push). Depending on the target device and permissions, they can be received when the app is closed or in the background. - +Subscribe a device or clientId to a channel: + ```javascript // Device subscribes to a channel const channel = client.channels.get('news:breaking'); -await channel.push.subscribeDevice(); +await channel.push.subscribeDevice(); // or subscribeClient() +``` + +```kotlin +// Device subscribes to a channel +val channel = client.channels.get("news:breaking") +channel.push.subscribeDevice(context) // or subscribeClient() +``` + +```swift +// Device subscribes to a channel +let channel = client.channels.get("news:breaking") +channel.push.subscribeDevice { error in // or subscribeClient() + // Check error +} +``` + -// Later, publish to all subscribers +Publish to all subscribers: +```javascript const channel = client.channels.get('news:breaking'); await channel.publish({ name: 'alert', @@ -101,6 +127,16 @@ await channel.publish({ }); ``` +For bulk operations - like subscribing a user to all their team channels when they join - use the [push admin API](/docs/api/realtime-sdk/push-admin) from your server. + +#### Channel design for scale + +Your channel structure determines how efficiently you can target notifications. Examples: + +* **Topic channels** (`news:sports:basketball`) let users subscribe to specific interests. +* **Geographic channels** (`alerts:uk:london`) enable location-based targeting. +* **Dynamic channels** (`document:5b2aca2d`) handle user-specific contexts like documents, threads, or game sessions. + ### Choosing between the two Many applications use both models for different features. For example: @@ -181,9 +217,9 @@ When developing, test notifications on all target platforms early. Platform-spec * Custom data that exceeds platform size limits (4KB for iOS, 4KB for FCM data payload). * Character encoding issues in titles or bodies. -## Device and browser activation strategies +## Device activation at scale -Before [devices](/docs/push/configure/device) or [browsers](/docs/push/configure/web) can receive push notifications, they must be activated - registered with both the platform's push service (APNs, FCM, or Web Push) and with Ably. +Before [devices](/docs/push/configure/device) or [browsers](/docs/push/configure/web) can receive push notifications, they must be activated - registered with both the platform's push service (APNs, FCM, or Web Push) and with Ably. Ably handles the complexity of maintaining these registrations at scale, including token refresh, mapping devices to users, and keeping track of subscriptions to channels. ### Client-side activation @@ -247,6 +283,13 @@ realtimeClient.push.deactivate() ``` +Client-side activation is preferred when: + +* You need a simple, managed solution for device activation and deactivation. +* You do not need to use FCM as a proxy for push notifications on iOS and web. +* You can activate clients using client-side activation and use the [Push Notifications Admin API](/docs/api/realtime-sdk/push-admin) as needed for specific use cases. +* You want to avoid the complexity of device lifecycle management on your own servers. + ### Server-side activation Server-side activation gives you more control. The device obtains its platform token (FCM registration token, APNs device token, or Web Push subscription) on the client, and then sends it to your server. Your server registers the device with Ably using the push admin API. This approach can also be used to migrate push notifications to Ably without reactivating push notifications on all devices for all platforms. @@ -254,244 +297,54 @@ Server-side activation gives you more control. The device obtains its platform t Server-side activation also allows you to use FCM for both Android and iOS devices for unified push messaging. ```javascript -// On device: Get platform token and send to your server -const platformToken = await getPlatformPushToken(); // Platform-specific -await fetch('https://example.com/register-device', { - method: 'POST', - body: JSON.stringify({ - userId: currentUser.id, - platformToken, - platform: 'ios' // or 'android', 'web' - }) -}); - -// On your server: Register with Ably -app.post('/register-device', async (req, res) => { - const { userId, platformToken, platform } = req.body; - - // Register device with Ably - await ablyClient.push.admin.deviceRegistrations.save({ - id: generateDeviceId(userId, platform), - platform: platform, - formFactor: 'phone', - clientId: userId, - push: { - recipient: { - transportType: platform === 'ios' ? 'apns' : 'fcm', - deviceToken: platformToken - } +// On device: Get platform token and send it to your server + +// On your server: Register with Ably using a platformToken, platform, and clientId +await ablyClient.push.admin.deviceRegistrations.save({ + id: generateDeviceId(clientId, platform), + platform: platform, + formFactor: 'phone', + clientId: clientId, + push: { + recipient: { + transportType: platform === 'ios' ? 'apns' : 'fcm', + deviceToken: platformToken } - }); - - res.json({ success: true }); + } }); ``` Server-side activation is preferred when: -* You need strict control over who can register devices. -* You want to validate user identity before enabling notifications. +* You need strict control over device registrations. * You're migrating from another push provider and already have server-side device management. * You want to use FCM for both Android and iOS devices for unified push messaging. -### Updating device registrations - -Device registrations don't last forever: users upgrade phones, uninstall apps, revoke notification permissions, or log out and in with different accounts. Devices need updates when: - -* The user logs in or out (changing `clientId`). -* The platform token changes (for example, FCM tokens refresh). -* The user disables push notifications for the app and later re-enables them. - -Example to update a device registration from the server-side: -```javascript -// Update device registration -await client.push.admin.deviceRegistrations.save({ - id: 'device-123', - clientId: 'new-user-id', // User logged into different account -}); -``` - -From the client-side, first deactivate the device, and then activate it again with the new details. - ## Authentication and security -Push notifications require careful permission management. Ably uses [capability-based authentication](/docs/auth/capabilities) to control what clients can do. - -### Capabilities - -Push notifications use two main capabilities: +Ably uses [capability-based authentication](/docs/auth/capabilities) to control what clients can do with push notifications. Two capabilities matter for push notifications: * **push-subscribe:** Allows a device to manage its own registration and subscribe to channels. Suitable for end user devices. -* **push-admin:** Full access to push admin API - register any device, subscribe any device to channels, send direct notifications. Only for servers. - -Capabilities can be set for: -- [API keys](/docs/auth/basic): set in the Ably dashboard. -- [Ably tokens](/docs/auth/token#tokens): set in the `capability` field when requesting a token. -- [JWT tokens](/docs/auth/token#jwt): set in the `x-ably-capability` claim as a JSON-encoded string. - -Here are some example capabilities: -```javascript -// Subscribe to all channels, and push-subscribe for "news:" channels; suitable for a client: -{ - '*': ['subscribe'], // Can subscribe to realtime messages - 'news:*': ['subscribe', 'push-subscribe'] // Can also subscribe to push notifications on news channels -} - -// For your server with push-admin -{ - '*': ['subscribe', 'publish', 'push-admin'] // Full push admin access -} -``` +* **push-admin:** Full access to push admin API - register any device, subscribe any device to channels, send direct notifications. Only for +servers. You can read more about [authentication with Ably here](/docs/auth). -If you are using channel-based push notifications, be aware that everyone with `publish` capability can publish messages to that channel, including sending push notifications. We recommend that only your server has `publish` capability on channels you want to use for push notifications. - ### Security considerations Follow these practices: * Never give clients `push-admin` capability. They could manage registrations and subscriptions for push notifications for any device. -* Do not give `publish` capability to clients on channels used for push notifications. This will allow the clients to publish push notifications to that channel. Only do this for use cases such as admin dashboards, where sending push notifications by the user is allowed. +* Do not give `publish` capability to clients on channels used for push notifications. This will allow the clients to publish push notifications to that channel. Only do this for use cases such as admin dashboards, where sending push notifications by the user is allowed. * To make permission management straightforward, use separate channels for push notifications and other parts of your application. * Only grant the capabilities that are needed for the specific use case. * Use token authentication and not API key authentication. -## Subscription management at scale - -If using channel-based notifications, managing subscriptions efficiently is important as your user base grows. - -### Channel organization - -Good channel design makes it easy for users to subscribe to exactly what they want, and for you to target notifications precisely. Design your channels thoughtfully: - -* General categories: topic, geography, user segment. -* Personalized user interests: groups the user is in, discussion threads or chat rooms the user is active in, documents the user is working on, and more. -* Any other business logic. - - -```javascript -// By topic -'news:sports:basketball' -'news:sports:football' -'news:politics' - -// By geography -'alerts:us:california' -'alerts:uk:london' - -// By user segment -'offers:premium-users' -'offers:trial-users' - -// By user-specific interests -'forum:thread:80483243', -'game-session:cd0fe2fe-ba01-49bd-ae2b-6ad334f52197', -'document:5b2aca2d-15f1-4dff-9bae-07e1c9454913' -``` - - -### Subscribing devices - -Devices can subscribe using `deviceId` (this device only) or `clientId` (all user's devices): - - -```javascript -// Subscribe just this device -const channel = client.channels.get('news:breaking'); -await channel.push.subscribeDevice(); - -// Subscribe all devices for this user -await channel.push.subscribeClient(); -``` - - -Subscribe the device when you need to target push notifications directly to this device: -- For applications where there are no user accounts. -- For use cases where each device matters independently, such as "find my," "play on this device," or "send to that device." -- For more control where users can choose which notifications they receive on each of their devices. - -Subscribe the user when you need to target push notifications to all of the user's devices. For example: -- When the user receives a new message, email, or game invite. -- When the user is mentioned in a thread. -- When there is a new comment on a document the user is watching. - -### Bulk subscription management - -For managing subscriptions at scale, use the push admin API from your server. It allows you to manage subscriptions to channels for a device, clientId, or both. It also supports bulk operations such as removing all subscriptions for a clientId or device. - - -```javascript -// Subscribe user-abcd to a new channel -await ablyClient.push.admin.channelSubscriptions.save({ - channel: 'document:5b2aca2d-15f1-4dff-9bae-07e1c9454913', - clientId: 'user-abcd' -}); - -// Get all channel subscriptions of user-abcd -await ablyClient.push.admin.channelSubscriptions.list({"clientId": "user-abcd"}); - -// Remove all channel subscriptions of user-abcd -await ablyClient.push.admin.channelSubscriptions.remove({"clientId": "user-abcd"}); -``` - - -## Batch publishing for efficiency - -When you need to send distinct notifications to many users, use the [batch push API](/docs/push/publish#via-batch-push-api). It allows you to send customised notifications to many users in a single request. If you need to send the same notification to many users, use [channels](/docs/push/publish#via-channels). - -Batch publishing is ideal for scenarios like: - -* Sending personalized notifications to thousands of users (different content per user). -* Daily digests with user-specific content. -* Scheduled reminders that vary by user. -* Re-engagement campaigns with customized messages. - -Example: - -```javascript -// Build an array of notification specs -const notifications = users.map(user => ({ - recipient: { clientId: user.id }, - payload: { - notification: { - title: `Hi ${user.name}!`, - body: `You left ${user.basketSize} items in your basket. Tap to continue shopping.`, - } - } -})); - -// Send up to 10,000 notifications in one request -await rest.request('POST', '/push/batch/publish', 3, null, notifications); -``` - - -## Monitoring and error handling - -Push notification failures are inevitable: devices go offline, users uninstall apps, tokens expire. Monitoring and handling errors properly is critical. - -Ably publishes push errors to a dedicated meta channel `[meta]log:push`. Monitor this channel to track push notification delivery errors. - - -```javascript -const metaChannel = client.channels.get('[meta]log:push'); -metaChannel.subscribe((message) => { - console.log(message); -}); -``` - - -Use meta channel data to: - -* Remove devices with permanent failures (InvalidRegistration, NotRegistered). -* Track delivery rates and identify platform-specific issues. +## Delivery monitoring -### Common failure scenarios +Push notification failures are inevitable: devices go offline, users uninstall apps, tokens expire. At scale, you need visibility into what's happening across millions of delivery attempts. -* **Invalid tokens:** Device token changed or app was uninstalled. Remove the device registration. -* **Platform service down:** APNs or FCM experiencing issues. Ably will automatically retry delivery. -* **Payload too large:** Keep total payload under 4KB. Large images should be URLs, not embedded data. -* **Permission denied:** User revoked notification permissions. Prompt them to re-enable in settings. +Ably publishes delivery feedback to the `[meta]log:push` channel in real-time. This gives you immediate visibility into failures - invalid tokens, expired registrations, platform outages - so you can maintain a clean device registry and debug issues quickly. Ably also handles automatic retries when APNs or FCM experience transient issues, so you don't need to build retry logic yourself. ## Production-ready checklist From 137c51115cca2a8d0a241b7425778bd3fb0d02b2 Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Mon, 8 Dec 2025 09:31:51 +0000 Subject: [PATCH 06/14] review fixes: pricing paragraph, 4 pillars, java backend example --- .../docs/guides/pubsub/push-notifications.mdx | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index 341f13f7dc..5513b7ef25 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -12,12 +12,19 @@ This guide walks through the architectural decisions and practical consideration Push notifications require integration with multiple platform-specific services: Apple Push Notification Service (APNs) for iOS, Firebase Cloud Messaging (FCM) for Android, and Web Push for browsers. Each has its own authentication mechanisms, payload formats, and reliability characteristics. +Ably's platform is engineered around the [four pillars of dependability](/four-pillars-of-dependability): + +* **[Performance](/docs/platform/architecture/performance):** Ultra-low latency messaging ensures notifications are delivered quickly, even at global scale. +* **[Integrity](/docs/platform/architecture/message-ordering):** Guaranteed message delivery with no duplicates or lost notifications. +* **[Reliability](/docs/platform/architecture/fault-tolerance):** 99.999% uptime SLA with automatic failover and seamless recovery. +* **[Availability](/docs/platform/architecture/edge-network):** Global edge infrastructure ensures reliable connectivity worldwide. + Ably provides a unified API that handles all three platforms, managing: * **Platform abstraction:** Write once, deliver everywhere. Ably translates your notifications into platform-specific formats. * **Credential management:** Store your APNs certificates, FCM service accounts, and VAPID keys securely in one place. * **Delivery reliability:** Ably handles retries, tracks delivery status, and provides error reporting through meta channels. -* **Scale:** From hundreds to millions of devices, Ably's infrastructure scales automatically without requiring you to manage connection pools or rate limits. +* **Scale:** From hundreds to millions of devices, Ably's [serverless architecture](/docs/platform/architecture) scales automatically without requiring you to manage connection pools or rate limits. Backed by a [99.999% uptime SLA](/uptime). * **Users and devices:** Ably provides methods to send notifications to the right recipients. Send notifications to channels, users by `clientId`, or devices by `deviceId`. The alternative is maintaining separate integrations with each push service, handling their individual quirks, managing credentials across multiple systems, building your own retry and error handling logic, mapping between devices and users in your application, and managing subscriptions to topics. @@ -146,6 +153,8 @@ Many applications use both models for different features. For example: Consider your notification taxonomy. If you broadcast the same notification to many users, channels simplify this. You can also enable users to have granular preferences ("I want basketball scores but not football") by using different channels for different choices they can make. On the other hand, if most notifications are personal and transactional, direct publishing is simpler: either by `clientId` (target all devices of a specific user) or `deviceId` (target a specific device). +How you publish affects cost. Ably charges per notification delivered, plus inbound messages. Publishing to a channel with 100 subscribers costs 1 inbound + 100 outbound, in total 101 billable messages. Publishing individually to 100 devices costs 100 inbound + 100 outbound, in total 200 billable messages. Read more about Ably's pricing [here](/docs/platform/pricing). Ably offers both [MAU-based pricing](/docs/platform/pricing#mau) and [per minute pricing](/docs/platform/pricing#per-minute). + ## Multi-platform considerations A core challenge of push notifications is handling three different platforms with different capabilities and payload formats. @@ -296,12 +305,13 @@ Server-side activation gives you more control. The device obtains its platform t Server-side activation also allows you to use FCM for both Android and iOS devices for unified push messaging. -```javascript -// On device: Get platform token and send it to your server +On the client, get the platform token and send it to your server. On your server, use the [Push Notifications Admin API](/docs/api/realtime-sdk/push-admin) to register the device with Ably: + +```javascript // On your server: Register with Ably using a platformToken, platform, and clientId await ablyClient.push.admin.deviceRegistrations.save({ - id: generateDeviceId(clientId, platform), + id: generateDeviceId(clientId, platform), // use your own function to generate a unique device id platform: platform, formFactor: 'phone', clientId: clientId, @@ -314,6 +324,22 @@ await ablyClient.push.admin.deviceRegistrations.save({ }); ``` +```java +// On your server: Register with Ably using a platformToken, platform, and clientId +DeviceDetails d = new DeviceDetails(); +d.id = generateDeviceId(clientId, platform); // use your own function to generate a unique device id +d.platform = "ios"; +d.clientId = clientId; +d.formFactor = "phone"; +d.push = new DeviceDetails.Push(); +d.push.recipient = new com.google.gson.JsonObject(); +d.push.recipient.addProperty("transportType", "apns"); +d.push.recipient.addProperty("deviceToken", platformToken); + +ablyRest.push.admin.deviceRegistrations.save(d); +``` + + Server-side activation is preferred when: * You need strict control over device registrations. @@ -339,6 +365,7 @@ Follow these practices: * To make permission management straightforward, use separate channels for push notifications and other parts of your application. * Only grant the capabilities that are needed for the specific use case. * Use token authentication and not API key authentication. +* Remember to deregister or update device registrations when users log out. ## Delivery monitoring From 98ef71762c3195f57868aca0461835672168a353 Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Mon, 8 Dec 2025 09:55:35 +0000 Subject: [PATCH 07/14] spellcheck --- src/pages/docs/guides/pubsub/push-notifications.mdx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index 5513b7ef25..8964107bac 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -92,7 +92,7 @@ This approach works well for: * Geographic or demographic targeting (if channels are organized that way). * Scenarios where users explicitly opt into notification categories. -Using channels here is a form of organizing the notifications into categories or topics. While users (or devices) must subscribe for push notifications to channels using `subscribeDevice()` or `subscribeClient()` to receive channel push notifications, they do not need to be attached to the channels to receive them. The notifications are delivered efficiently via the relevant push service (APNs, FCM, or Web Push). Depending on the target device and permissions, they can be received when the app is closed or in the background. +Using channels here is a form of organizing the notifications into categories or topics. While users (or devices) must subscribe to channels for push notifications using `subscribeDevice()` or `subscribeClient()` to receive channel push notifications, they do not need to be attached to the channels to receive them. The notifications are delivered efficiently via the relevant push service (APNs, FCM, or Web Push). Depending on the target device and permissions, they can be received when the app is closed or in the background. Subscribe a device or clientId to a channel: @@ -221,7 +221,7 @@ This lets you use platform-specific features while maintaining a single codebase When developing, test notifications on all target platforms early. Platform-specific bugs often relate to: -* Images don't show, for example because the URLs are not accessible from all platforms. +* Images don't show, for example, because the URLs are not accessible from all platforms. * Sound files that don't exist or are in the wrong format. * Custom data that exceeds platform size limits (4KB for iOS, 4KB for FCM data payload). * Character encoding issues in titles or bodies. @@ -351,8 +351,7 @@ Server-side activation is preferred when: Ably uses [capability-based authentication](/docs/auth/capabilities) to control what clients can do with push notifications. Two capabilities matter for push notifications: * **push-subscribe:** Allows a device to manage its own registration and subscribe to channels. Suitable for end user devices. -* **push-admin:** Full access to push admin API - register any device, subscribe any device to channels, send direct notifications. Only for -servers. +* **push-admin:** Full access to push admin API - register any device, subscribe any device to channels, send direct notifications. Only for servers. You can read more about [authentication with Ably here](/docs/auth). @@ -361,7 +360,7 @@ You can read more about [authentication with Ably here](/docs/auth). Follow these practices: * Never give clients `push-admin` capability. They could manage registrations and subscriptions for push notifications for any device. -* Do not give `publish` capability to clients on channels used for push notifications. This will allow the clients to publish push notifications to that channel. Only do this for use cases such as admin dashboards, where sending push notifications by the user is allowed. +* Do not give `publish` capability to clients on channels used for push notifications. This will allow the clients to publish push notifications to that channel. Only do this for use cases such as admin dashboards, where sending push notifications by the user is allowed. * To make permission management straightforward, use separate channels for push notifications and other parts of your application. * Only grant the capabilities that are needed for the specific use case. * Use token authentication and not API key authentication. From 8b9250001502ab40ffed0b3eb196f3efd0238aea Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Mon, 8 Dec 2025 10:42:47 +0000 Subject: [PATCH 08/14] add hero picture --- .../screenshots/push-notifications-guide.png | Bin 0 -> 297993 bytes .../docs/guides/pubsub/push-notifications.mdx | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 src/images/content/screenshots/push-notifications-guide.png diff --git a/src/images/content/screenshots/push-notifications-guide.png b/src/images/content/screenshots/push-notifications-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..a76010b9c3d8e8eedacdf18446ede2d4227956c6 GIT binary patch literal 297993 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¥5HYBP+%S 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 z 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%0ATUYzRA8IztE&|{5F{EL<$7gWV|_vN5fPuJ%AWIf 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

+Ably provides a unified API that handles all three platforms, managing: * **Platform abstraction:** Write once, deliver everywhere. Ably translates your notifications into platform-specific formats. * **Credential management:** Store your APNs certificates, FCM service accounts, and VAPID keys securely in one place. * **Delivery reliability:** Ably handles retries, tracks delivery status, and provides error reporting through meta channels. * **Scale:** From hundreds to millions of devices, Ably's [serverless architecture](/docs/platform/architecture) scales automatically without requiring you to manage connection pools or rate limits. Backed by a [99.999% uptime Service Level Agreement (SLA)](/uptime). * **Users and devices:** Ably provides methods to send notifications to the right recipients. Send notifications to channels, users by `clientId`, or devices by `deviceId`. -Building your own push notification system without Ably involves: -* Maintaining separate integrations with each push service. -* Handling their platform-specific requirements. -* Managing credentials across multiple systems. -* Building your own retry and error handling logic. -* Mapping between devices and users in your application. -* Managing subscriptions to topics. +Building your own push notification system without Ably involves building and maintaining separate integrations with each push service, handling platform-specific requirements, formats, authentication, handling errors and retries, and managing subscriptions to topics as well as the device lifecycle and the mapping of devices to users in your application. ![Push notifications lifecycle](../../../../images/content/diagrams/push-lifecycle.png) -## High-volume delivery and targeting at scale +## High-volume delivery at scale One of the hardest problems with push notifications at scale is managing who gets what. A news app might have millions of users subscribed to hundreds of topic combinations. A collaboration tool needs dynamic subscriptions as users join and leave projects. -Ably handles this complexity server-side. You don't need to maintain subscription databases or fan-out logic - Ably tracks which devices are subscribed to which channels and delivers efficiently. +Ably handles this complexity server-side. You don't need to maintain subscription databases or fan-out logic - Ably tracks which users or devices are subscribed to which channels and delivers efficiently. Ably supports two fundamentally different approaches to targeting notifications, each suited to different use cases. The same app can use both approaches for different features. @@ -187,9 +182,7 @@ client.push.admin.publish( ``` -#### Batch API - -The [batch push API](/docs/push/publish#via-batch-push-api) allows you to send up to 10,000 personalized notifications in a single request. This is ideal for scenarios like daily digests, re-engagement campaigns, or any case where each user gets different content. See the [batch push API docs](/docs/push/publish#via-batch-push-api) for implementation details. +The [batch push API](/docs/push/publish#via-batch-push-api) allows you to send up to 10,000 personalized notifications in a single request. This is ideal for scenarios like daily digests, re-engagement campaigns, or any case where each user gets different content. ### Channel-based publishing @@ -202,7 +195,7 @@ This approach works well for: * Geographic or demographic targeting (if channels are organized that way). * Scenarios where users explicitly opt into notification categories. -Using channels here is a form of organizing the notifications into categories or topics. While users (or devices) must subscribe to channels for push notifications using `subscribeDevice()` or `subscribeClient()` to receive channel push notifications, they do not need to be attached to the channels to receive them. The notifications are delivered efficiently via the relevant push service (APNs, FCM, or Web Push). Depending on the target device and permissions, they can be received when the app is closed or in the background. +Using channels here is a form of organizing the notifications into categories or topics. While users (or devices) must subscribe to channels for push notifications using `subscribeDevice()` or `subscribeClient()` to receive channel push notifications, they do not need to have a websocket connection to Ably to receive them. The notifications are delivered efficiently via the relevant push service (APNs, FCM, or Web Push). Depending on the target device and permissions, they can be received when the app is closed or in the background. Subscribe a device or clientId to a channel: @@ -348,7 +341,7 @@ Your channel structure determines how efficiently you can target notifications. * **Geographic channels** (`alerts:uk:london`) enable location-based targeting. * **Dynamic channels** (`document:5b2aca2d`) handle user-specific contexts like documents, threads, or game sessions. -### Choosing between the two +### Choosing the right mechanism Many applications use both models for different features. For example: @@ -373,7 +366,8 @@ Each platform has unique features: Ably provides a [unified payload structure](/docs/push/publish#payload) that maps to each platform. -```javascript + +```json { notification: { title: 'Hello from Ably', // Maps to all platforms @@ -387,12 +381,14 @@ Ably provides a [unified payload structure](/docs/push/publish#payload) that map } } ``` + ### Platform-specific overrides For platform-specific features, you can override the generic payload: -```javascript + +```json { notification: { title: 'New Message', @@ -418,12 +414,13 @@ For platform-specific features, you can override the generic payload: } } ``` + This lets you use platform-specific features while maintaining a single codebase for notification publishing. Without Ably, you would need to implement a transformation layer for each platform you want to target (such as web, APNs, and FCM). ### Testing across platforms -When developing, test notifications on all target platforms early. Platform-specific bugs commonly include: +When developing, test notifications on all target platforms early. Common platform-specific issues to watch out for: * Images don't show, for example, because the URLs are not accessible from all platforms. * Sound files that don't exist or are in the wrong format. @@ -507,9 +504,9 @@ Client-side activation is preferred when: ### Server-side activation -Server-side activation gives you more control. The device obtains its platform token (FCM registration token, APNs device token, or Web Push subscription) on the client, and then sends it to your server. Your server registers the device with Ably using the push admin API. This approach can also be used to migrate push notifications to Ably without reactivating push notifications on all devices for all platforms. +Server-side activation gives you more control. The device obtains its platform token (FCM registration token, APNs device token, or Web Push subscription) on the client, and then sends it to your server. Your server registers the device with Ably using the push admin API. This approach can also be used to migrate push notifications to Ably from another provider or your own system, without reactivating push notifications on all devices for all platforms. -Server-side activation also allows you to use FCM for both Android and iOS devices for unified push messaging. +Server-side activation also enables you to use FCM for both Android and iOS devices for unified push messaging. On the client, get the platform token and send it to your server. On your server, use the [Push Notifications Admin API](/docs/api/realtime-sdk/push-admin) to register the device with Ably:

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%0Aw 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 Co!)~0 literal 0 HcmV?d00001 diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index 8964107bac..f126faa464 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -4,6 +4,8 @@ meta_description: "A practical guide to architecting push notifications with Abl meta_keywords: "push notifications, APNs, FCM, Web Push, mobile notifications, device management, multi-platform, scalability" --- +![Push notifications guide](../../../../images/content/screenshots/push-notifications-guide.png) + Push notifications are an important channel for engaging users outside of your application. Whether you're sending transactional alerts, breaking news, or marketing messages, push notifications need to be reliable, fast, and work seamlessly across iOS, Android, and web platforms. This guide walks through the architectural decisions and practical considerations for implementing push notifications at scale using Ably. You'll learn how to design your notification system, manage devices across platforms, optimize for cost and performance, and handle the complexities of multi-platform delivery. From 0f43c5080a4d69225c745c69a7e2b36aa413d9fc Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Tue, 9 Dec 2025 13:32:39 +0000 Subject: [PATCH 09/14] more server-side languages --- .../docs/guides/pubsub/push-notifications.mdx | 247 ++++++++++++++++++ 1 file changed, 247 insertions(+) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index f126faa464..5d49d6ad0f 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -55,6 +55,7 @@ This approach works well for: * Applications where notification preferences are complex and user-specific. * Chat features such as at-mentions or direct messages. + ```javascript // Send to a specific device await client.push.admin.publish( @@ -79,6 +80,107 @@ await client.push.admin.publish( ); ``` +```ruby +# Send to a specific device +client.push.admin.publish( + { deviceId: 'device-123' }, + { + notification: { + title: 'Your order has shipped', + body: 'Track your package in the app' + } + } +) + +# Send to all devices for a user +client.push.admin.publish( + { clientId: 'user-456' }, + { + notification: { + title: 'New message from Sarah', + body: 'Hey, are you free tomorrow?' + } + } +) +``` + +```python +# Send to a specific device +client.push.admin.publish( + {'deviceId': 'device-123'}, + { + 'notification': { + 'title': 'Your order has shipped', + 'body': 'Track your package in the app' + } + } +) + +# Send to all devices for a user +client.push.admin.publish( + {'clientId': 'user-456'}, + { + 'notification': { + 'title': 'New message from Sarah', + 'body': 'Hey, are you free tomorrow?' + } + } +) +``` + +```php +// Send to a specific device +$client->push->admin->publish( + ['deviceId' => 'device-123'], + [ + 'notification' => [ + 'title' => 'Your order has shipped', + 'body' => 'Track your package in the app' + ] + ] +); + +// Send to all devices for a user +$client->push->admin->publish( + ['clientId' => 'user-456'], + [ + 'notification' => [ + 'title' => 'New message from Sarah', + 'body' => 'Hey, are you free tomorrow?' + ] + ] +); +``` + +```java +// Send to a specific device +JsonObject devicePayload = JsonUtils.object() + .add("notification", JsonUtils.object() + .add("title", "Your order has shipped") + .add("body", "Track your package in the app") + ) + .toJson(); + +client.push.admin.publish( + new Param[] { new Param("deviceId", "device-123") }, + devicePayload +); + +// Send to all devices for a user +JsonObject userPayload = JsonUtils.object() + .add("notification", JsonUtils.object() + .add("title", "New message from Sarah") + .add("body", "Hey, are you free tomorrow?") + ) + .toJson(); + +client.push.admin.publish( + new Param[] { new Param("clientId", "user-456") }, + userPayload +); +``` + + #### Batch API The [batch push API](/docs/push/publish#via-batch-push-api) allows you to send up to 10,000 personalized notifications in a single request. This is ideal for scenarios like daily digests, re-engagement campaigns, or any case where each user gets different content. See the [batch push API docs](/docs/push/publish#via-batch-push-api) for implementation details. @@ -120,6 +222,8 @@ channel.push.subscribeDevice { error in // or subscribeClient() Publish to all subscribers: + + ```javascript const channel = client.channels.get('news:breaking'); await channel.publish({ @@ -136,6 +240,96 @@ await channel.publish({ }); ``` +```java +Channel channel = rest.channels.get("news:breaking"); + +JsonObject extras = JsonUtils.object() + .add("push", JsonUtils.object() + .add("notification", JsonUtils.object() + .add("title", "Breaking News") + .add("body", "Major development in ongoing story") + ) + ) + .toJson(); + +Message message = new Message("alert", "Breaking news story"); +message.extras = new MessageExtras(extras); + +channel.publish(message); +``` + +```python +extras = { + 'push': { + 'notification': { + 'title': 'Breaking News', + 'body': 'Major development in ongoing story' + } + } +} + +channel = rest.channels.get('news:breaking') +message = Message(name='alert', data='Breaking news story', extras=extras) +await channel.publish(message) +``` + +```ruby +channel = rest.channels.get('news:breaking') + +message = Ably::Models::Message( + name: 'alert', + data: 'Breaking news story', + extras: { + push: { + notification: { + title: 'Breaking News', + body: 'Major development in ongoing story' + } + } + } +) + +channel.publish message +``` + +```php +$channel = $rest->channels->get('news:breaking'); + +$msg = new \Ably\Models\Message(); +$msg->name = 'alert'; +$msg->data = 'Breaking news story'; +$msg->extras = [ + 'push' => [ + 'notification' => [ + 'title' => 'Breaking News', + 'body' => 'Major development in ongoing story' + ] + ] +]; + +$channel->publish($msg); +``` + +```go +channel := rest.Channels.Get("news:breaking") + +message := &ably.Message{ + Name: "alert", + Data: "Breaking news story", + Extras: map[string]interface{}{ + "push": map[string]interface{}{ + "notification": map[string]interface{}{ + "title": "Breaking News", + "body": "Major development in ongoing story", + }, + }, + }, +} + +err := channel.PublishMultiple(ctx, []*ably.Messages{message}) +``` + + For bulk operations - like subscribing a user to all their team channels when they join - use the [push admin API](/docs/api/realtime-sdk/push-admin) from your server. #### Channel design for scale @@ -340,6 +534,59 @@ d.push.recipient.addProperty("deviceToken", platformToken); ablyRest.push.admin.deviceRegistrations.save(d); ``` + +```ruby +// On your server: Register with Ably using a platformToken, platform, and clientId +device = { + "id": generateDeviceId(clientId, platform), // use your own function to generate a unique device id + "clientId": clientId, + "platform": platform, + "formFactor": "phone", + "push": { + "recipient": { + "transportType": platform == 'ios' ? 'apns' : 'fcm', + "deviceToken": platformToken + } + } +} +ablyRest.push.admin.device_registrations.save(device) +``` + +```python +device = { + "id": generateDeviceId(clientId, platform), # use your own function to generate a unique device id + "clientId": clientId, + "platform": platform, + "formFactor": "phone", + "push": { + "recipient": { + "transportType": 'apns' if platform == 'ios' else 'fcm', + "deviceToken": platformToken + } + } +} +asyncio.run(ablyRest.push.admin.device_registrations.save(device)) +``` + +```go +// On your server: Register with Ably using a platformToken, platform, and clientId +transportType := "fcm" +if platform == "ios" { + transportType = "apns" +} +_, err := ablyRest.Request("PUT", "/push/deviceRegistrations/"+url.PathEscape(deviceId), ably.RequestWithBody(map[string]any{ + "id": generateDeviceId(clientId, platform), // use your own function to generate a unique device id + "clientId": clientId, + "platform": platform, + "formFactor": "phone", + "push": map[string]any{ + "recipient": map[string]any{ + "transportType": transportType, + "deviceToken": platformToken, + }, + }, +})).Items(ctx) +``` Server-side activation is preferred when: From da18aa02e133391880ee459ae4168904c82c187c Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Tue, 9 Dec 2025 21:19:39 +0000 Subject: [PATCH 10/14] php examples everywhere --- .../docs/guides/pubsub/push-notifications.mdx | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index 5d49d6ad0f..c4e24b397c 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -269,8 +269,8 @@ extras = { } channel = rest.channels.get('news:breaking') -message = Message(name='alert', data='Breaking news story', extras=extras) -await channel.publish(message) +message = ably.types.message.Message(name='alert', data='Breaking news story', extras=extras) +asyncio.run(channel.publish(message)) ``` ```ruby @@ -587,6 +587,23 @@ _, err := ablyRest.Request("PUT", "/push/deviceRegistrations/"+url.PathEscape(de }, })).Items(ctx) ``` + +```php +// On your server: Register with Ably using a platformToken, platform, and clientId +$device = [ + "id" => generateDeviceId(clientId, platform), // use your own function to generate a unique device id + "clientId" => clientId, + "platform" => platform, + "formFactor" => "phone", + "push" => [ + "recipient" => [ + "transportType" => $transportType, + "deviceToken" => $platformToken, + ], + ], +]; +$ablyRest->push->admin->deviceRegistrations->save($device); +``` Server-side activation is preferred when: From 6622f0f4178d4586a5d0669792f739e0860bf59a Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Tue, 9 Dec 2025 21:41:50 +0000 Subject: [PATCH 11/14] fixes --- src/pages/docs/guides/pubsub/push-notifications.mdx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index c4e24b397c..fd1690ca81 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -330,6 +330,8 @@ err := channel.PublishMultiple(ctx, []*ably.Messages{message}) ``` +To publish push notifications to a channel, you need to enable the push notifications [rule](/docs/channels#rules) for the channel or channel namespace. You can configure this in the Ably dashboard. + For bulk operations - like subscribing a user to all their team channels when they join - use the [push admin API](/docs/api/realtime-sdk/push-admin) from your server. #### Channel design for scale @@ -411,7 +413,7 @@ For platform-specific features, you can override the generic payload: } ``` -This lets you use platform-specific features while maintaining a single codebase for notification publishing. +This lets you use platform-specific features while maintaining a single codebase for notification publishing. Without Ably, you would need to implement a transformation layer for each platform you want to target (such as web, APNs, and FCM). ### Testing across platforms @@ -426,6 +428,8 @@ When developing, test notifications on all target platforms early. Platform-spec Before [devices](/docs/push/configure/device) or [browsers](/docs/push/configure/web) can receive push notifications, they must be activated - registered with both the platform's push service (APNs, FCM, or Web Push) and with Ably. Ably handles the complexity of maintaining these registrations at scale, including token refresh, mapping devices to users, and keeping track of subscriptions to channels. +At scale, stale registrations accumulate quickly - devices go inactive, users reinstall apps, or tokens expire. Ably automatically detects and excludes stale registrations from fanout, so you don't need to track or clean up outdated device entries. Ably also handles refreshing server credentials for communicating with FCM and APNs, removing the operational burden of certificate and key rotation. You can monitor push delivery events and errors in real-time by subscribing to the [`[meta]log:push`](/docs/push#Error) metachannel. + ### Client-side activation Client-side activation is the simplest approach. Registration happens fully on the client device or browser. Ably SDKs provide a simple API to activate push notifications for devices and browsers: @@ -640,12 +644,13 @@ Ably publishes delivery feedback to the `[meta]log:push` channel in real-time. T ## Production-ready checklist -Before launching push notifications: +Ably handles the hard parts of push at scale - unified delivery across APNs, FCM, and Web Push, automatic token refresh, stale device cleanup, and a [99.999% uptime SLA](/uptime) - so you can focus on what to send rather than how to deliver it. Before launching: * **Platform configuration:** Ensure APNs certificates/tokens, FCM service account credentials, and Web Push service worker are properly configured and tested across all target platforms. * **Authentication and security:** Use token authentication for all client-side communication, restrict the `push-admin` capability to your backend servers only, and verify that clients cannot access admin push APIs. * **Device lifecycle management:** Implement device activation, deactivation, and token refresh handling, and have a strategy in place for removing devices that are no longer active. * **Channel structure and subscriptions:** Design your channel naming strategy and implement subscription management that allows users to control their notification preferences and easily unsubscribe. +* **Channel rules:** Make sure the push notifications rule is enabled for the channels you want to use for push notifications. * **Monitoring and error tracking:** Subscribe to the `[meta]log:push` meta channel to monitor push notification delivery errors. * **Cross-platform testing:** Test notifications across all target platforms to ensure consistent delivery and behavior. * **Scale planning:** Confirm you are on the right Ably package for your expected notification volume and user base size. From 5306a9f55d29f25dd5e794867c2481ff592711d9 Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Tue, 9 Dec 2025 21:48:17 +0000 Subject: [PATCH 12/14] writing style guide fixes --- .../docs/guides/pubsub/push-notifications.mdx | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index fd1690ca81..cd3a254a4c 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -26,10 +26,17 @@ Ably provides a unified API that handles all three platforms, managing: * **Platform abstraction:** Write once, deliver everywhere. Ably translates your notifications into platform-specific formats. * **Credential management:** Store your APNs certificates, FCM service accounts, and VAPID keys securely in one place. * **Delivery reliability:** Ably handles retries, tracks delivery status, and provides error reporting through meta channels. -* **Scale:** From hundreds to millions of devices, Ably's [serverless architecture](/docs/platform/architecture) scales automatically without requiring you to manage connection pools or rate limits. Backed by a [99.999% uptime SLA](/uptime). +* **Scale:** From hundreds to millions of devices, Ably's [serverless architecture](/docs/platform/architecture) scales automatically without requiring you to manage connection pools or rate limits. Backed by a [99.999% uptime Service Level Agreement (SLA)](/uptime). * **Users and devices:** Ably provides methods to send notifications to the right recipients. Send notifications to channels, users by `clientId`, or devices by `deviceId`. -The alternative is maintaining separate integrations with each push service, handling their individual quirks, managing credentials across multiple systems, building your own retry and error handling logic, mapping between devices and users in your application, and managing subscriptions to topics. +The alternative involves: + +* Maintaining separate integrations with each push service. +* Handling their platform-specific requirements. +* Managing credentials across multiple systems. +* Building your own retry and error handling logic. +* Mapping between devices and users in your application. +* Managing subscriptions to topics. ![Push notifications lifecycle](../../../../images/content/diagrams/push-lifecycle.png) @@ -417,7 +424,7 @@ This lets you use platform-specific features while maintaining a single codebase ### Testing across platforms -When developing, test notifications on all target platforms early. Platform-specific bugs often relate to: +When developing, test notifications on all target platforms early. Platform-specific bugs commonly include: * Images don't show, for example, because the URLs are not accessible from all platforms. * Sound files that don't exist or are in the wrong format. @@ -432,7 +439,7 @@ At scale, stale registrations accumulate quickly - devices go inactive, users re ### Client-side activation -Client-side activation is the simplest approach. Registration happens fully on the client device or browser. Ably SDKs provide a simple API to activate push notifications for devices and browsers: +Client-side activation handles registration entirely on the client device or browser. Ably SDKs provide an API to activate push notifications for devices and browsers: ```javascript @@ -474,7 +481,7 @@ realtimeClient.push.activate() ``` -The device gets a `deviceId` from Ably and can immediately subscribe to channels or receive direct notifications. If the Ably client is using a `clientId`, the registration will also be associated with that `clientId`. +The device gets a `deviceId` from Ably and can immediately subscribe to channels or receive direct notifications. If the Ably client is using a `clientId`, the registration is also associated with that `clientId`. Always deactivate the device when the user logs out or the device is no longer needed. This can be done by calling `push.deactivate()` on the Ably client: From 5636f07ea98f7a2dddc75314fd3a9f039f5fa915 Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Tue, 9 Dec 2025 21:49:26 +0000 Subject: [PATCH 13/14] reword without ably paragraph --- src/pages/docs/guides/pubsub/push-notifications.mdx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index cd3a254a4c..d34bec81e7 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -29,8 +29,7 @@ Ably provides a unified API that handles all three platforms, managing: * **Scale:** From hundreds to millions of devices, Ably's [serverless architecture](/docs/platform/architecture) scales automatically without requiring you to manage connection pools or rate limits. Backed by a [99.999% uptime Service Level Agreement (SLA)](/uptime). * **Users and devices:** Ably provides methods to send notifications to the right recipients. Send notifications to channels, users by `clientId`, or devices by `deviceId`. -The alternative involves: - +Building your own push notification system without Ably involves: * Maintaining separate integrations with each push service. * Handling their platform-specific requirements. * Managing credentials across multiple systems. From be3c242157abbbba1098bdd0ede9d4663831bbf1 Mon Sep 17 00:00:00 2001 From: Vlad Velici Date: Tue, 23 Dec 2025 11:22:57 +0000 Subject: [PATCH 14/14] review fixes --- .../docs/guides/pubsub/push-notifications.mdx | 47 +++++++++---------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/src/pages/docs/guides/pubsub/push-notifications.mdx b/src/pages/docs/guides/pubsub/push-notifications.mdx index d34bec81e7..62fe0c26a2 100644 --- a/src/pages/docs/guides/pubsub/push-notifications.mdx +++ b/src/pages/docs/guides/pubsub/push-notifications.mdx @@ -6,7 +6,7 @@ meta_keywords: "push notifications, APNs, FCM, Web Push, mobile notifications, d ![Push notifications guide](../../../../images/content/screenshots/push-notifications-guide.png) -Push notifications are an important channel for engaging users outside of your application. Whether you're sending transactional alerts, breaking news, or marketing messages, push notifications need to be reliable, fast, and work seamlessly across iOS, Android, and web platforms. +Push notifications are an important mechanism for engaging users outside of your application. Whether you're sending transactional alerts, breaking news, or marketing messages, push notifications need to be reliable, fast, and work seamlessly across iOS, Android, and web platforms. This guide walks through the architectural decisions and practical considerations for implementing push notifications at scale using Ably. You'll learn how to design your notification system, manage devices across platforms, optimize for cost and performance, and handle the complexities of multi-platform delivery. @@ -16,34 +16,29 @@ Push notifications require integration with multiple platform-specific services: Ably's platform is engineered around the [four pillars of dependability](/four-pillars-of-dependability): -* **[Performance](/docs/platform/architecture/performance):** Ultra-low latency messaging ensures notifications are delivered quickly, even at global scale. -* **[Integrity](/docs/platform/architecture/message-ordering):** Guaranteed message delivery with no duplicates or lost notifications. -* **[Reliability](/docs/platform/architecture/fault-tolerance):** 99.999% uptime SLA with automatic failover and seamless recovery. -* **[Availability](/docs/platform/architecture/edge-network):** Global edge infrastructure ensures reliable connectivity worldwide. +* **[Performance](/docs/platform/architecture/performance):** Ultra-low latency messaging, even at global scale. +* **[Integrity](/docs/platform/architecture/message-ordering):** Guaranteed message ordering and delivery, with no duplicates or data loss. +* **[Reliability](/docs/platform/architecture/fault-tolerance):** 99.999% uptime SLA, with automatic failover and seamless re-connection. +* **[Availability](/docs/platform/architecture/edge-network):** Global edge infrastructure ensures users connect to the closest point for optimal experience. -Ably provides a unified API that handles all three platforms, managing: +