Back to Blog
Push NotificationsFlutterMobileGuide

10 Best Push Notification Services for Flutter in 2026

Nik
NikSequenzy editorial team
15 min read

Three questions decide most of this choice before you read a vendor page. Who presses send? Which package runs in your Dart code? Do your iPhone users need Firebase to receive a push? Answer those and the list sorts itself into three groups: delivery services that reach Apple and Google, plugins that receive and display messages in your app, and campaign platforms that sit on top of both.

This guide covers 10 options as of October 2026, with each package's pub.dev status and the vendor's own setup and pricing. Pub.dev numbers change every week, so read them as a snapshot.

If you ship to the web or to React Native too, start with the general push notification services guide or the React Native and Expo guide. They cover many of the same vendors from other angles.

Disclosure: I build Sequenzy, which is option 10 below. Its Flutter SDK, sequenzy_flutter, is new (first published in October 2026), so judge it on the code and the docs, not on its popularity.

Three layers in a Flutter push stack

Every push ends at one of two networks. Apple's Push Notification service (APNs) delivers to iPhones, and Firebase Cloud Messaging (FCM) delivers to Android. Most options here either sit on FCM for Android or hand off to APNs for iOS, even when the vendor's dashboard hides that step.

The client layer is the package in your app. It registers the device, receives the message, shows it and reports taps. firebase_messaging does this for FCM. flutter_local_notifications also belongs in this layer, but it only displays notifications the app creates on the device. It cannot receive a message from your server.

The campaign layer holds segments, schedules, journeys, A/B tests and analytics. Most vendors on this list ship a client package and a campaign console together, which is why a pub.dev page alone never tells you what you will pay.

Keep the layers apart in your head. A team that only needs delivery should not buy a campaign platform, and a marketer who needs a campaign calendar will not get one from firebase_messaging.

Quick comparison

"Unverified" means pub.dev shows an unverified uploader. That describes the publisher's verification status, not the quality of the code.

Optionpub.dev packageVersionLikesPublisherLayer
Firebase Cloud Messagingfirebase_messaging17.0.0about 3.9kVerified, firebase.google.comDelivery client
flutter_local_notificationsflutter_local_notifications22.3.2about 7.3kVerified, dexterx.devLocal display only
OneSignalonesignal_flutter5.7.1954UnverifiedCampaigns and push
Airshipairship_flutter13.0.017Verified, airship.comEnterprise platform
Brazebraze_plugin23.0.033Verified, braze.comEnterprise lifecycle
CleverTapclevertap_plugin4.2.041Verified, clevertap.comEngagement platform
MoEngagemoengage_flutter11.0.025UnverifiedEngagement platform
Pushwooshpushwoosh_flutter2.3.253UnverifiedPush and messaging
Customer.iocustomer_io4.7.213UnverifiedLifecycle messaging
Sequenzysequenzy_flutter0.1.00UnverifiedLifecycle with push

The iOS question: do you need Firebase?

The short answer is that iPhones do not need Firebase to receive a push. They need an APNs key or certificate and a sender that can use it. Whether you still set up Firebase depends on the package you choose.

  • OneSignal's Flutter setup treats iOS as an APNs platform. You upload a p8 key, which the docs recommend, or a p12 certificate to OneSignal. Firebase credentials appear only in the Android steps.
  • Firebase Cloud Messaging on iOS still runs through APNs. Firebase's iOS guide says you must upload at least one APNs authentication key in the Firebase console. If you use firebase_messaging to reach iPhones, you need a Firebase project and that key.
  • Sequenzy's Flutter SDK delivers to iPhones through APNs, and on iOS it takes the APNs token from firebase_messaging. Its docs still tell you to upload your APNs key and Firebase service account first. In that setup you create a Firebase project even though the message travels through APNs.
  • Pushwoosh's iOS setup is token-based APNs, but its Android setup needs a Firebase project and a google-services file.
  • MoEngage also documents APNs credentials for iOS, with the Flutter guide treating the auth key as the recommended option.

Firebase's documentation describes the APNs key upload as required, so do it even if another service sends your pushes.

The ten options

1. Firebase Cloud Messaging with firebase_messaging

Package: firebase_messaging 17.0.0 from the verified publisher firebase.google.com. It is a Flutter Favorite with about 3.9k likes and 160 pub points. It supports Android, iOS, macOS and web under a BSD-3-Clause license.

Setup: You need a Firebase project. On iOS you turn on Push Notifications and the Remote notifications background mode in Xcode, then upload an APNs authentication key in the Firebase console. The Flutter guide says method swizzling is required for FCM registration to work, and that the APNs token must be available before other FCM calls on iOS. Firebase's docs recommend Firebase Installation IDs through the onRegistered callback and register(), and they mark getToken and onTokenRefresh as deprecated, so new code should use the newer calls.

Pricing: Firebase's pricing page lists Cloud Messaging (FCM) as "No-cost" and gives no quota for it.

Good at: It is free, it is the native client Google expects, and your backend can send through FCM and APNs without a marketing vendor. Several vendors on this list also accept FCM or APNs tokens from it.

Falls short: It has no audience builder, no scheduling screen, no journeys and no campaign analytics. You build those yourself or buy them from a tool on top.

Pick it if: An engineer will send from a backend and you want no contract. If your team is also weighing Firebase against a lifecycle tool, read the Firebase comparison.

2. flutter_local_notifications

Package: flutter_local_notifications 22.3.2 from the verified publisher dexterx.dev. It is a Flutter Favorite with about 7.3k likes and 150 pub points. It supports Android, iOS, macOS, Linux, Windows and web, and it needs Flutter 3.38.1 or later.

What it does: The plugin shows and schedules notifications created on the device. Its readme points to firebase_messaging for push, and it warns that it can conflict with other notification plugins. Many apps use it to show a banner while the app is open, because the operating system does not always display a received message on its own.

Pricing: It is a client package, so it has no vendor fees. You still need a sender for remote push.

Good at: Local reminders, scheduled alerts and foreground banners. It has the largest community of any package on this list.

Falls short: It is not a push service, so it cannot answer the question "which service sends my push." Listing it here helps you avoid buying a second tool for something you already have.

Pick it if: You need local reminders or foreground banners next to a remote sender.

3. OneSignal with onesignal_flutter

Package: onesignal_flutter 5.7.1, published in October 2026, with 954 likes and 125 pub points. The uploader is unverified, and pub.dev lists no license. It supports Android and iOS, and its readme covers email, SMS, push and in-app messages.

Setup: The iOS path is APNs, with a p8 key uploaded to OneSignal. The iOS setup includes extension targets, and the package page warns that if you disable location, each extension target must declare the same OneSignal subspec as the app. Android uses your Firebase credentials. Version 5 moved to user-centric APIs, and the package page warns that these may not yet match the previous version feature for feature, so roll the upgrade out in stages.

Pricing: The Free plan includes mobile push for up to 1,000 monthly active users. In-app messaging and Live Activities sit under the same 1,000 MAU cap on Free. Growth starts at $19 a month, plus $0.012 per mobile MAU and $0.004 per web push subscriber.

Good at: It is the quickest self-serve start on this list. You get a console, in-app messages and Live Activities without an enterprise contract.

Falls short: The Free plan stops at 1,000 MAU, and Growth adds usage charges on top of the base fee. The uploader is unverified, so review the package and pin the version before you adopt it.

Pick it if: A marketer needs a campaign console this month and your app has fewer than 1,000 monthly active users. Compare it on the OneSignal alternatives page, and check OneSignal pricing before you renew.

4. Airship with airship_flutter

Package: airship_flutter 13.0.0, released in September 2026, from the verified publisher airship.com. It has 17 likes and 140 pub points, and it supports Android and iOS. The native floors are high: iOS 16 or later with Xcode 27 and Swift 5, and Android minSdk 26, compileSdk 36, Java 17 and Kotlin 2.0.21 or later. The iOS plugin now ships only through Swift Package Manager, so an older project needs a migration first.

Features: The feature list includes Live Activities and Live Updates, which the package describes as real-time content on the iOS Lock Screen and in Android notifications. The pub.dev page does not mention Firebase.

