← Back to home

May 28, 2026

How to Test Push Notifications Properly: A Practical QA Guide for iOS and Android

A modern QA checklist for testing push notifications: cold start, warm start, permissions, notification channels, localization, time zones, logout behavior, multi-account flows, and failure states.

Push notifications look simple from the outside.

A message appears. The user taps it. The app opens.

That is the happy path. And in real mobile products, the happy path is only a small part of the story.

Notifications can arrive when the app is closed, running in the background, half-restored from memory, logged out, offline, using another account, or stuck with disabled permissions. They can be delayed, duplicated, localized incorrectly, routed to the wrong screen, or silently blocked by the OS.

That is why push notification testing deserves more than one quick smoke test.

This article is a practical checklist for QA engineers who want to test notifications properly on Android and iOS.

Why notification testing matters

Notifications are part of the product experience.

For some apps they are just reminders. For others they are critical: bank alerts, delivery updates, flight changes, chat messages, security warnings, password reset events, or medical reminders.

Bad notification behavior can quickly damage trust:

A notification bug is not always just a UI bug. Sometimes it is a backend issue, sometimes a token issue, sometimes a permissions issue, sometimes an app lifecycle issue.

Good QA needs to test the whole chain.

Start with the basic model

Before writing test cases, you need to understand four things:

  1. What app state is being tested?
  2. What type of notification is being sent?
  3. What screen should open after tapping it?
  4. What should happen when the app cannot load the content?

Without those answers, notification testing becomes random clicking.

Cold start vs warm start

Mobile apps can be opened from different states.

Cold start

A cold start means the app is not running and has to launch from scratch.

Example:

The user receives a push notification while the app is closed. They tap it. The app starts and should open the correct target screen.

For example, in a mail app, tapping a notification about a new email should open that exact email, not just the inbox.

Warm start

A warm start means the app was already running in the background.

This is often more dangerous.

The app may already have some screen open. It may have cached data. It may have an old navigation state. It may be partially restored from memory. The user taps the notification, and now the app needs to route them to the correct place without breaking the current state.

This is where many notification bugs live.

Typical warm start problems:

Do not only test notifications from a closed app. Test them while the app is backgrounded from different screens.

Local notifications vs remote push notifications

There are two broad types of notifications.

Local notifications

Local notifications are scheduled by the app itself.

For example:

They do not require the server to send a message at the exact moment. The app schedules them and the OS displays them later.

Local notifications are especially sensitive to:

Remote push notifications

Remote push notifications are sent through a server-side flow.

The app receives them through platform notification services and displays them according to OS rules, app permissions, token registration, channels, categories, and payload data.

Remote notifications are especially sensitive to:

As a QA engineer, do not guess whether a notification is local or remote. Ask the developer or check the implementation notes. Your test strategy depends on it.

Modern platform details QA should not ignore

Notification testing became more platform-specific over time.

On Android, notification behavior depends heavily on runtime permissions, notification channels, app settings, battery behavior, and OEM customizations.

On iOS, you need to pay attention to notification authorization states, Focus modes, Background App Refresh, notification grouping, provisional notifications, and whether the app handles disabled permissions properly.

The main QA point is simple: do not test only inside the app. Test the OS-level settings too.

List view vs detail view

A very common notification bug is incorrect routing.

Most apps have a list-detail structure:

The detail view is the specific item the user expects to see after tapping the notification.

Example:

If the notification says “New message from Alex,” tapping it should open that exact conversation.

If the notification says “Your order was delivered,” tapping it should open that exact order.

If the notification says “Suspicious login detected,” tapping it should open the relevant security screen.

Opening the generic list screen is often not enough.

Core push notification test scenarios

1. App is closed: tap notification from cold start

Test that tapping the notification opens the correct screen from a fully closed state.

Check:

Common bug:

The app opens the home screen or list view instead of the detail view.

2. App is backgrounded: tap notification from warm start

Put the app in the background from different screens, then send a notification and tap it.

Test from:

Check:

Common bug:

The app tries to restore the old screen and process the notification at the same time. The result is a crash, blank screen, or wrong screen.

3. Notification is received while the app is open

This is easy to forget.

When the app is in the foreground, the behavior may be different from background delivery.

Check:

Example:

If the user is already inside a chat, a new message notification may not need a system banner. But the message should appear in the conversation.

Common bug:

The app receives the event but the UI does not update until restart.

4. No internet connection after tapping the notification

This is a critical scenario.

The notification may arrive while the device is online, but the user may tap it later when the device is offline.

Check:

Common bug:

Infinite loader on the detail screen.

5. Duplicate notifications

Send the same event more than once, or trigger the same backend event through realistic user actions.

Check:

Common bug:

The same event generates multiple notifications because both client and server trigger it, or because retry logic sends duplicates.

6. Notifications after logout

After logout, the app should not continue sending personal notifications to that user on that device.

Check:

Common bug:

User logs out, but old account notifications still appear.

This is not just annoying. It can become a privacy issue.

7. Notifications after logging back in

Now test the opposite.

Log out, log back in, and verify that notifications start working again.

Check:

Common bug:

Notifications stop working until the app is restarted or reinstalled.

8. Multiple accounts

If the app supports multiple accounts, test notification routing for each account.

Check:

Common bug:

Notifications only work for the first account used on the device.

9. Notification format and content

Notification content should match product requirements.

Check:

Example:

A finance app should not show sensitive transaction details on the lock screen if the product requirement says to hide them.

Common bug:

No one has a clear specification for notification format, so QA only checks that “something appears.”

That is not enough.

10. Time zone and device time changes

This is especially important for local notifications.

Check:

Example:

A reminder set for 9:00 AM should not suddenly fire at 3:00 AM after the user changes time zones.

Common bug:

The app schedules based on the original time zone and never recalculates.

11. Localization and language changes

Change the system language and app language if the app supports both.

Check:

Common bug:

The app UI changes language, but push notifications remain in the old language.

12. Delayed notifications

For time-sensitive flows, delay is a product bug.

Check:

Examples where delay matters:

Common bug:

The app team says “push is unreliable” and never defines an acceptable delivery window. QA should push for a measurable expectation.

13. Notifications do not appear at all

This is the obvious one, but it needs structure.

Check:

Common bug:

QA reports “notification does not appear,” but nobody knows whether the failure is app-side, server-side, OS-side, or test-environment-side.

A good bug report should include enough data to narrow it down.

14. User disables notifications

Users can disable notifications at the OS level.

Test what the app does after that.

Check:

Common bug:

The app silently fails and gives no instruction on how to enable notifications again.

15. Android notification channels

On modern Android, notification channels matter.

An app may have separate channels for:

Check:

Common bug:

A critical notification is sent through a low-priority or disabled channel.

16. Android notification permission

On newer Android versions, notification permission is not something QA can ignore.

Check:

Common bug:

The app assumes notifications are enabled, but the user denied permission during onboarding.

17. iOS notification authorization states

On iOS, test more than “allowed” and “blocked.”

Check:

Common bug:

The app treats every non-authorized state the same and gives poor guidance to the user.

What a strong notification bug report should include

A weak report says:

Push notification does not work.

A useful report says:

This saves time for everyone.

Practical QA checklist

Use this as a fast checklist before release:

Conclusion

Push notification testing is not just checking whether a banner appears.

Real notification testing is about app lifecycle, permissions, routing, backend events, OS behavior, localization, account state, privacy, and failure handling.

The most dangerous bugs often happen outside the happy path:

That is why QA should test notifications as a full product flow, not as a small UI feature.

A good notification system feels invisible when it works. But when it breaks, users notice immediately.