# push-notification

Published articles for push-notification.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Authentication is a long-running Workflow

DevFeed: [Authentication is a long-running Workflow](<https://devfeed.tech/articles/authentication-is-a-long-running-workflow-35725.md>)

Original publisher: [Read original article](<https://temporal.io/blog/authentication-is-a-long-running-workflow>)

Author: Mason Williams

Published: 2026-09-15T00:00:00Z

Content type: tutorial

Language: en

Sources: [Temporal Blog](<https://devfeed.tech/sources/temporal-blog.md>)

Topics: [Authentication](<https://devfeed.tech/topics/authentication.md>), [MFA](<https://devfeed.tech/topics/mfa.md>), [browser](<https://devfeed.tech/topics/browser.md>), [Go Language](<https://devfeed.tech/topics/go-language.md>), [TypeScript](<https://devfeed.tech/topics/typescript.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>), [sessions](<https://devfeed.tech/topics/sessions.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [browser](<https://devfeed.tech/tags/browser.md>), [community](<https://devfeed.tech/tags/community.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [go](<https://devfeed.tech/tags/go.md>), [mfa](<https://devfeed.tech/tags/mfa.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [sessions](<https://devfeed.tech/tags/sessions.md>), [typescript](<https://devfeed.tech/tags/typescript.md>)

### AI overview

This article explains how KERNEL models Managed Auth as a long-running Temporal workflow. A parent workflow maintains connection state, health checks, reauthentication, and cancellation, while child workflows handle individual login attempts with separate browsers, timeouts, and cleanup. Durable state stays in Go, and model-driven work runs in a dedicated TypeScript Worker.

### Source excerpt

In this article# - A login is not a request - Model the connection, not the attempt - The human is part of the Workflow - Staying logged in is part of the product - Go owns durability; TypeScript runs the agent - What we learned 1. A login is not a request# An agent can enter a password, stop at an MFA prompt, wait for a person to approve a push notification, and then resume in the same browser. A deployment or Worker restart can happen anywhere in between.

## Building a Transformer-Based Category Recommender at Thumbtack

DevFeed: [Building a Transformer-Based Category Recommender at Thumbtack](<https://devfeed.tech/articles/building-a-transformer-based-category-recommender-at-thumbtack-24722.md>)

Original publisher: [Read original article](<https://medium.com/thumbtack-engineering/building-a-transformer-based-category-recommender-at-thumbtack-83636da91317?source=rss----1199c607a13f---4>)

Author: Andrew Morss

Published: 2026-07-20T20:23:27Z

Content type: article

Language: en

Sources: [Thumbtack Engineering - Medium](<https://devfeed.tech/sources/thumbtack-engineering-medium.md>)

Topics: [recommendation systems](<https://devfeed.tech/topics/recommendation-systems.md>), [Transformer](<https://devfeed.tech/topics/transformer.md>), [Machine learning](<https://devfeed.tech/topics/machine-learning.md>), [email](<https://devfeed.tech/topics/email.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>)

Tags: [catalog](<https://devfeed.tech/tags/catalog.md>), [data-science](<https://devfeed.tech/tags/data-science.md>), [email](<https://devfeed.tech/tags/email.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [machine-learning](<https://devfeed.tech/tags/machine-learning.md>), [model](<https://devfeed.tech/tags/model.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [recommendations](<https://devfeed.tech/tags/recommendations.md>), [recommender-systems](<https://devfeed.tech/tags/recommender-systems.md>), [torch](<https://devfeed.tech/tags/torch.md>)

### AI overview

This engineering article describes Thumbtack's category recommender, which selects home-service categories for push and email notifications. It explains how the system addresses popularity bias through negative sampling and how Thumbtack's small category catalog and sparse user activity shape the recommendation problem.

### Source excerpt

A look at compensating for popularity bias in recommender systems using negative sampling strategies By: Andrew Morss, Senior Applied Scientist Introduction A recommender system is a machine learning model that, given a user and a catalog of items, predicts which items that user is most likely to want. Recommenders set your YouTube playlist, determine what items Amazon suggests for you, push you songs on Spotify and customize your Steam store. If you're a homeowner, Thumbtack's recommender systems can suggest home projects for you such as house cleaning or lawn mowing. Thumbtack connects users with professionals spread across almost 500 different job categories. Job categories are a kind of occupational bucket that Thumbtack uses as a taxonomy to categorize local service professionals (pros). Pros have the opportunity to choose categories of jobs that they want to receive leads on; examples include things like "Electrical and Wiring Repair", "Local Moving" or "Snow Plowing". Thumbtack's Lifecycle marketing team uses a category recommender to choose which categories to surface to users in our push and email notifications. Choosing the right ones is critical. A well-chosen suggestion is how a customer starts a search for a new project, finds the right service professional, and ultimately gets work done. An example of a push notification and an in-email category recommendation. The Problem Space: Category Recommendation There are several features of category recommendations at Thumbtack that are fairly unique in the item recommender space. The number of categories that we have is relatively small (~500) compared to the number of items that are usually seen in recommender systems, which simplifies the problem considerably. Usually recommenders require a two stage approach where an initial, low compute, filtering stage reduces the number of items to some "candidate" list of items before a more complicated model ranks that smaller set of items. With a relatively small cat

## How Slack Rebuilt Notifications 📣

DevFeed: [How Slack Rebuilt Notifications 📣](<https://devfeed.tech/articles/how-slack-rebuilt-notifications-147.md>)

Original publisher: [Read original article](<https://slack.engineering/how-slack-rebuilt-notifications/>)

Author: Frances Coronel

Published: 2026-03-19T19:00:54Z

Content type: article

Language: en

Sources: [Engineering at Slack](<https://devfeed.tech/sources/engineering-at-slack.md>)

Topics: [Slack](<https://devfeed.tech/topics/slack.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [backend](<https://devfeed.tech/tags/backend.md>), [complexity](<https://devfeed.tech/tags/complexity.md>), [cross-platform](<https://devfeed.tech/tags/cross-platform.md>), [customer](<https://devfeed.tech/tags/customer.md>), [design](<https://devfeed.tech/tags/design.md>), [features](<https://devfeed.tech/tags/features.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mental-models](<https://devfeed.tech/tags/mental-models.md>), [product-launch](<https://devfeed.tech/tags/product-launch.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [scale](<https://devfeed.tech/tags/scale.md>), [slack](<https://devfeed.tech/tags/slack.md>), [sync](<https://devfeed.tech/tags/sync.md>), [ui](<https://devfeed.tech/tags/ui.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

Slack describes rebuilding its notification system to reduce overload and make notification behavior calmer, more consistent, and easier to control. The article identifies architectural complexity, conflicting desktop and mobile mental models, coupled preferences, inconsistent synchronization, and hidden advanced controls as sources of user frustration.

### Source excerpt

Introduction 🔔 At Slack, notifications are how teams stay in the loop, but they can also become overwhelming when not designed with intention. Our goal was to make staying informed feel effortless. We set out to rebuild one of Slack's most complicated systems from the ground up by bringing calm, consistency, and clarity to the...

## Self-Hosted Push Notifications with Ntfy on iOS

DevFeed: [Self-Hosted Push Notifications with Ntfy on iOS](<https://devfeed.tech/articles/self-hosted-push-notifications-with-ntfy-on-ios-10735.md>)

Original publisher: [Read original article](<https://noted.lol/ntfy/>)

Author: Jeremy

Published: 2026-02-16T12:31:00Z

Content type: tutorial

Language: en

Sources: [Noted](<https://devfeed.tech/sources/noted.md>)

Topics: [push-notification](<https://devfeed.tech/topics/push-notification.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [servers](<https://devfeed.tech/topics/servers.md>), [Docker Compose](<https://devfeed.tech/topics/docker-compose.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [SSL](<https://devfeed.tech/topics/ssl.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [docker](<https://devfeed.tech/tags/docker.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ios](<https://devfeed.tech/tags/ios.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [self-hosted](<https://devfeed.tech/tags/self-hosted.md>), [self-hosted-web-tools](<https://devfeed.tech/tags/self-hosted-web-tools.md>), [ssl](<https://devfeed.tech/tags/ssl.md>)

### AI overview

A tutorial for setting up the self-hosted ntfy notification service on iOS. It explains how forwarding poll requests from a self-hosted server to ntfy.sh can provide near-instant notifications despite iOS background activity limits, then covers Docker Compose, HTTPS/SSL, configuration, and upstream settings.

### Source excerpt

Learn how to set up ntfy, a self-hosted push notification service, on iOS with a simple workaround. Explore how ntfy makes notifications easy, reliable, and fully open source.

## Apple's Dispute With the EU Over DMA Compliance and Browser Competition

DevFeed: [Apple's Dispute With the EU Over DMA Compliance and Browser Competition](<https://devfeed.tech/articles/apple-s-antitrust-playbook-26556.md>)

Original publisher: [Read original article](<https://infrequently.org/2025/09/apples-antitrust-playbook/>)

Author: Alex Russell

Published: 2025-09-25T00:00:00Z

Content type: opinion

Language: en

Sources: [Alex Russell](<https://devfeed.tech/sources/alex-russell.md>)

Topics: [browser](<https://devfeed.tech/topics/browser.md>), [Security](<https://devfeed.tech/topics/security.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [PWA](<https://devfeed.tech/topics/pwa.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>), [Web](<https://devfeed.tech/topics/web.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [browser](<https://devfeed.tech/tags/browser.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [competition](<https://devfeed.tech/tags/competition.md>), [dma](<https://devfeed.tech/tags/dma.md>), [eu](<https://devfeed.tech/tags/eu.md>), [geofencing](<https://devfeed.tech/tags/geofencing.md>), [ios](<https://devfeed.tech/tags/ios.md>), [iphone](<https://devfeed.tech/tags/iphone.md>), [pdf](<https://devfeed.tech/tags/pdf.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [pwa](<https://devfeed.tech/tags/pwa.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [security](<https://devfeed.tech/tags/security.md>), [webdev](<https://devfeed.tech/tags/webdev.md>)

### AI overview

The article argues that Apple is misrepresenting the European Union's enforcement of the Digital Markets Act and shifting responsibility for its own compliance decisions onto regulators. It focuses on alleged barriers affecting browser competition on iOS, including geofencing, restricted PWA and Push Notification APIs, SDK bugs, and difficult development entitlements.

### Source excerpt

Contents Lies by Any Other Name Great Artists Steal Dear Tech Reporters: Access Is Not A Beat This blog is failing on several levels. First, September 2025 is putting the "frequent" in "infrequently", much to my chagrin. Second, my professional mission is to make a web that's better for everyone, not to tear Apple down. But just when I thought I was out, they pull me back in. Over the past 24 hours, Cupertino has played the hits from its iPhone-era anti-user, anti-business, anti-rule-of-law power trip. To recap: Apple sent a demand that the EU give up on DMA enforcement in a petulant and utterly misleading press release that mostly served to catalogue Apple's own failures to comply. Cupertino's kept astroturf outfit -- ACT | The App Association -- penned unhinged misinformation for consumption by US regulatory types (h/t Damien Geradin). The EC then called Apple's bluff. Make no mistake about what's going on: Apple is claiming that the EU is forcing Apple to adopt interpretations of the DMA that no other party has, which the EC itself has not backed, and which are "forcing" Apple to avoid shipping features in the EU. Or, put another way, Apple wants to launder the consequences of its own anticompetitive, anti-user choices through a credulous tech press. The goal is to frame regulators for Apple's own deeds. Lies by Any Other Name If this smells like bullshit, that's because it is. Apple tried similar ploys last year when it sprung a blatant attempt to kill PWAs on the EU as a price for having the temerity to regulate. The plan, it seemed then, was to adopt an exotic reading of the DMA and frame the EC for killing PWAs. What Apple's attempting now is even more brazen, particularly after 16+ months of serial non-compliance since the DMA came into force (h/t OWA). Remember that: Apple's browser, and by extension every iOS browser, fails on basic security and privacy controls, putting users at risk constantly. Apple serially misrepresents this situation to anyone who will

## Introducing Action Push Native

DevFeed: [Introducing Action Push Native](<https://devfeed.tech/articles/introducing-action-push-native-33503.md>)

Original publisher: [Read original article](<https://dev.37signals.com/introducing-action-push-native/>)

Author: Jacopo Beschi

Published: 2025-08-18T17:00:00Z

Content type: release

Language: en

Sources: [37signals Dev](<https://devfeed.tech/sources/37signals-dev.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [notifications](<https://devfeed.tech/topics/notifications.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [rate-limiting](<https://devfeed.tech/topics/rate-limiting.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>)

Tags: [aws](<https://devfeed.tech/tags/aws.md>), [http](<https://devfeed.tech/tags/http.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [notifications](<https://devfeed.tech/tags/notifications.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [push-notifications](<https://devfeed.tech/tags/push-notifications.md>), [rails](<https://devfeed.tech/tags/rails.md>), [rate-limiting](<https://devfeed.tech/tags/rate-limiting.md>)

### AI overview

37signals introduces Action Push Native, an open-source Rails gem for sending push notifications directly through Apple Push Notification service and Google Firebase Cloud Messaging. The gem supports retries, rate limiting, and automatic removal of inactive devices.

### Source excerpt

A Rails gem for sending push notifications to mobile platforms.

## Understanding FCM Message Delivery on Android

DevFeed: [Understanding FCM Message Delivery on Android](<https://devfeed.tech/articles/understanding-fcm-message-delivery-on-android-16557.md>)

Original publisher: [Read original article](<https://firebase.blog/posts/2024/07/understand-fcm-delivery-rates>)

Author: Neil Gu; Andrea Wu

Published: 2024-07-18T05:00:00Z

Content type: tutorial

Language: en

Sources: [Firebase Blog](<https://devfeed.tech/sources/firebase-blog.md>)

Topics: [Firebase](<https://devfeed.tech/topics/firebase.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>), [Android](<https://devfeed.tech/topics/android.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [cloud-messaging](<https://devfeed.tech/tags/cloud-messaging.md>), [doze-mode](<https://devfeed.tech/tags/doze-mode.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>)

### AI overview

This Firebase tutorial explains seven statuses for Firebase Cloud Messaging messages on Android, including delivered, pending, offline, Doze mode, stopped-user, and throttled cases. It describes how to interpret delivery reports and investigate delivery performance.

### Source excerpt

News, tutorials, and updates from the Firebase team.

## Codename One Push API Requires a Firebase JSON Key for Android Notifications

DevFeed: [Codename One Push API Requires a Firebase JSON Key for Android Notifications](<https://devfeed.tech/articles/android-push-changes-19193.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/android-push-changes/>)

Author: Steve Hannah

Published: 2024-06-08T00:00:00Z

Content type: release

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>), [API](<https://devfeed.tech/topics/api.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>), [migration](<https://devfeed.tech/topics/migration.md>), [OAuth 2.0](<https://devfeed.tech/topics/oauth2.md>), [JSON](<https://devfeed.tech/topics/json.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [json](<https://devfeed.tech/tags/json.md>), [migration](<https://devfeed.tech/tags/migration.md>), [oauth2](<https://devfeed.tech/tags/oauth2.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>)

### AI overview

Codename One announces that its push notification server API now requires a URL to a Firebase service-account JSON key instead of an FCM API key for Android push notifications. The change follows Google's migration from legacy FCM APIs to the v1 HTTP API.

### Source excerpt

We have made some upgrades to our push notification server API. If you deploy apps to Android and use push notifications, you will need to make a small change to the server-side code that sends the HTTP request to our push server. If you do not send push notifications to Android devices, you can ignore this PSA. The Short Version Our Push API now requires a JSON key instead of the old FCM API key. For example, the following is a template for a push notification, (copied from the push cheatsheet).

## Pull vs push architecture for Mobile

DevFeed: [Pull vs push architecture for Mobile](<https://devfeed.tech/articles/pull-vs-push-architecture-for-mobile-22782.md>)

Original publisher: [Read original article](<https://medium.com/microsoft-mobile-engineering/pull-vs-push-architecture-for-mobile-6956d37c5869?source=rss----87f10537e947---4>)

Author: Abhishek Kharb

Published: 2023-10-10T13:33:07Z

Content type: tutorial

Language: en

Sources: [Android@Microsoft - Medium](<https://devfeed.tech/sources/android-microsoft-medium.md>)

Topics: [Mobile](<https://devfeed.tech/topics/mobile.md>), [API](<https://devfeed.tech/topics/api.md>), [data](<https://devfeed.tech/topics/data.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [client](<https://devfeed.tech/topics/client.md>), [servers](<https://devfeed.tech/topics/servers.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [communication](<https://devfeed.tech/tags/communication.md>), [data](<https://devfeed.tech/tags/data.md>), [http](<https://devfeed.tech/tags/http.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [request](<https://devfeed.tech/tags/request.md>), [server](<https://devfeed.tech/tags/server.md>), [servers](<https://devfeed.tech/tags/servers.md>)

### AI overview

This article explains pull- and push-based architectures for keeping mobile application data synchronized with servers. It describes user-triggered requests, short polling, long polling, and server-initiated updates through socket connections or platform push frameworks.

### Source excerpt

What is pull vs push architecture for Mobile? Almost all mobile applications need to regularly sync data from servers to be able to show their users fresh information for consumption. Photo by Claudio Schwarz on Unsplash This data sync can be achieved in broadly two ways: 1. Pull based model -- The pull-based model requires apps to initiate an API call in order to fetch the latest data. This call is usually initiated by some user action defined by the programmer. It could be when a user navigates to a particular screen in the app or performs a particular action (like pull to refresh), or it could be based on the polling technique. Broadly, polling can be achieved in one of the two following ways: Short polling: Sometimes referred to as Regular polling or Standard polling, in this case the client makes an HTTP call to the server at regular intervals of time. As and when the data is available, the server returns the data back to the client, until then the server just sends the same old data or empty response depending upon the implementation. One of the major drawbacks of this technique is that since the data is refreshed at regular intervals by the client, it results in redundant calls when no new data is available and stale data if something changes on the server before the next call is made. Short polling-based mechanism for data sync. Long Polling: This technique aims to address the redundant calls made by the client in short polling that return no new data from the server. In this case, the client makes an HTTP call to the server, but the server doesn't immediately respond if there is no new data available. Instead, the server waits until new data is available (or until the request times out), after which the server responds with the data. As soon as the client receives data from the server (or after the request times out), it sends another request (or after a certain cool off period), and the same process is repeated. Long-polling based mechanism for data sync. 2

## Sending to MacOS, iOS Safari using FCM JS SDK

DevFeed: [Sending to MacOS, iOS Safari using FCM JS SDK](<https://devfeed.tech/articles/sending-to-macos-ios-safari-using-fcm-js-sdk-16527.md>)

Original publisher: [Read original article](<https://firebase.blog/posts/2023/08/fcm-for-safari>)

Author: Kai Wu

Published: 2023-08-01T00:00:00Z

Content type: tutorial

Language: en

Sources: [Firebase Blog](<https://devfeed.tech/sources/firebase-blog.md>)

Topics: [Firebase](<https://devfeed.tech/topics/firebase.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [browsers](<https://devfeed.tech/topics/browsers.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [cloud-messaging](<https://devfeed.tech/tags/cloud-messaging.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [ios](<https://devfeed.tech/tags/ios.md>), [js](<https://devfeed.tech/tags/js.md>), [js-sdk](<https://devfeed.tech/tags/js-sdk.md>), [macos](<https://devfeed.tech/tags/macos.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [safari](<https://devfeed.tech/tags/safari.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>), [updates](<https://devfeed.tech/tags/updates.md>), [web](<https://devfeed.tech/tags/web.md>), [web-applications](<https://devfeed.tech/tags/web-applications.md>)

### AI overview

This Firebase tutorial explains how to use the FCM JS SDK to send web push notifications through Safari on macOS, iOS, and iPadOS. It covers the required setup, including Safari Push API interaction, manifest configuration, adding the app to the Home Screen on iOS and iPadOS, and requesting notification permission.

### Source excerpt

News, tutorials, and updates from the Firebase team.

## Analyze Firebase push notification delivery data with BigQuery

DevFeed: [Analyze Firebase push notification delivery data with BigQuery](<https://devfeed.tech/articles/how-to-get-better-insight-into-push-notification-delivery-16415.md>)

Original publisher: [Read original article](<https://firebase.blog/posts/2021/10/push-notification-delivery-insights>)

Author: Charlotte Liang; Peter Friese

Published: 2021-10-27T00:00:00Z

Content type: tutorial

Language: en

Sources: [Firebase Blog](<https://devfeed.tech/sources/firebase-blog.md>)

Topics: [push-notification](<https://devfeed.tech/topics/push-notification.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>), [BigQuery](<https://devfeed.tech/topics/bigquery.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [API](<https://devfeed.tech/topics/api.md>), [data](<https://devfeed.tech/topics/data.md>), [dashboards](<https://devfeed.tech/topics/dashboards.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [bigquery](<https://devfeed.tech/tags/bigquery.md>), [cloud-messaging](<https://devfeed.tech/tags/cloud-messaging.md>), [dashboards](<https://devfeed.tech/tags/dashboards.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [google-analytics](<https://devfeed.tech/tags/google-analytics.md>), [ios](<https://devfeed.tech/tags/ios.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [troubleshooting](<https://devfeed.tech/tags/troubleshooting.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>)

### AI overview

This tutorial explains how to export Firebase Cloud Messaging notification delivery data to BigQuery and use queries and dashboards to understand delivery rates and troubleshoot problems. It covers enabling the Firebase-to-BigQuery integration and configuring client-side logging for iOS, with support also noted for Android and the web.

### Source excerpt

News, tutorials, and updates from the Firebase team.

## Explainable and Accessible AI: Using Push Notifications to Broaden the Reach of ML at Headspace

DevFeed: [Explainable and Accessible AI: Using Push Notifications to Broaden the Reach of ML at Headspace](<https://devfeed.tech/articles/explainable-and-accessible-ai-using-push-notifications-to-broaden-the-reach-of-ml-at-headspace-24573.md>)

Original publisher: [Read original article](<https://medium.com/headspace-engineering/explainable-and-accessible-ai-using-push-notifications-to-broaden-the-reach-of-ml-at-headspace-a03c7c2bbf06?source=rss-3da90e297190------2>)

Author: Headspace

Published: 2021-10-18T19:08:11Z

Content type: article

Language: en

Sources: [Stories by Headspace on Medium](<https://devfeed.tech/sources/stories-by-headspace-on-medium.md>)

Topics: [Machine learning](<https://devfeed.tech/topics/machine-learning.md>), [recommendation systems](<https://devfeed.tech/topics/recommendation-systems.md>), [Cloud](<https://devfeed.tech/topics/cloud.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Web](<https://devfeed.tech/topics/web.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [android](<https://devfeed.tech/tags/android.md>), [backend](<https://devfeed.tech/tags/backend.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [headspace](<https://devfeed.tech/tags/headspace.md>), [ios](<https://devfeed.tech/tags/ios.md>), [machine-learning](<https://devfeed.tech/tags/machine-learning.md>), [ml](<https://devfeed.tech/tags/ml.md>), [notifications](<https://devfeed.tech/tags/notifications.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [push-notifications](<https://devfeed.tech/tags/push-notifications.md>), [recommendations](<https://devfeed.tech/tags/recommendations.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

Headspace describes infrastructure that combines machine-learning recommendations, cloud services, and Braze to deliver personalized content through push notifications to members who have not recently opened the app. The article explains the limitations of relying on in-app access and says the initial experiment was implemented as an evergreen production model.

### Source excerpt

Author: Matt Linder / Co-Author: Koyuki Nakamori TL;DR Headspace wanted to serve personalized content to members who had not recently opened the app We built out infrastructure that allowed us to leverage our Cloud services, plus the 3rd party Braze Customer Engagement platform, to serve Machine Learning-recommended content to members via push notifications Our first experiment doing so got GREAT results We implemented that experiment as an evergreen model in production You should, too Introduction and Problem Statement Headspace's core products are iOS, Android, and web-based apps that focus on improving the health and happiness of their users through mindfulness, meditation, sleep, exercise, and focus content. Machine learning models are core to our user experiences by offering recommendations that engage our users with relevant, personalized content that builds consistent habits in their lifelong journey. Headspace also has an amazing Lifecycle marketing team, who do incredible work in providing regular communications -- through email, push notifications, in-app modals, and other surfaces -- that further our users' engagement, helping them on their journey from prospects to members to advocates. Until recently, those two aspects -- Machine Learning and the out-of-app communication channels served by Lifecycle- were totally separate. Traditionally, users consume our ML models' personalized recommendations by Navigating to one of the app's tabs / views that contains content (for example, our Today tab). Sending a request from the app client to ask our backend content services to load content to serve users. Our content services then forward the request to our Prediction Service, which supplies a content recommendation for that user (or, if none is available, generates a default fallback content to serve). The Problem This approach has three primary limitations: It isn't able to directly respond to the immediate user's context. For instance, if a user has recently sear

## Codename One 6.0 "Chat" is now Live

DevFeed: [Codename One 6.0 "Chat" is now Live](<https://devfeed.tech/articles/codename-one-6-0-chat-is-now-live-19258.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/codename-one-6-0-chat-live/>)

Author: Shai Almog

Published: 2019-02-26T00:00:00Z

Content type: release

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [migration](<https://devfeed.tech/topics/migration.md>), [Xcode](<https://devfeed.tech/topics/xcode.md>), [Universal Windows Platform](<https://devfeed.tech/topics/uwp.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>), [PWA](<https://devfeed.tech/topics/pwa.md>), [ci](<https://devfeed.tech/topics/ci.md>)

Tags: [continuous-integration](<https://devfeed.tech/tags/continuous-integration.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [migration](<https://devfeed.tech/tags/migration.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [pwa](<https://devfeed.tech/tags/pwa.md>), [release](<https://devfeed.tech/tags/release.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

Codename One 6.0, nicknamed Chat, introduces Codename One Build, migrates cloud builds to Xcode 10.1, adds VM and Switch API changes, and implements reply push notifications. Codename One is an open-source mobile platform for Java and Kotlin developers.

### Source excerpt

We are thrilled to announce the release of Codename One 6.0 - Chat. Codename One is an open source "Write Once Run Anywhere" mobile platform for Java and Kotlin developers! With this release we introduced Codename One Build which is one of the biggest overhauls to the Codename One workflow since its inception. We also refined and updated many underlying technologies e.g. the xcode 10.1 migration, WKWebView support, push replies, badges on Android and much more.

## Rich Push Notifications Improved

DevFeed: [Rich Push Notifications Improved](<https://devfeed.tech/articles/rich-push-notifications-improved-19496.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/rich-push-notification-improved/>)

Author: Shai Almog

Published: 2019-02-04T00:00:00Z

Content type: release

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [push-notification](<https://devfeed.tech/topics/push-notification.md>), [Android](<https://devfeed.tech/topics/android.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [callback](<https://devfeed.tech/tags/callback.md>), [notifications](<https://devfeed.tech/tags/notifications.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>)

### AI overview

Codename One adds replies to rich push messages. Developers can define push categories and actions, including an action that provides a text input field, then retrieve the selected action and entered text through the push callback.

### Source excerpt

Last week Steve committed the final piece of the rich push notification support RFE. This commit introduces support for replies in push messages. This came too late for the whatsapp clone but if you want to build an app of this type you would need this feature. The app main class should implement PushActionProvider. This defines a method that returns a set of categories. E.g. public PushActionCategory[] getPushActionCategories() { return new PushActionCategory[]{ new PushActionCategory("fo", new PushAction[]{ new PushAction("yes", "Yes"), new PushAction("no", "No"), new PushAction("maybe", "Maybe", null, "Enter reason", "Reply") }) }; } Then, when sending a push notification, you can specify the "category" of the message. If the category corresponds with a defined category in your getPushActionCategories() method, then the user will be presented with a set of buttons corresponding to the PushActions in that category.

## TIP: Don't Use Push as a Communication Protocol

DevFeed: [TIP: Don't Use Push as a Communication Protocol](<https://devfeed.tech/articles/tip-don-t-use-push-as-a-communication-protocol-19576.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/tip-dont-use-push-as-communication-protocol/>)

Author: Shai Almog

Published: 2018-11-12T00:00:00Z

Content type: opinion

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [push-notification](<https://devfeed.tech/topics/push-notification.md>), [WebSocket](<https://devfeed.tech/topics/websocket.md>), [networking](<https://devfeed.tech/topics/networking.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [ios](<https://devfeed.tech/tags/ios.md>), [networking](<https://devfeed.tech/tags/networking.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [websocket](<https://devfeed.tech/tags/websocket.md>)

### AI overview

The article argues that push notifications should not be used as an application's primary communication protocol. It recommends WebSockets and web services for application communication, reserving push for marketing notifications and background notices because of platform dependencies, permissions, delivery limitations, and message-size constraints.

### Source excerpt

Apple introduced push notification at a time when iOS apps didn't support multi-tasking. It was used as an intrusive notification system that allowed an app to communicate it had something important to tell you. Back then push messages would trigger a dialog box as it predated the pull down notification tray pioneered by Android. The purpose of push on iOS is visual notification. You can send non-visual meta-data but that's almost an afterthought in iOS.

## Codename One 5.0 "Social" is now Live

DevFeed: [Codename One 5.0 "Social" is now Live](<https://devfeed.tech/articles/codename-one-5-0-social-is-now-live-19257.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/codename-one-5-0-social-live/>)

Author: Shai Almog

Published: 2018-09-18T00:00:00Z

Content type: release

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [Mobile](<https://devfeed.tech/topics/mobile.md>), [Java](<https://devfeed.tech/topics/java.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [CSS](<https://devfeed.tech/topics/css.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [css](<https://devfeed.tech/tags/css.md>), [developers](<https://devfeed.tech/tags/developers.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [release](<https://devfeed.tech/tags/release.md>)

### AI overview

Codename One 5.0, nicknamed "Social," is announced as a release for Java and Kotlin developers. It adds live CSS updates, iOS launch screen storyboards, newer JDK support, Android API level 27 migration, updated build server infrastructure, and richer push notifications.

### Source excerpt

We are thrilled to announce the release of Codename One 5.0 - Social. Codename One is an open source "Write Once Run Anywhere" mobile platform for Java and Kotlin developers! We postponed the release of this version since it's so packed with big changes. We made CSS a first class citizen in Codename One and made CSS updates live (no recompile necessary). We moved from screenshots in iOS launches to storyboards. Added support for newer JDK's. Migrated to Android API level 27. Moved our entire build server infrastructure. Redid push notification and so much more...

## Tutorial - Using Push Notification

DevFeed: [Tutorial - Using Push Notification](<https://devfeed.tech/articles/tutorial-using-push-notification-19636.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/tutorial-using-push-notification/>)

Author: Shai Almog

Published: 2017-07-05T00:00:00Z

Content type: tutorial

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [push-notification](<https://devfeed.tech/topics/push-notification.md>), [Tutorial](<https://devfeed.tech/topics/tutorial.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

A tutorial video introduces the basics of push notifications using newer APIs and settings. It notes that push behavior varies across operating systems and that advanced topics, additional platforms, and JSON result parsing are outside the video's scope.

### Source excerpt

Push gets a lot of support queries, it's a hard subject to wrap your head around especially with all of the conflicting and shifting landscape around it. To make matters worse every OS conceptualizes it very differently. I go into some of the really advanced stuff such as fallback behavior in the advanced course but basic stuff is still a crucial first step. So I adapted some of the material from there and re-did the push How Do I? video to use the newer API's and settings. Check out that page for the full transcript of the video.

## SplitPane, Cursors and Push Registration

DevFeed: [SplitPane, Cursors and Push Registration](<https://devfeed.tech/articles/splitpane-cursors-and-push-registration-19525.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/splitpane-cursors-push-registration/>)

Author: Shai Almog

Published: 2017-05-23T00:00:00Z

Content type: release

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [GUI](<https://devfeed.tech/topics/gui.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Web](<https://devfeed.tech/topics/web.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [deprecated](<https://devfeed.tech/tags/deprecated.md>), [feature](<https://devfeed.tech/tags/feature.md>), [gui](<https://devfeed.tech/tags/gui.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [new-feature](<https://devfeed.tech/tags/new-feature.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [release](<https://devfeed.tech/tags/release.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

A Codename One update introduces a new SplitPane component, configurable mouse cursors for desktop and JavaScript ports, and a replacement for the deprecated push-registration method. The update also explains the SplitPane positioning arguments and Android push ID configuration.

### Source excerpt

Until this week's release push notification was registered using Display.registerPush(Hashtable, boolean) the thing is that both of these arguments to that method are no longer used or not the best way to implement registration. So we deprecated that method and introduced a new version of the method Display.registerPush(). Since push fallback hasn't been supported since we migrated to the new API it's going away isn't a big deal but up until recently the Hashtable argument was used to pass the GCM push ID.

## Reactive Apps with Model-View-Intent - Part 6: Restoring State

DevFeed: [Reactive Apps with Model-View-Intent - Part 6: Restoring State](<https://devfeed.tech/articles/reactive-apps-with-model-view-intent-part-6-restoring-state-25459.md>)

Original publisher: [Read original article](<https://hannesdorfmann.com/android/mosby3-mvi-6/>)

Author: Hannes Dorfmann

Published: 2017-05-02T09:00:00Z

Content type: tutorial

Language: en

Sources: [Hannes Dorfmann](<https://devfeed.tech/sources/hannes-dorfmann.md>)

Topics: [reactive](<https://devfeed.tech/topics/reactive.md>), [RxJava](<https://devfeed.tech/topics/rxjava.md>), [Android](<https://devfeed.tech/topics/android.md>), [Processes](<https://devfeed.tech/topics/processes.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [mvi](<https://devfeed.tech/tags/mvi.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [process](<https://devfeed.tech/tags/process.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [reactive](<https://devfeed.tech/tags/reactive.md>), [rxjava](<https://devfeed.tech/tags/rxjava.md>)

### AI overview

This article explains how Model-View-Intent and unidirectional data flow can support state restoration in Android applications. It covers restoring in-memory state across view lifecycle events such as orientation changes and back-stack navigation, as well as persistent state across process death. The examples discuss Mosby, RxJava streams, presenters, and push-notification updates.

### Source excerpt

In the previous blog posts we have discussed Model-View-Intent (MVI) and the importance of unidirectional data flow. That simplifies state restoration a lot. How and why? We will discuss that in this blog post. There are two scenarios we will focus on in this blog post: Restoring state "in memory" (for example during screen orientation change) and restoring a "persistent state" (for example from Bundle previously saved in Activity.

## Push on JavaScript

DevFeed: [Push on JavaScript](<https://devfeed.tech/articles/push-on-javascript-19456.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/push-on-javascript/>)

Author: Shai Almog

Published: 2017-02-20T00:00:00Z

Content type: release

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [push-notification](<https://devfeed.tech/topics/push-notification.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Web](<https://devfeed.tech/topics/web.md>), [browser](<https://devfeed.tech/topics/browser.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [browser](<https://devfeed.tech/tags/browser.md>), [chrome](<https://devfeed.tech/tags/chrome.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [ios](<https://devfeed.tech/tags/ios.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [update](<https://devfeed.tech/tags/update.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

Codename One is adding push notification support to its JavaScript port for the web. The initial support covers Firefox, Chrome, Opera, and Chrome for Android, while Safari is not supported.

### Source excerpt

Up until now push notification in Codename One only worked for Android & iOS devices. This is about to change this weekend when the JavaScript port should (almost) seamlessly start working with push! This is pretty cool as push to the web is a pain with every browser taking a somewhat different route but with Codename One this will "mostly" work. The JavaScript port will generate push keys that match the notation cn1-web.

## Forward Secrecy for Asynchronous Messages

DevFeed: [Forward Secrecy for Asynchronous Messages](<https://devfeed.tech/articles/forward-secrecy-for-asynchronous-messages-1735.md>)

Original publisher: [Read original article](<https://signal.org/blog/asynchronous-security/>)

Published: 2013-08-22T00:00:00Z

Content type: article

Language: en

Sources: [Signal Blog](<https://devfeed.tech/sources/signal-blog.md>)

Topics: [Encryption](<https://devfeed.tech/topics/encryption.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>), [Security](<https://devfeed.tech/topics/security.md>), [push-notification](<https://devfeed.tech/topics/push-notification.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [cryptographic](<https://devfeed.tech/tags/cryptographic.md>), [ios](<https://devfeed.tech/tags/ios.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [network](<https://devfeed.tech/tags/network.md>), [os](<https://devfeed.tech/tags/os.md>), [process](<https://devfeed.tech/tags/process.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [security](<https://devfeed.tech/tags/security.md>)

### AI overview

The article explains how traditional asynchronous messaging uses a recipient's static public key, allowing recorded ciphertext to be decrypted if that key is later compromised. It describes how OTR uses ephemeral Diffie-Hellman exchanges and continually ratchets key material to provide Perfect Forward Secrecy. It then examines why OTR must be adapted for asynchronous mobile messaging, including iOS background delivery through Apple Push Notifications.

### Source excerpt

Traditionally, asynchronous messaging systems such as email have relied on protocols like PGP or S/MIME for cryptographic security. These protocols work the way most people are familiar with: one who wishes to receive encrypted email advertises a public key, and those wishing to send encrypted email to that person encrypt their outgoing message with that public key. Read more...

## Creating a low-latency calling network

DevFeed: [Creating a low-latency calling network](<https://devfeed.tech/articles/creating-a-low-latency-calling-network-1791.md>)

Original publisher: [Read original article](<https://signal.org/blog/low-latency-switching/>)

Published: 2013-01-31T00:00:00Z

Content type: tutorial

Language: en

Sources: [Signal Blog](<https://devfeed.tech/sources/signal-blog.md>)

Topics: [App](<https://devfeed.tech/topics/app.md>), [Cryptography](<https://devfeed.tech/topics/cryptography.md>), [Security, Privacy and Abuse Prevention](<https://devfeed.tech/topics/security-privacy-and-abuse-prevention.md>)

Tags: [availability](<https://devfeed.tech/tags/availability.md>), [communication](<https://devfeed.tech/tags/communication.md>), [cryptographic](<https://devfeed.tech/tags/cryptographic.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [low-latency](<https://devfeed.tech/tags/low-latency.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [networks](<https://devfeed.tech/tags/networks.md>), [push-notification](<https://devfeed.tech/tags/push-notification.md>), [server](<https://devfeed.tech/tags/server.md>), [voice](<https://devfeed.tech/tags/voice.md>)

### AI overview

The article explains RedPhone's network strategy for high-quality, low-latency, highly available mobile voice calls. It covers a custom signaling switch, push notifications, and TURN-style packet relaying to handle restrictive mobile NATs and reduce regional latency.

### Source excerpt

RedPhone is our mobile app for end-to-end encrypted voice calls. When we talk about RedPhone, we tend to emphasize the cryptography, and how using it can help keep your communications safe. What we don't talk about as much is the VoIP application underneath all of that, which it turns out was actually the hard part. When we were developing RedPhone, we discovered that the cryptographic aspects of it were relatively straightforward. What we didn't anticipate was how difficult the mechanics of delivering high-quality, low-latency, and highly available voice communication would be. This describes the basic strategy we developed for the network side of low-latency and highly available calls. Read more...