APNs vs FCM: Push Notifications for iOS and Android Compared

APNs is Apple's service for delivering push notifications to iPhone, iPad, Mac and Apple Watch; FCM is Google's free service for Android, which can also send to iOS (through APNs) and web browsers. Every push to an Apple device ultimately goes through APNs, so the real choice is whether your backend talks to APNs directly for iOS or sends everything through FCM. Both cap payloads at 4 KB, both are free, and both deliver on a best-effort basis, so reliable notifications depend on token management, the right priority and time-to-live, and an app that refreshes state when opened. For most apps, we recommend FCM as one API for Android, iOS and web, with direct APNs only when you need iOS-specific features such as Live Activities or VoIP at scale.

12+Years Building Software
200+Projects Delivered
4.9/5Clutch Rating (45+ Reviews)
  • APNs is required for all Apple devices; FCM covers Android and can wrap APNs for iOS and add web push.
  • Both are free and cap the payload at 4 KB, so send an ID and fetch details from your API.
  • Use FCM's HTTP v1 API; the legacy FCM APIs were shut down in 2024.
  • Treat tokens as changing addresses: update them on every app start and remove them on "unregistered" errors.
  • Huawei phones without Google services need Huawei Push Kit; plan for it if you have users in China or on newer Huawei devices.

APNs vs FCM at a Glance

A quick comparison of APNs and FCM, highlighting their key features, platform compatibility, and differences in push notification delivery.

ComparisonAPNs (Apple Push Notification service)FCM (Firebase Cloud Messaging)
OwnerAppleGoogle
DevicesiPhone, iPad, Mac, Apple Watch, Apple TV, Vision Pro, Safari web pushAndroid, iOS (via APNs), web browsers
CostFree with an Apple Developer accountFree
Server APIHTTP/2 provider APIHTTP v1 API (legacy APIs shut down in 2024)
AuthenticationToken-based (.p8 key, signed JWT) or TLS certificateOAuth 2.0 access token from a Google service account
Max payload4 KB (5 KB for VoIP)4 KB
Priority10 (immediate), 5 (power-aware), 1 (lowest)High or normal
Expiryapns-expiration timestampTTL up to 4 weeks
Replace older messagesapns-collapse-id (up to 64 bytes)collapse_key (up to 4 active keys per device on Android)
Group sendsNo topics; send per device or use broadcast for Live ActivitiesTopics and conditions, device groups
Silent/background pushcontent-available, throttled by iOSData-only messages, limited by Android background rules
Rich mediaNotification Service Extension with mutable-contentImage field, expanded layouts on Android
AnalyticsDelivery status via Push Notifications ConsoleDelivery data and reports in Firebase console and BigQuery export

How Push Notifications Reach a Phone

Understand how push notifications travel from your server through APNs or FCM to a user’s device, enabling timely alerts, real-time updates, and better app engagement across platforms.

This process involves device tokens, notification payloads, and platform-specific services to ensure messages reach users efficiently, even when the app is running in the background.

The app asks for permission

iOS always shows a prompt; Android 13 and later need the POST_NOTIFICATIONS runtime permission.

The app gets a token

iOS returns an APNs device token; Android (and iOS when using the Firebase SDK) returns an FCM registration token.

The app sends the token to your backend,

along with the user ID, platform, app version and environment.

Your backend sends a message

to APNs or FCM with the token, the payload and delivery options such as priority and expiry.

APNs or FCM delivers it

over a persistent connection the operating system keeps open, so your app does not need to be running.

The device shows it or hands it to the app,

depending on the message type, the app state and the user's notification settings.

Setting Up APNs

Authentication

Create an APNs authentication key (.p8) in your Apple Developer account and sign a JSON Web Token with it for each connection. One key works for all your apps and never expires; the older certificate method needs yearly renewal per app.

Endpoints and Environments

Send to the development (sandbox) endpoint for debug builds and the production endpoint for TestFlight and App Store builds. Tokens from one environment do not work in the other.

Required Headers

apns-topic (your bundle ID), apns-push-type (alert, background, voip, liveactivity and others), and optionally apns-priority, apns-expiration and apns-collapse-id.

Payload

A JSON aps dictionary with alert (title, subtitle, body), badge, sound, thread-id, interruption-level and relevance-score, plus your own keys.

Setting Up FCM

Firebase Project

Add your Android and iOS apps to a Firebase project and include the Firebase Messaging SDK.

Authentication

Your server uses a Google service account to get short-lived OAuth 2.0 access tokens for the HTTP v1 API, usually through the Firebase Admin SDK.

iOS Through FCM

Upload your APNs .p8 key to the Firebase project; FCM then forwards iOS messages to APNs for you.

Message Types

Notification messages (shown by the system when the app is in the background), data messages (handled by your app code), or both, with platform-specific android, apns and webpush blocks for fine control.

Payload and Message Structure Compared

Explore how APNs and FCM structure notification payloads, handle message data, and support custom content to deliver relevant alerts and personalized user experiences across mobile platforms.

ComparisonAPNsFCM
Maximum size4,096 bytes (5,120 for VoIP)4,096 bytes
Display fieldsaps.alert: title, subtitle, bodynotification: title, body, image
Custom dataAny extra JSON keys outside apsdata: string key-value pairs only
Badgeaps.badge (number)Android: notification count; iOS via apns block
Groupingthread-idtag (Android), thread-id via apns block
Interruption levelpassive, active, time-sensitive, criticalAndroid notification channel importance

Delivery Controls Compared

Compare how APNs and FCM manage notification delivery, including priority settings, message expiration, delivery timing, and platform-specific controls that help developers send alerts reliably.

ControlAPNsFCM
Priority10 = deliver now and wake the device; 5 = deliver when power-efficient; 1 = lowesthigh = deliver now, may wake the device; normal = may wait for the device to wake
Expiryapns-expiration (0 = try once, then discard)ttl, from 0 seconds up to 4 weeks (default 4 weeks)
Replace older messagesapns-collapse-id: newer message replaces the older onecollapse_key: up to 4 different keys held per Android device
Offline storageKeeps only the latest notification per app when the device is offlineStores messages until TTL expires (subject to limits)
ThrottlingBackground pushes limited by iOS; too many high-priority pushes get throttledHigh-priority messages that don't show a notification can be downgraded to normal

Silent, Background and Special Push Types

Silent (Background) Pushes

APNs content-available pushes and FCM data-only messages wake your app to refresh content. Both operating systems limit them to protect battery: Apple recommends no more than a few per hour, and Android may delay them under Doze and battery optimisation.

Rich Notifications

On iOS, set mutable-content and use a Notification Service Extension to download images, decrypt content or change the text before it shows. On Android, FCM's image field and custom layouts give expanded notifications.

Actionable Notifications

iOS notification categories and Android notification actions let users reply, approve, track or snooze without opening the app.

Live Activities and Widgets

Live Activities on the lock screen and Dynamic Island are updated by APNs liveactivity pushes, including broadcast updates to many users at once; FCM can send these through its apns block.

VoIP and Calls

iOS VoIP pushes through PushKit must report an incoming call with CallKit immediately. Android uses high-priority FCM data messages with a full-screen intent.

Web Push

FCM supports web push for Chrome, Firefox and Edge. Safari, including web apps added to the iPhone home screen from iOS 16.4, uses the standard Web Push protocol.

Why Notifications Go Missing

Stale tokens

tokens change after reinstalls, restores and refreshes; APNs returns 410 Unregistered and FCM returns UNREGISTERED for dead ones.

Wrong environment or credentials

sandbox tokens sent to production APNs, an expired certificate, or the wrong Firebase project.

Payload over 4 KB

or invalid JSON.

Permissions and settings

notifications denied, Focus or Do Not Disturb, disabled Android channels, battery savers.

Silent push throttling

background pushes delayed or dropped by the OS.

App handling

messages received in the foreground but never displayed by the app.

Devices without Google services

many newer Huawei phones cannot receive FCM and need Huawei Push Kit.

Troubleshooting Checklist

Identify and resolve common push notification issues with a practical checklist covering device tokens, permissions, payload formatting, authentication, and delivery errors across APNs and FCM.

Use these troubleshooting steps to diagnose failed notifications, verify server configurations, and improve reliable message delivery on iOS and Android devices.

Confirm the token

your server used is the latest one the app reported for that user and device.

Check the provider response

and store the error code with every send.

Send a minimal test

(title and body only) to separate transport problems from payload problems.

Verify environment and credentials

APNs key, team ID, bundle ID and endpoint; FCM project and service account.

Check device settings

permission, Focus mode, Android channel importance, battery restrictions.

Check app handling

in foreground, background and killed states.

Use the tools

Apple's Push Notifications Console and Firebase's message delivery reports show where a message stopped.

Which Setup Should You Use?

Choose the right push notification setup based on your target platforms, app architecture, delivery requirements, and development resources to ensure reliable communication across iOS and Android devices.

Your situationRecommended setupWhy
Android and iOS app, standard notificationsFCM for both platformsOne API, one token type, topics and analytics in one place
iOS-only appAPNs directlyNo extra dependency; full access to every APNs feature
Heavy use of Live Activities, VoIP or time-sensitive iOS alertsAPNs directly for iOS, FCM for AndroidFull control of APNs headers and push types
Users on Huawei devices without Google servicesAdd Huawei Push Kit alongside FCMFCM cannot reach these devices
Marketing campaigns, segmentation, A/B testsA messaging platform (OneSignal, Braze, Airship, CleverTap, MoEngage) on top of APNs and FCMSegments, journeys and analytics without building them
Very high volume or strict data controlYour own notification service talking to APNs and FCMControl of queues, retries, logging and data residency

What Push Notifications Cost

APNs and FCM

free to use; APNs only needs your Apple Developer Program membership.

Messaging platforms

free tiers for small apps, then monthly fees that grow with users and channels.

Building it into your app

basic push for one app typically takes 1–2 weeks of development ($2,000–$6,000); a custom notification service with preferences, scheduling, segments, rich media, Live Activities and analytics costs $10,000–$40,000.

Best Practices for Reliable Push

Manage Tokens Carefully

Send the token on every app start, store it with user, platform, environment and last-seen time, update it on refresh, remap it on logout, and delete it on unregistered errors.

Keep Payloads Small

Stay well under 4 KB; send IDs, not full records, and let the app fetch details.

Choose Priority and Expiry on Purpose

High priority only for messages the user must see now; short expiry for time-sensitive alerts such as OTPs and ride updates.

Ask for Permission at the Right Moment

Explain the value first (order updates, price alerts) and ask after a related action, not on first launch.

Let Users Choose

Notification preferences by type, quiet hours, Android channels and iOS interruption levels reduce opt-outs.

Don't Rely on Push for Critical State

Delivery is best-effort; important information must also be in the app and, where needed, by SMS or email.

Measure Everything

Log sends, provider responses, deliveries, opens and opt-outs to find problems and improve engagement.

Protect Privacy

Avoid sensitive data in visible notification text; encrypt content and decrypt it in a Notification Service Extension when needed.

Need Reliable Push Notifications in Your App?

Our iOS, Android and backend engineers set up APNs and FCM, token management, rich and silent notifications, Live Activities and delivery analytics, and fix pushes that go missing. Tell us about your app and we'll send a recommended setup, timeline and cost within 2 business days.

Client Testimonials

PerfectionGeeks provided excellent service from start to finish. Their team was professional, easy to work with, and delivered exactly what we needed on time. We’re very pleased with the outcome and would gladly recommend them to others.

Thanaboon Mingkaew

CEO, SMART IOT

We partnered with PerfectionGeeks for a custom accounting automation software, and the experience was excellent. Their team delivered a high-quality solution that streamlined our operations and improved efficiency. Professional, skilled, and reliable — we’re already working with them on another project.

Saarthak Gupta

Founder, Ceos Accounting Services

As COO of TRP Construction Management, I’m proud of our growth from 300 to 16,000+ SKUs and 4,000+ vendors since 2022. Thanks to Shrey Bhardwaj and Perfection Geeks for delivering scalable, future-ready technology solutions that transformed our vision into a seamless pan-India platform. Highly recommended technology partner.

