RORK LABJP
DEADLINE — From August 31, 2026, Google Play requires target API level 36 (Android 16) or higher for both new apps and updates to existing ones. Twelve days leftEXTENSION — If you cannot make the date, the deadline extension form in Play Console buys you until November 1. The extension is not automatic, so the request itself has to land before August 31TARGET SDK — Even for the Expo and React Native apps Rork produces, the targetSdkVersion is yours to verify. A template pinned to an older SDK will not meet the requirement on its ownRORK MAX — Where the original Rork emits React Native and Expo, Rork Max generates native Swift, covering iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and iMessageFUNDING — A $15M seed round led by Left Lane Capital was announced on April 9, alongside the acquisition of app builder Paperline to bring in engineering talentiOS — Developer beta 6 of iOS 27 arrived on August 17 with the autumn release drawing closer. If you ship native Swift output, the new OS timeline feeds straight into your release planDEADLINE — From August 31, 2026, Google Play requires target API level 36 (Android 16) or higher for both new apps and updates to existing ones. Twelve days leftEXTENSION — If you cannot make the date, the deadline extension form in Play Console buys you until November 1. The extension is not automatic, so the request itself has to land before August 31TARGET SDK — Even for the Expo and React Native apps Rork produces, the targetSdkVersion is yours to verify. A template pinned to an older SDK will not meet the requirement on its ownRORK MAX — Where the original Rork emits React Native and Expo, Rork Max generates native Swift, covering iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and iMessageFUNDING — A $15M seed round led by Left Lane Capital was announced on April 9, alongside the acquisition of app builder Paperline to bring in engineering talentiOS — Developer beta 6 of iOS 27 arrived on August 17 with the autumn release drawing closer. If you ship native Swift output, the new OS timeline feeds straight into your release plan
Articles/Dev Tools
Dev Tools/2026-04-09Intermediate

Rork × OneSignal: Supercharging Push Notifications in Your App

Learn how to integrate OneSignal into your Rork app for advanced push notifications — covering SDK setup, user segmentation, rich notifications, and delivery analytics.

OneSignal2push notifications11Rork537React Native227Expo172mobile notificationsuser engagementpush notification

Push notifications remain one of the most powerful tools for bringing users back to your app — when done right. Integrating OneSignal into a Rork-generated React Native / Expo app unlocks professional-grade segmentation, rich notifications, A/B testing, and a detailed analytics dashboard, all without building your own notification infrastructure from scratch.

OneSignal vs Expo Notifications: What's the Difference?

OneSignal is a third-party SaaS platform that manages push notifications across iOS, Android, and the web from a single dashboard. The free plan covers up to 10,000 push notifications per month — more than enough for most indie apps.

Here's how it stacks up against Expo Notifications (expo-notifications):

  • Dashboard: OneSignal provides a full GUI for creating, scheduling, and reviewing notification history. With Expo Notifications, everything is code-only
  • Segmentation: OneSignal lets you target users by tags, location, behavior, or last-session time through its UI. Expo Notifications requires you to implement your own filtering logic
  • Rich notifications: Image cards, action buttons, and emoji titles are all configurable directly from the OneSignal dashboard
  • Analytics: Delivery rate, open rate, and click-through rate are visualized out of the box
  • Simplified backend: You can send notifications directly from the OneSignal dashboard or via REST API — no dedicated notification server required

If you already use Expo Notifications but want more control over who gets notified and when — or if your team's marketing person needs to send campaigns without touching code — OneSignal is an excellent upgrade.

Prerequisites: What You'll Need

Before integrating OneSignal, make sure you have:

  • A Rork or Rork Max account with an active project
  • A free OneSignal account
  • An APNs Authentication Key for iOS (from Apple Developer Portal)
  • A Firebase Service Account JSON for Android (FCM v1)
  • Node.js 18 or later

To generate your APNs key, go to Apple Developer Console → Certificates, Identifiers & Profiles → Keys → Create a new key with "Apple Push Notifications service (APNs)" enabled. Download the .p8 file.

Step 1: Create a OneSignal App and Configure Platforms

Create a new app in the OneSignal dashboard

  1. Log in to OneSignal and click "New App/Website"
  2. Enter your app name and select "Mobile Push"
  3. Choose both iOS and Android for cross-platform coverage

iOS Configuration (APNs)

On the iOS Configuration screen:

  • Authentication Type: Token (recommended over certificate)
  • .p8 File: Upload your APNs key file (AuthKey_XXXXXXXXXX.p8)
  • Key ID: The 10-character ID shown in Apple Developer Console
  • Team ID: Your Apple Developer Team ID

Android Configuration (FCM v1)

OneSignal supports the FCM HTTP v1 API:

  1. Open your project in Firebase Console
  2. Go to Project Settings → Cloud Messaging → Firebase Cloud Messaging API (V1) → Enable
  3. Under Service Accounts, click "Generate new private key" and download the JSON file
  4. Upload this JSON file to OneSignal's Android Configuration section

After saving, OneSignal will provide you with an App ID (UUID format) and a REST API Key. Keep these handy.

Step 2: Integrate the OneSignal SDK in Your Rork App

Open your Rork project and prompt it with:

I want to add OneSignal to this project.
Please implement the following:
1. Install onesignal-expo-plugin and react-native-onesignal
2. Add the plugin configuration to app.json
3. Initialize OneSignal when the app starts
4. Add a button to request notification permission
5. Log the device push token to the console

Rork will generate the integration code, but here's what to verify manually:

app.json plugin configuration

{
  "expo": {
    "plugins": [
      [
        "onesignal-expo-plugin",
        {
          "mode": "production"
        }
      ]
    ]
  }
}

OneSignal initialization code

Add this to your app entry point (App.tsx or _layout.tsx):

import OneSignal from 'react-native-onesignal';
 
// Call this once when the app starts
export function initOneSignal() {
  // Replace YOUR_ONESIGNAL_APP_ID with your actual App ID
  OneSignal.initialize('YOUR_ONESIGNAL_APP_ID');
 
  // Request permission to send notifications (shows iOS permission dialog)
  OneSignal.Notifications.requestPermission(true);
 
  // Handle notification clicks
  OneSignal.Notifications.addEventListener('click', (event) => {
    console.log('Notification clicked:', event.notification);
    // Add your navigation logic here
  });
}
 
// Expected behavior:
// 1. OneSignal initializes silently at app launch
// 2. iOS shows a system permission dialog on first run
// 3. Clicking a notification logs the payload to the console

Tagging users for segmentation

Tags are key-value pairs you attach to users. They power your segmentation logic later.

import OneSignal from 'react-native-onesignal';
 
// Call this after a user logs in or updates their profile
export function setUserTags(userId: string, plan: 'free' | 'premium') {
  OneSignal.User.addTag('user_id', userId);
  OneSignal.User.addTag('plan', plan);
  OneSignal.User.addTag('country', 'US');
}
 
// Expected behavior:
// - In the OneSignal dashboard under Audience → Segments,
//   you can now create a segment like: plan = premium
// - Use this to send exclusive notifications to paying users

Step 3: Build and Test

OneSignal requires a native build — it won't work in Expo Go. You'll need an Expo Development Build or a full production build.

# Create a development build via EAS
npx eas build --platform all --profile development
 
# Install on a physical device and launch the app
# Your device should appear under OneSignal Dashboard → Audience → All Users

Send a test notification

  1. Go to OneSignal Dashboard → Messages → Push → New Push
  2. Select "Send to Test Device" and enter your device's player ID (logged during app init)
  3. Enter a title and message, then send

Step 4: Build Real Campaigns from the OneSignal Dashboard

The real power of OneSignal shows up once your users are in the system.

Segment-based targeting

Go to Audience → Segments and create conditions like:

  • Premium users: plan = premium tag matches
  • Dormant users: Last Session more than 7 days ago (perfect for win-back campaigns)
  • New users: Created At within the last 3 days (for onboarding sequences)

Rich notifications (image + action buttons)

Under Messages → New Push → Add Media, paste an image URL. Recommended sizes:

  • iOS: 1200 × 630 px (2:1 ratio)
  • Android: 1200 × 630 px or square 400 × 400 px

Intelligent Delivery

OneSignal's Intelligent Delivery automatically sends each notification at the time a user is most likely to engage, based on their past app usage patterns. Toggle it on under the Delivery section — no extra code needed.

For advanced segmentation, A/B testing, and full automation pipelines, check out the Rork Push Notification Master Plan: Segment Delivery, A/B Testing, and Automation Guide.

Common Errors and Fixes

Issue: Notifications not arriving on iOS

Cause: APNs misconfiguration or provisioning profile mismatch.

Fix: Check OneSignal Dashboard → Audience → select your device → Device Errors. If you see InvalidToken or BadDeviceToken, regenerate your APNs key and re-upload it. Also verify your EAS build's provisioning profile matches your App ID.

Issue: Notification icon appears as a white square on Android

Cause: Android notification icons must be transparent PNGs (white/gray silhouette only). Color images are ignored by the system.

Fix: In app.json, point the notification.icon field to a transparent PNG:

{
  "expo": {
    "notification": {
      "icon": "./assets/notification-icon.png",
      "color": "#4F46E5"
    }
  }
}

Issue: App crashes in Expo Go after installing OneSignal

Cause: OneSignal uses native modules not available in Expo Go's runtime.

Fix: Use a Development Build. Run npx eas build --profile development and install the resulting .apk or .ipa on your device.

Wrapping Up

Adding OneSignal to your Rork app is one of the highest-leverage improvements you can make for long-term retention. You get a professional notification infrastructure without building or maintaining a server, a dashboard your whole team can use, and analytics to continuously improve your messaging strategy.

Start with the free tier, build your user segments with tags, and gradually introduce scheduled campaigns and Intelligent Delivery. Even small improvements to notification open rates can meaningfully boost your DAU and revenue.

Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

Related Articles

Dev Tools2026-07-30
What Renovate may bump in an Expo app, and what it must never touch
Turning on automated dependency updates in a Rork-generated app also hands Renovate the 123 packages Expo SDK 57 pins. Measured on 2026-07-30, six of them sit a full major version behind npm latest. Here is how to generate the ignore list from the SDK instead of maintaining it by hand.
Dev Tools2026-07-28
Counting what prebuild --clean will erase before you upgrade to Expo SDK 57
A raw diff between two generated ios/ trees showed 649 changed lines; only 3 were real edits. How to count what prebuild --clean erases, and move it into a config plugin.
Dev Tools2026-07-27
When to Raise Your Minimum iOS Version — Count Leftover Branches, Not User Percentages
Judging a minimum OS bump by usage share produces the same answer every year, so the decision never happens. Here is the annotation convention, the sweep script that counts how many branches each candidate floor would retire, and what to watch for 30 days after.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →