Custom foreground push

Style the push that lands while your app is open

When a push lands while your app is open, iOS leaves the moment to you. The Pushwoosh iOS SDK draws it as an animated banner in your own colors and fonts, with Apple's Liquid Glass material on iOS 26.

Three iPhone screens face on, side by side, inside different apps: a news app with a branded Liquid Glass banner over an article, a game with an art-matched banner over the match screen, and a banking app with a confirmation banner over the transfer screen

Trusted by 80,000+ companies to scale their engagement

The format, in full

A push that arrives while your app is in the foreground is your app’s problem to solve. iOS will put its plain system banner over your interface, or nothing at all, and a message you built a whole Journey around lands as gray chrome. The PushwooshForegroundPush module renders that same payload as a banner you own.

Liquid Glass (iOS 26)

Switch on useLiquidView and the banner is drawn in Apple's Liquid Glass material, so it reads as part of iOS 26 rather than as a layer pasted over your screen.

A standard banner (iOS 13 to 25)

Below iOS 26 the same call renders a solid banner in your gradient and colors, and older Swift toolchains fall back to a blurred effect view. One configuration covers all three.

Card image and GIF

Title, message, a card image and an animated GIF, all read from the payload the push already carries.

Motion, haptics and a dwell time

An entry animation, a balls or regularPush dismiss, a haptic on arrival picked from seven levels, and a duration in seconds before the banner clears itself.

What you control

PropertyWhat it setsValues
useLiquidViewThe Liquid Glass material on iOS 26Bool, false by default
gradientColors, backgroundColorThe surface the banner is drawn onYour brand colors
titlePushColor, messagePushColorText color for the two linesYour brand colors
titlePushFont, messagePushFontTypefaces for the two linesAny font your app ships
usePushAnimationThe entry animationBool, true by default
durationHow long the banner stays before it clearsSeconds
vibrationThe haptic fired on arrivalnone, light, medium, heavy, soft, rigid, notification
disappearedPushAnimationHow the banner leaves the screenballs or regularPush
styleThe built-in layoutstyle1, the only one available today
Property
1 / 9
useLiquidView
What it sets
The Liquid Glass material on iOS 26
Values
Bool, false by default
Property
2 / 9
gradientColors, backgroundColor
What it sets
The surface the banner is drawn on
Values
Your brand colors
Property
3 / 9
titlePushColor, messagePushColor
What it sets
Text color for the two lines
Values
Your brand colors
Property
4 / 9
titlePushFont, messagePushFont
What it sets
Typefaces for the two lines
Values
Any font your app ships
Property
5 / 9
usePushAnimation
What it sets
The entry animation
Values
Bool, true by default
Property
6 / 9
duration
What it sets
How long the banner stays before it clears
Values
Seconds
Property
7 / 9
vibration
What it sets
The haptic fired on arrival
Values
none, light, medium, heavy, soft, rigid, notification
Property
8 / 9
disappearedPushAnimation
What it sets
How the banner leaves the screen
Values
balls or regularPush
Property
9 / 9
style
What it sets
The built-in layout
Values
style1, the only one available today

Where you set it

One call at launch

foregroundNotificationWith(style:duration:vibration:disappearedPushAnimation:) in didFinishLaunchingWithOptions, plus the appearance properties. Configured once for the whole app.

One call on arrival

showForegroundPush(userInfo:) from your PWMessagingDelegate.onMessageReceived callback renders the banner straight from the message payload.

One delegate for the tap

PWForegroundPushDelegate.didTapForegroundPush(userInfo:) hands you the full payload, so a tap deep-links exactly where the campaign intended.

The job it does, inside a journey

One push, three renderings

The foreground banner is a render mode of a message you are already sending. Same segment, same trigger, same payload, same step in the same Customer Journey. What changes is what the device does with it on arrival.

With the app closed, the message lands as an ordinary system push or updates a Live Activity. With the app open, the SDK draws this banner. When the moment deserves a full screen with an offer or a form, the same Journey escalates to an in-app message.

A story breaks while the reader is mid-article

An editorial event fires the Journey. A silent push warms the article in the background, invisible to the reader, and the alert follows a second behind it.