Mayank Pathak

COO, TRP Construction Management

Armaan, Cofounder at Kzminer

PerfectionGeeks Technologies transformed our vision into reality with innovative technology solutions. Their professionalism, timely delivery, transparent communication, and commitment to quality made the entire collaboration smooth, reliable, and highly satisfying.

Armaan

Cofounder, Kzminer

Chetna, Founder CEO  at Klicked

I highly recommend PerfectionGeeks Technologies for mobile and web development services. Their expertise, dedication, creative ideas, and customer-focused approach helped our business achieve impressive digital growth successfully.

Chetna

Founder CEO , Klicked

Mark, CTO at IMSMART

Choosing PerfectionGeeks Technologies was the best decision for our company. Their skilled developers created a user-friendly platform, provided constant assistance, and ensured exceptional performance beyond our expectations every step.

Mark

CTO, IMSMART

Naveen, Founder Director  at Way2Kart

Working with PerfectionGeeks Technologies was an excellent experience. Their team delivered our project on time with outstanding quality, smooth communication, innovative solutions, and professional support throughout the entire development process.

Naveen

Founder Director , Way2Kart

Srinivasa Mothay, CTO at Sethu Fishries

PerfectionGeeks Technologies delivered a smooth, professional experience with excellent communication and technical expertise. Their team understood project requirements clearly, provided timely updates, and ensured high-quality results that exceeded expectations.

Srinivasa Mothay

CTO, Sethu Fishries

Mervin, Cofounder & CTO at Clover Infinity

PerfectionGeeks Technologies impressed with their innovative solutions, responsive support, and commitment to quality. The team handled every detail professionally, delivered on time, and created a seamless experience from start to finish.

Mervin

Cofounder & CTO, Clover Infinity

Frequently Asked Questions

What is the difference between APNs and FCM?
APNs is Apple's service and the only way to deliver remote notifications to iPhones, iPads, Macs and Apple Watches. FCM is Google's service that delivers to Android directly and to iOS by forwarding messages through APNs, giving you one API for both platforms.
Does FCM work on iOS?
Yes. FCM sends iOS notifications through APNs, so you still need an Apple Developer account and an APNs authentication key uploaded to your Firebase project.
Should I use FCM or APNs for my iOS app?
Use FCM if you also have an Android app and want one backend integration. Use APNs directly for iOS-only apps or when you need full control of Apple features such as Live Activities, VoIP pushes and time-sensitive interruption levels.
Are APNs and FCM free?
Yes. Both are free to use. APNs requires an Apple Developer Program membership ($99 a year), and FCM has no per-message charge.
What is the maximum payload size for APNs and FCM?
4 KB for standard notifications on both. APNs allows 5 KB for VoIP notifications.
Should I use a .p8 key or a .p12 certificate for APNs?
Use a .p8 token-based authentication key. It does not expire each year, works for all your apps in the team and both sandbox and production environments.
Why are my iOS push notifications not arriving?
The most common causes are a sandbox and production environment mismatch, a missing or wrong APNs key in Firebase, a stale device token, notifications disabled by the user, Focus mode, or a background (silent) push being throttled by iOS.
What is the difference between notification and data messages in FCM?
Notification messages are displayed by the system automatically when the app is in the background. Data messages are handled by your app's code, which gives you control over how and whether they are shown.
Are silent push notifications guaranteed to be delivered?
No. iOS and Android limit background pushes to save battery, so silent pushes can be delayed or dropped. Use them to refresh content, not for anything critical.
How often do push tokens change?
Tokens can change when the app is reinstalled, restored to a new device or data is cleared. Send the latest token to your server on every app start and remove tokens that return unregistered errors.
Do I need Huawei Push Kit?
Only if you have users on Huawei devices without Google Play services, because FCM cannot deliver to them.
Can I send web push notifications with APNs and FCM?
Yes. FCM supports web push in browsers, and Safari on macOS and iOS 16.4+ (for web apps added to the home screen) supports standard Web Push.