Pricing: Airship's pricing page lists no dollar amounts, no free tier and no billing unit. The main calls to action are "get a quote" and "book a meeting". Essentials has a self-signup button, but the page shows no price for it.

Good at: Broad native coverage across app, web and messages, with Live Activities and Live Updates on both platforms.

Falls short: You cannot estimate the cost from public pages, and the package has few likes so far. Its toolchain floors may force an upgrade of your build pipeline before you can start.

Pick it if: You already run a sales process and want one platform for app and messages. Get a written quote that names the MAU count and channels.

5. Braze with braze_plugin

Package: braze_plugin 23.0.0 from the verified publisher braze.com. It has about 33 likes and 150 pub points, and it was released in late September 2026. It needs Dart 3.12 or later, Flutter 3.44 or later and iOS 12 or later, and it covers Android and iOS.

Setup and features: The pub.dev page covers basic setup only: API key configuration on Android, BrazePlugin.initBraze in the iOS AppDelegate, and changeUser from Dart. Braze's own Flutter guide describes in-app messages and Content Cards from the same codebase. On iOS you call BrazePlugin.configure in the AppDelegate, and Content Cards reach Dart through streams. The SDK sets up a default in-app presenter on both platforms, and a custom presenter is an iOS-only step. Braze says newer SDK versions forward Content Cards automatically, while older iOS setups need a manual callback.

Pricing: Braze says it "does not offer a free plan at this time." It offers free trials and startup programs, and it publishes no dollar prices. Pricing follows the Platform Edition, monthly active users, the profile allotment and a shared pool of Action Credits that covers channels.

Good at: Deep journeys, strong native coverage and in-app messages and Content Cards documented for Flutter.

Falls short: There is no free plan and no public price, and the shared credit pool makes the final bill harder to forecast. The Flutter floor is recent, so an older project needs a Flutter upgrade first.

Pick it if: You have a lifecycle team, an enterprise budget and time for a sales process. See the Braze comparison and Braze pricing pages.

6. CleverTap with clevertap_plugin

Package: clevertap_plugin 4.2.0 from the verified publisher clevertap.com. It has about 41 likes and 130 pub points, and it was last released in early September 2026. It supports Android, iOS and web.

Setup: On Android, CleverTap needs FCM configured and a notification channel created before it can send. On iOS you enable push in Xcode, call registerForPush from Dart, and make your AppDelegate handle foreground notifications. The Flutter docs also describe a push primer that shows the permission request as an in-app message, and custom in-app templates that let you render messages yourself. The pub.dev page mentions Android push templates but not Live Activities, so ask CleverTap about iOS Live Activities before you assume support.

Pricing: CleverTap has no permanent free plan. Core has a 30-day free trial, and billing starts when it ends. The page lists Core at $85 a month before taxes and add-ons, beside a monthly active user selector that starts at 5,000 MAU. The page does not say outright which tier the $85 covers, so confirm it in writing. Pro and Ultimate have no public prices and require a demo.

Good at: A real trial before a sales call, push and in-app messages together, and a permission primer built into the SDK.

Falls short: Above Core you price from a demo, and add-ons sit outside the headline number. The Flutter page does not show iOS Live Activities.

Pick it if: You run a consumer app and want push and in-app messages with a trial. See the CleverTap comparison.

7. MoEngage with moengage_flutter

Package: moengage_flutter 11.0.0, released in early September 2026, from an unverified uploader. It has about 25 likes and 130 pub points, and it supports Android, iOS and web. Its dependencies pull in separate MoEngage packages for each platform.

Setup: MoEngage recommends an APNs auth key (p8) over a pem certificate, because the key does not expire. In Xcode you enable Push Notifications, plus Remote notifications background mode if you want uninstall tracking. Provisional push is available from plugin version 9.0.0. By default MoEngage swizzles the AppDelegate, and a flag in Info.plist turns that off if you need to forward callbacks yourself. Rich push needs a Notification Service Extension and a shared App Group. The pub.dev readme's sample code has mistakes, including a misspelled applicationContext and an undefined variable, so copy the setup from MoEngage's developer pages instead.

Pricing: The MoEngage pricing page publishes no prices. Growth, Enterprise and the other plans end in "Let's Talk" or demo requests. There is no listed free plan or free trial.