Readers with the app closed see the system push on their lock screen. Readers already inside see the masthead’s own banner slide over the article they were reading, thumbnail attached, and one tap deep-links them to the new story. Message Inbox keeps the alert waiting either way.

What to use it for

The banner can only fire while someone is inside your app, so its value tracks in-session density: how much of your sending lands on a screen that is already open. Apps with long sessions get the most from it, and apps whose messages arrive to a pocketed phone get very little.

MomentWhat the message saysWhy the banner fits
Media & news · a story breaks during a reading sessionThe verdict is inThe reader is already in the app, and the system banner interrupts the masthead's own design
Streaming · a release lands during an episodeSeason 3 is liveThe alert can carry the show art instead of arriving as system chrome
Mobile games · an event or reward during a matchYour turn · The raid starts in 5Long sessions mean most pushes land in-play, and an art-matched banner fits the game UI
Creator & subscription apps · a new drop or a trial nudgeNew from an artist you followA carefully designed app should not hand this one moment to the system, and the tap deep-links to the paywall
Live sports · a goal while the user watches in-app1-0, 68 minutesThe user opened the app for the event and is watching it when the push lands
E-commerce & marketplaces · a price drop while they browseBack in stock in your sizeA styled banner mid-scroll reads as part of the store rather than as an interruption
Fintech · a confirmation during an in-app taskTransfer sentA branded confirmation feels native at the moment the user is watching for it
Moment
1 / 7
Media & news · a story breaks during a reading session
What the message says
The verdict is in
Why the banner fits
The reader is already in the app, and the system banner interrupts the masthead's own design
Moment
2 / 7
Streaming · a release lands during an episode
What the message says
Season 3 is live
Why the banner fits
The alert can carry the show art instead of arriving as system chrome
Moment
3 / 7
Mobile games · an event or reward during a match
What the message says
Your turn · The raid starts in 5
Why the banner fits
Long sessions mean most pushes land in-play, and an art-matched banner fits the game UI
Moment
4 / 7
Creator & subscription apps · a new drop or a trial nudge
What the message says
New from an artist you follow
Why the banner fits
A carefully designed app should not hand this one moment to the system, and the tap deep-links to the paywall
Moment
5 / 7
Live sports · a goal while the user watches in-app
What the message says
1-0, 68 minutes
Why the banner fits
The user opened the app for the event and is watching it when the push lands
Moment
6 / 7
E-commerce & marketplaces · a price drop while they browse
What the message says
Back in stock in your size
Why the banner fits
A styled banner mid-scroll reads as part of the store rather than as an interruption
Moment
7 / 7
Fintech · a confirmation during an in-app task
What the message says
Transfer sent
Why the banner fits
A branded confirmation feels native at the moment the user is watching for it

When another surface is the right one

The banner is the glanceable middle rung between a plain system alert and a full in-app takeover. Plenty of moments sit on either side of it.

  • The moment lands with the app closed: a courier at the door, a gate change, a fraud alert. That is a plain push, an interruption level or a Live Activity.
  • The state is ongoing rather than instantaneous: an order in progress, a ride en route, a running score. That is a Live Activity.
  • The message needs a full screen: an offer, a form, a paywall. That is an in-app message, which is richer and composed no-code.
  • You want to change who receives the message or what it says. This changes how it looks, and reach stays with mobile push.
The banner is your styling. The words are still yours to write

50 push notifications worth copying, with the copy and the creative behind each one.

Get the examples

Platform & technical coverage

The module is an iOS one. Android governs foreground behavior through notification channels, which the Pushwoosh SDK creates from the push payload rather than your app registering them in code, and the web has no comparable surface. The last column says what actually draws the banner, because most of this lives in your app rather than on the server.

