Use case · Product launches
A launch screen for your early adopters
The next time an early adopter opens your app, they get a full-screen first look at what you just shipped. Your product team writes it in the dashboard. Your app decides how it looks. Nobody waits for a release.
- created in
- dashboard
- audience
- tags: early-adopter
- shown as
- full screen, once
- sdk
- react native
How the notification gets made
Your developers set it up once. After that, each launch is a form in the dashboard, filled in by whoever owns the announcement.
01 · Your backend, once
Tag your early adopters
When someone joins your early access program, your backend adds the early-adopter tag to their profile, and removes it when they leave. Tags can only be set with your secret key, never from the app, so nobody can tag themselves in.
import { NotificationStream } from "@notificationstream/node";
const ns = new NotificationStream({ secretKey: process.env.NOTIFICATIONSTREAM_SECRET_KEY });
// When someone joins your early access program
await ns.projectUsers.updateTags(user.id, { add: ["early-adopter"] });
// And when they leave it
await ns.projectUsers.updateTags(user.id, { remove: ["early-adopter"] });02 · Your mobile app, once
Present launches full screen
usePresentedNotification hands your app each new notification, one at a time. Filter on the launch category and render your own full-screen component with the title, body, action and any extra fields in data.
Mount it on the screens where a launch may appear. On a screen without it, such as checkout, the announcement waits until the user moves on.
import AsyncStorage from "@react-native-async-storage/async-storage";
import { useIsFocused } from "@react-navigation/native";
import { NotificationProvider, usePresentedNotification } from "@notificationstream/react-native";
export function App({ user, getNotificationToken }) {
return (
<NotificationProvider
publishableKey="pk_live_8fK2…"
user={{ id: user.id, name: user.name, locale: user.locale }}
token={getNotificationToken} // signed by your backend
storage={AsyncStorage}
// Also present what went live while the app was closed
deliverOnStart="unseen"
>
<Navigation />
</NotificationProvider>
);
}
// Mounted on the home screen: takes launch announcements, one at a time
export function LaunchAnnouncement() {
const isFocused = useIsFocused();
const { notification, dismiss } = usePresentedNotification({
filter: (item) => item.category === "launch",
enabled: isFocused,
});
if (!notification) return null;
// Your own full-screen component: title, body, actionLabel, data.hero…
return <LaunchScreen item={notification} onClose={() => dismiss()} />;
}03 · Your product team, every launch
Write the announcement in the dashboard
Open Notifications → New, write the title and body in each language, and pick the early-adopter tag as the audience. Set the category to launch and put the image and layout in the data field.
Schedule it for launch morning and let it expire a week later, so nobody gets a stale launch screen next month. Until it goes live you can still edit it.
What your early adopters see
- Shown on their next visit
- Users in the app get it on the next feed check, or within seconds with realtime. Everyone else gets it when they next open the app.
- Once, on every device
- Closing it marks it read, and read state syncs. Dismissed on the phone means it won’t show again on the tablet.
- In their own language
- Each user gets the locale that best matches theirs, falling back to your default.
- Only early adopters
- The audience is matched against each user’s current tags. Users without the tag never see it.
- Still in the inbox
- It stays in the notification feed until it expires, so users can find it again after closing it.
- Gone when it expires
- After a week it disappears from every feed, but stays in your dashboard history.
Built with
Plan
Tag audiences, scheduling and multiple languages need Growth or Scale. On Starter, send the launch to everyone and publish it right away.
More use cases
Maintenance in progress. Uploads are paused until 02:30 UTC.
ends in 18 minMaintenance & incidents
Maintenance notices that come and go on time
Warn users the day before, show a banner during the window, and take everything back with one cancel.
Created by Your team in the dashboard, or your incident tooling over the API
Read the use case
Activity feeds
A social-style activity feed
Friend requests with Confirm and Delete buttons, likes, comments and shares in the feed your users already know.
Created by Your backend, automatically on each event
Read the use case
Build it this week
Start a free trial, drop the SDK into your app and send your first notification from the dashboard.