Good at: Enterprise engagement tooling, documented iOS rich push and provisional push support.

Falls short: There is no public price and no visible trial. The package is unverified and has fewer likes than the larger options.

Pick it if: You are already in an enterprise evaluation with MoEngage. See the MoEngage comparison.

8. Pushwoosh with pushwoosh_flutter

Package: pushwoosh_flutter 2.3.25, released in early October 2026, from an unverified uploader. It has 3 likes and 130 pub points and supports Android and iOS. The readme says the plugin is MIT licensed, although pub.dev shows no license. The current name is still pushwoosh_flutter, and the page shows no deprecation notice.

Setup: Android needs a Firebase project and a google-services file in the app. On iOS, Pushwoosh recommends token-based APNs configuration with a p8 key, and you must enable Push Notifications and Remote notifications background mode in Xcode. Rich media needs a Notification Service Extension. Pushwoosh also says that a sandbox and production gateway mismatch is a common reason a push is reported as sent but never arrives, so set the gateway to match how the build was installed.

Pricing: Pushwoosh publishes its rates. The pricing page lists push only at $7 per 1,000 monthly active users and omnichannel at $13 per 1,000. A free tier covers up to 1,000 MAU, and push and in-app messages are unlimited. MAU counts any user who receives a message on any channel, and email beyond 20 sends per MAU costs $1.50 per 1,000. The same page also shows a promotional price at the $7 rate until 31 December, so confirm the standard rate before you budget.

Good at: The price is public and easy to model, push and in-app impressions are unlimited, and the free tier covers a small app.

Falls short: It has very few pub.dev likes, an unverified uploader and more native iOS work for rich media. MAU counts across channels, so an email-heavy list raises the bill.

Pick it if: Budget is tight and you want a published MAU rate. Compare it with OneSignal pricing, which has a similar free start.

9. Customer.io with customer_io

Package: customer_io 4.7.2, released in early October 2026, from an unverified uploader. It has about 13 likes and 150 pub points, supports Android and iOS, and is MIT licensed. Apps that adopt UIScene need Flutter 3.44.8 or later.

Setup: Most of the pub.dev readme covers Live Activities. You turn on activity types through liveNotificationsConfig, add the Live Activities subspec for CocoaPods or the Swift Package Manager setting, add a Widget Extension, and set NSSupportsLiveActivities in Info.plist. The readme says Android needs no equivalent step. General push and in-app setup live in Customer.io's own docs.

Pricing: Customer.io has no free plan. It offers a trial and a Startup Program that gives companies that raised under $10 million a full year free. Essentials starts at $100 a month billed monthly, includes 5,000 profiles and charges $0.009 for each extra profile. The Enterprise tier sits above that, and the page gives no price for it.

Good at: One profile for email, push and in-app messages, and documented Live Activities for iOS.

Falls short: There is no free plan, and profile-based billing counts your whole contact base, not just the people who receive push. The unverified uploader and small like count call for the same package check as the others.

Pick it if: You already send email from Customer.io. Read the Customer.io comparison, Customer.io pricing and Customer.io alternatives pages.

10. Sequenzy with sequenzy_flutter

Package: sequenzy_flutter 0.1.0, first published in October 2026, with an MIT license. It is pure Dart and supports Android, iOS, web, macOS, Linux and Windows. The package describes itself as a way to identify contacts, track events, register push tokens and show in-app messages and content cards.

Setup: The SDK does not fetch tokens itself. Your app gets the token from firebase_messaging and passes it to Sequenzy. On iOS that is the APNs token, and on Android it is the FCM token. Notification taps go through handleNotificationOpened, wired to the onMessageOpenedApp listener. You wrap the app with SequenzyInAppHost in the MaterialApp builder, and content cards come from InAppCardsController and InAppCardView. Live Activities need a small Swift module in your iOS project that sends the ActivityKit tokens to Dart. On sign-out, you end the activities yourself before you call reset. The mobile SDK docs cover the full Flutter steps.

Pricing: The free plan includes 2,500 emails a month. Push and in-app messages are unlimited on every plan, including Free, and they do not use email credits. Paid plans start at $19 a month for 15,000 emails.

Good at: Push steps sit in the same sequence builder as your email, and segments can filter on push devices and push activity. Push supports images, deep links and platform targeting, and push steps report sent, displayed and clicked. On iOS, Live Activities can be started, updated and ended from your backend through the API, CLI or MCP server.

Falls short: The package is new, and it depends on firebase_messaging for the token, so expect a Firebase project even for an iPhone-only app. Live Activities need Swift code and are iOS only. There is no WhatsApp, no product tour builder and no enterprise experimentation suite, and the ecosystem is smaller than Braze or Iterable.

Pick it if: A small team wants email, push and in-app messages in one builder at a low price, and wants push as one more step in the email sequences it already sends. Skip it if you need an enterprise experimentation suite, a product tour builder, or push that works without any Firebase project. See the automation builder and the push notification docs for how the steps fit together.

Rich push and images

Images in push work differently on each platform, and a vendor dashboard can hide the difference.

FCM's image field works across platforms, and the Firebase docs list JPEG, PNG and BMP as fully supported. Android and web ignore the iOS-only mutable-content flag. On iPhone, the image has to be downloaded before the notification appears. Firebase's iOS guide says you need a Notification Service Extension that calls the Firebase messaging helper, and the APNs payload must set mutable-content to 1. The image URL needs a file extension. Animated GIFs and video work only on iOS. The Firebase console composer caps uploads at 300 KB, while the 1 MB limit applies to Android.

Vendor support varies. MoEngage and Pushwoosh both document a Notification Service Extension for rich push. OneSignal's iOS setup also uses extension targets. Sequenzy sets mutable-content whenever a push has an image, and your app shows it through a Notification Service Extension that downloads the image URL. Test images on a real iPhone before you promise them.

Host the image on a fast HTTPS URL with a real file extension. The extension has a short time budget, and a slow image host can miss the window, which leaves the user with a plain text notification.

How to test Flutter push notifications

Testing push is mostly about choosing the right device and the right build.

  • Use real hardware with a development build. Your build should use the real bundle ID and push setup. The iOS Simulator does not get an APNs device token, so it cannot receive a push from your server.
  • Use the simulator only for payload handling. You can drag a .apns file onto the simulator window, or run the simctl push command against the booted device. This works from Xcode 11.4 onward. It tests how your app handles a payload, not whether the push arrives.
  • Match the APNs gateway to the build. Debug builds installed from Xcode use the APNs sandbox, while TestFlight and App Store builds use production. Pushwoosh calls a mismatch a common cause of silent failures.
  • Use Firebase's test flow on Android. A physical device or an emulator with Google Play services works. Send a test message from the Firebase console to the device's registration token, with the app installed, the notification permission granted and the app in the background. Firebase's docs describe the same steps for iOS, including accepting the permission request.
  • Test three app states separately. Check foreground, background and terminated. Then test the tap path, because a push that opens the wrong screen fails the user even when it arrives.
  • Check token refresh. Reinstalls and new devices create new tokens. Log the token on launch and confirm that the vendor receives the update, not just the first one.

Decision guide

  • An engineer sends and no marketer is on the team: Use firebase_messaging with your own backend, and add a campaign tool later if you need one.
  • A campaign console this month, under 1,000 MAU: Start with OneSignal's Free plan or Pushwoosh's free tier. Check the cap that matters for you, because OneSignal's limit covers mobile push, while Pushwoosh's MAU counts users on every channel.
  • Email already lives in Customer.io: Use Customer.io, since its profiles already hold your email history.
  • An enterprise program with a sales process: Shortlist Braze, CleverTap, Airship and MoEngage, get quotes from each, and check every Flutter version floor before you commit.
  • Push as one step in the email sequences you already send, on a small budget: Try Sequenzy, keeping the disclosure above in mind.
  • Local reminders only: Use flutter_local_notifications, with a sender for remote push if you need it.
  • Building in FlutterFlow: Check how your project handles custom code and native files before you add a native SDK. Test a build with the SDK before you commit.

If you also need Live Activities on iOS, the iOS Live Activities tools roundup compares remote start and update tools in more depth. For in-app screens such as product tours and feeds, see the in-app messaging tools roundup.

Related reading