CapabilityiOSAndroidWebDelivered by
Custom foreground banneriOS 13.0+, Pushwoosh SDK 6.10.0+The PushwooshForegroundPush module in your app
Liquid Glass materialiOS 26 with Swift 5.13+Apple's material, switched on with useLiquidView
Solid banner fallbackiOS below 26, Swift 5.13+A standard view drawn by the SDK
Blurred banner fallbackAny iOS, Swift below 5.13A blurred effect view drawn by the SDK
Title, message, card image, GIFYesThe push payload, unchanged
Brand colors, gradients and fontsYesStatic appearance properties on the module
Haptics, entry and dismiss animation, durationYesforegroundNotificationWith at app launch
Tap handling and deep linkYesPWForegroundPushDelegate.didTapForegroundPush
No-code configuration of the lookNot available today, the styling lives in app code
The comparable in-session surface elsewhereIn-app messages, Live ActivitiesIn-app messagesIn-app messagesSeparate products, composed no-code in the Control Panel
Capability
1 / 10
Custom foreground banner
iOS
iOS 13.0+, Pushwoosh SDK 6.10.0+
Android
Web
Delivered by
The PushwooshForegroundPush module in your app
Capability
2 / 10
Liquid Glass material
iOS
iOS 26 with Swift 5.13+
Android
Web
Delivered by
Apple's material, switched on with useLiquidView
Capability
3 / 10
Solid banner fallback
iOS
iOS below 26, Swift 5.13+
Android
Web
Delivered by
A standard view drawn by the SDK
Capability
4 / 10
Blurred banner fallback
iOS
Any iOS, Swift below 5.13
Android
Web
Delivered by
A blurred effect view drawn by the SDK
Capability
5 / 10
Title, message, card image, GIF
iOS
Yes
Android
Web
Delivered by
The push payload, unchanged
Capability
6 / 10
Brand colors, gradients and fonts
iOS
Yes
Android
Web
Delivered by
Static appearance properties on the module
Capability
7 / 10
Haptics, entry and dismiss animation, duration
iOS
Yes
Android
Web
Delivered by
foregroundNotificationWith at app launch
Capability
8 / 10
Tap handling and deep link
iOS
Yes
Android
Web
Delivered by
PWForegroundPushDelegate.didTapForegroundPush
Capability
9 / 10
No-code configuration of the look
iOS
Android
Web
Delivered by
Not available today, the styling lives in app code
Capability
10 / 10
The comparable in-session surface elsewhere
iOS
In-app messages, Live Activities
Android
In-app messages
Web
In-app messages
Delivered by
Separate products, composed no-code in the Control Panel

Security & hosting

Pushwoosh runs on its own hardware in the US and Germany, under GDPR and BDSG.

ISO 27001:2022 CertifiedISO 27001 CertifiedGDPR CompliantData Privacy FrameworkHIPAA CompliantSOC 2 Type I CertifiedOWASP Compliant

How it works

This one asks for engineering time and says so. There is no Control Panel composer for the foreground look, so a developer wires it once in the app and everything after that is the sending you already do.

  1. Add the module and hand the foreground to your app (developer)

    Add PushwooshForegroundPush alongside PushwooshFramework, PushwooshCore, PushwooshBridge and PushwooshLiveActivities, then set Pushwoosh_SHOW_ALERT to false in Info.plist. That stops iOS drawing its own alert, because the banner replaces it rather than joining it.

  2. Configure the look once (developer)

    Call foregroundNotificationWith(style:duration:vibration:disappearedPushAnimation:) in didFinishLaunchingWithOptions and set the appearance properties for colors, gradients and fonts. Render each message with showForegroundPush(userInfo:) from onMessageReceived, and handle taps in didTapForegroundPush.

  3. Send exactly as you do today (no-code)

    Same audience, same Customer Journey, same payload, whether the campaign comes from the Control Panel or the Messages API. The banner is how that push renders when it finds the app open.

Limits worth knowing

A polish layer with a narrow window. These are its edges.

  • Foreground only. The banner fires while the app is open, so its reach is exactly the share of your sending that lands on an open screen.
  • iOS only. Android foreground behavior runs through notification channels, a separate mechanism this module does not touch.
  • It replaces the native foreground alert. Pushwoosh_SHOW_ALERT has to be false, so the system banner and this one never appear together.
  • Code-config. The styling lives in app code, and changing it ships with an app release rather than with a campaign.
  • One layout today. style1 is the only built-in style, and customization stops at colors, gradients, fonts, motion and duration.
  • Liquid Glass needs iOS 26 and Swift 5.13+. Everything below that renders a solid or blurred banner from the same configuration, so the headline look reaches the iOS 26 slice of your audience.
  • It leaves no server-side marker. Delivery and opens report as usual, and the render is client-side, so measure it by running an in-session A/B on tap rate rather than looking for it in a report.