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.

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

Build it this week

Start a free trial, drop the SDK into your app and send your first notification from the dashboard.