# Create a push notification

Source: https://kirora.io/docs/guides/messaging/push/create-a-push-notification

Write a push notification's title and message, add a link, image and buttons, set delivery options and customise it per platform.

A push notification is a short message on someone's lock screen or desktop, with an optional link, image and buttons. You write it in a campaign's **Push notification** step or a journey's send step. Both use the same fields and preview.

## Choose the app

Under **Send through**, choose the push app (project) the notification goes through. Each option shows its platforms, environment and device count, for example *Juniper Kitchen · iOS, Android, Web · Production · 12,480 devices*. An app that isn't ready can't be chosen for sending. See [When an app is ready](https://kirora.io/docs/guides/messaging/push/get-started#when-an-app-is-ready).

Every device a contact has registered in that project gets the notification.

## Write the notification

| Field | What it's for | Limit |
| --- | --- | --- |
| **Title** | The first, bold line | 100 characters |
| **Message** | The text under the title. Most devices show two lines | 500 characters |
| **When tapped, open** | An HTTPS link to open when someone taps it. Leave it empty to open your app | Optional |

Keep both short: a lock screen shows about one line of title and two of message, and less on a watch or a browser banner.

### Personalise it

Title and message take the same merge tags as email, such as `{{ contact.firstName | fallback: "there" }}`. In a journey, they can also use the event that triggered it, such as an order number. See [Merge tags and personalisation](https://kirora.io/docs/guides/email-designer/merge-tags-and-personalisation).

> **Warning:** Whatever a merge tag fills in shows on the lock screen, to anyone holding the phone. Leave out anything private, such as an order total, a balance or a health detail.

## More options

Open **More options** for the rest. All are optional.

| Field | What it does |
| --- | --- |
| **Image** | An HTTPS link to an image shown with the notification. iOS shows it only if your app has a notification service extension |
| **Icon** | An HTTPS link to a small image beside the notification, on the web. Phones show your app's own icon |
| **Buttons** | Up to 2, each with a label of up to 30 characters and its own HTTPS link. Browsers show them; iOS and Android apps show them only if your app supports buttons |
| **App data** | Up to 10 keys passed to your app untouched, such as a deep-link path. Your developer tells you which keys the app reads |
| **Replace key** | A newer notification with the same key replaces the older one on the device, so people see only the latest, such as an order's current status |
| **Sound** | The name of a sound your app includes, such as `default`. Android uses the sound of the app's notification channel instead |
| **Badge (iOS only)** | The number on the app's icon. Send the number you want shown; it doesn't count up by itself |
| **Stop trying after** | How many hours Apple or Google may keep trying a device that's offline, up to 672 (28 days). Empty uses one day |

## Customise for iOS, Android or web

Open **Customize for iOS, Android or web** to change the notification on one platform, for example a shorter title for phones or an app link instead of a web link. Choose the platform, then set its own:

- **Title** and **Message**;
- **When tapped, open**: on iOS and Android, an HTTPS link or an app link such as `myapp://orders/1`; on the web, an HTTPS link;
- **Image**;
- **Android notification channel**: the ID of a channel your app has already created, such as `orders`. Android posts the notification there, with that channel's sound and importance. Left empty, your app's default channel is used.

A platform with its own content shows *(changed)*. Each field you set replaces the shared one on that platform only.

## Size limit

A notification can be up to 3,072 bytes in all: title, message, links, buttons and app data together. The counter under the fields shows how much you've used, for example *1,204 of 3072 bytes*. Personalisation can add more when it's sent, so leave room for long names. If it's over, shorten the text, data or links.

## Preview it

The preview shows the notification on a lock screen. To see it for a real person, choose a contact under **Preview as**, then **Render for this contact**. Once a platform has its own content, a switch shows each platform's version.

The shape is illustrative: devices shorten text differently, and an unlocked phone, a watch or a browser banner shows less. Send a test to see it on a real device. See [Test a push notification](https://kirora.io/docs/guides/messaging/push/test-push).

## A/B test a push notification

A campaign that sends push only can test versions of its notification, for example two titles. See [A/B test a campaign](https://kirora.io/docs/guides/campaigns/ab-test-a-campaign#test-a-push-notification).

## Next steps

- [Test a push notification](https://kirora.io/docs/guides/messaging/push/test-push)
- [Send push from campaigns, journeys and your app](https://kirora.io/docs/guides/messaging/push/send-push)
- [Push best practices](https://kirora.io/docs/guides/messaging/push/push-best-practices)