What "OneSignal-compatible"
means, exactly.
"Compatible" is a promise, so here's the receipt: every OneSignal concept, whether OpenPush supports it, and where the edges are. If it's not green below, we say so — no surprises mid-migration.
| Area | Capability | Today | Status |
|---|---|---|---|
| Channels | iOS push (APNs) | Sent straight to Apple on your own .p8 key. | Live |
| Channels | Android push (FCM) | Sent straight to Google on your own service account. | Live |
| Channels | Web push | Through Firebase Cloud Messaging with the Firebase JS SDK. No OpenPush JavaScript SDK and no direct VAPID sender yet. | Limited |
| Channels | Email, SMS, WhatsApp | OpenPush is push and in-app. The only email it sends is to your team. | Not yet |
| Channels | Huawei, Amazon, Windows push | Imported Huawei devices are treated as Android (FCM). | Not yet |
| SDKs | iOS, Android and Unity SDKs | OneSignal's method names, so a migration is mostly a key swap. Early-access teams get them now; the repositories go public with the launch. | Live |
| SDKs | React Native, Flutter, Cordova | Use the REST API from your backend meanwhile. | Not yet |
| Migration | OneSignal import | With a REST key or a CSV: subscribers with opt-in status, message history, templates and segment definitions. | Live |
| Migration | Imported Android devices before your app update | Imported Android tokens keep receiving from OpenPush until your new release, with the OpenPush SDK, reaches them. | Live |
| Migration | OneSignal REST API drop-in | The Live Activity routes accept OneSignal's request shape. Sends use the OpenPush REST API. | Limited |
| Sending | Segments | Tags, sessions, language, custom events and session duration. Filtering on what a person did with a message is not built yet. | Live |
| Sending | Templates, translations and action buttons | Live | |
| Sending | Personalisation | Liquid in titles, bodies, images and links, with uploaded lookup tables. | Live |
| Sending | Images | Upload in the composer, or paste a URL. | Live |
| Sending | Scheduling and per-time-zone sends | Live | |
| Sending | A/B tests | 2 to 10 variants, a held-back audience, and a manual or automatic winner. | Live |
| Sending | Intelligent Delivery | Each device's learned hour, or a time-zone mode. Not inside journey steps. | Live |
| Sending | Frequency caps, quiet hours, throttling | Set per app. | Live |
| Lifecycle | Journeys | Segment and event entrances; push, in-app, Live Activity and webhook steps; waits, wait-until-event, time windows, yes/no, splits with holdout, tags, goals and exits. | Live |
| Lifecycle | AI decision step in journeys | Switched on per app; chooses each person's next step from 2 to 10 options, with a fallback. | Limited |
| Lifecycle | In-app messages | Top, centre, bottom, full screen and carousel, triggered from the SDK or a journey. | Live |
| Lifecycle | iOS Live Activities | Start, update, end and push-to-start from the console, the API or a journey. | Live |
| Lifecycle | Ready-made Live Activity templates | Today you define the attributes and widget in your app. | Not yet |
| Lifecycle | Android Live Updates | The Android SDK renders a Live Activity send as an ongoing notification where the OS allows it. | Limited |
| Data | Custom events and the live events API | Live | |
| Data | Reports and delivery trace | Per message and per device, with funnels and journey stats. | Live |
| Data | Data connections | Stream out to a webhook or Amplitude, and bring data in. No warehouse destinations yet. | Live |
| Data | Export | Every app, free, as NDJSON or CSV that our importer reads back. | Live |
| AI | OpenPush AI | Compose, translate, summarise, AI-drafted segments and journeys, and suggestions. Metered in OpenTokens. | Live |
| AI | Ask OpenPush | Ask questions about an app's own data in plain English. | Live |
| AI | MCP server for coding agents | Sign in from Claude, ChatGPT or Cursor. Every write is two-step. | Live |
| AI | Codebase scan | A command-line scan that maps your app's events and screens for OpenPush. | Live |
| Account | Sign-in | Google or GitHub. Access is by early-access approval until the launch. | Live |
| Account | Team roles and audit log | Viewer, manager and admin, with per-app overrides. | Live |
| Account | Identity verification | HMAC-SHA256 of the external ID, per app. | Live |
| Account | SAML single sign-on | Not yet |
| Capability | OneSignal | OpenPush support | Status |
|---|---|---|---|
| Android push | FCM v1 SDK | Native Kotlin SDK over FCM; host-owned FCM service or the optional FCM artifact; drop-in init call | Supported |
| iOS push | APNs SDK | Native Swift SDK over APNs (token-based auth with your .p8 key); no method swizzling | Supported |
| Web push | Service worker + VAPID | Through Firebase Cloud Messaging: your site uses the Firebase JS SDK and a service worker, and OpenPush sends to the FCM web token. No first-party JavaScript SDK and no direct VAPID sender yet, so imported OneSignal web subscriptions need to re-subscribe through FCM | Partial |
| Unity | Unity SDK | C# SDK with the same initialize / login / tags surface; Live Activities from Unity with a bundled default widget | Supported |
| SDK surface | initialize / login / logout / addTag / addAlias / pushSubscription … | Same method names on iOS, Android and Unity — keep your OneSignal.initialize call and swap the keys. Every method is listed as forwarded, refused or not applicable in the compatibility table | Supported |
| React Native · Flutter · Cordova | Wrapper SDKs | Not yet — the REST API and web push work today; wrappers follow the native SDKs | Roadmap |
| Capability | OneSignal | OpenPush support | Status |
|---|---|---|---|
| Device tokens | FCM tokens · APNs tokens · Web VAPID | FCM and APNs tokens are imported and re-registered on first SDK run, with no re-permission prompt. Imported Android tokens keep receiving before your app ships the OpenPush SDK. VAPID web subscriptions are not sendable yet (see Web push) | Supported |
| External IDs / aliases | external_id, aliases | external_id mapped 1:1; multi-alias on import and in the SDK | Supported |
| Data tags | key/value tags, capped per plan | Unlimited tags; column-mapped on import; numeric operators in segments | Supported |
| Identity verification | HMAC-signed external IDs | HMAC-SHA256 of the external ID, as in OneSignal's identity verification; a per-app toggle. OneSignal's newer JWT scheme is not supported | Supported |
| Subscription status | subscribed / unsubscribed / never-subscribed | Preserved exactly — unsubscribed stays unsubscribed | Supported |
| Custom events | Custom Events (Growth plans and up) | SDK trackEvent + REST ingest; usable as segment filters and journey triggers, free | Supported |
| Direct import (REST key) | — | Paste a OneSignal REST key: subscribers, opt-in status, tags, templates and message history are pulled and imported; delivery charts rebuilt from campaign stats | Supported |
| CSV import columns | Audience → Export CSV | Auto-maps player_id, token, external_id, tags, language, status; large files import in the background | Supported |
| Capability | OneSignal | OpenPush support | Status |
|---|---|---|---|
| Segments | Capped per plan | Unlimited, same filter vocabulary (last_session, session_count, tags, language, custom events) | Supported |
| Templates & scheduling | Templates, timezone send | Reusable templates with images, translations and actions; timezone-aware scheduling with a live countdown | Supported |
| Intelligent Delivery | Intelligent Delivery (Growth plans and up) | Same delayed_option on the API: per-user learned hour or per-timezone time of day, free | Supported |
| Journeys | Capped per plan | Segment or event entrance; push and in-app steps, wait, tag, yes/no, weighted split with holdout, Live Activity and webhook steps; exit and re-entry rules; no cap on active journeys | Supported |
| Journeys — wait-until-event, time windows, goals | Wait Until, Time Window, Goals | Wait until an event, time windows, and goals that end a run on conversion | Supported |
| Live Activities | iOS Live Activities; on the Free plan, for organizations with up to 1,000 MAU | Same two REST endpoints (start by activity type, update/end by activity id), push-to-start, update fan-out; Android Live Updates alongside | Supported |
| Delivery analytics | Delivery/CTR reports | Step-by-step funnel (Audience→Sent→Delivered→Confirmed→Clicked), separate Held bucket — the provider accepting it is not reported as a delivery | Supported |
| A/B test | A/B chip in the composer | Two to ten variants in the composer or the API, a held-back audience, manual or automatic winner; weighted splits inside Journeys too | Supported |
| In-app messages | In-app / IAM builder | In-app builder: top, center, bottom, full screen or carousel; triggers, buttons, reports; a journey step too | Supported |
| Email / SMS | Omnichannel email + SMS | Out of scope — OpenPush is push (see "when OneSignal is right") | Gap |
| REST API | Create/send message API | Per-app keys; send, audience, events, journeys and Live Activities endpoints, readable in one sitting | Supported |
| Capability | OneSignal | OpenPush support | Status |
|---|---|---|---|
| Dual-run both SDKs | — | Not verified in one build yet. Migrate by app release instead: import your subscribers, and imported Android devices keep receiving from OpenPush until the new release reaches them | Partial |
| Rollback | — | Point sends back at OneSignal; nothing is deleted on either side, so your OneSignal audience stays intact throughout | By design |
| Staged rollout | — | Send to a segment first, check the delivery trace, then send to everyone | By design |
| Data export | CSV export | Every app exports free, any time, as a point-in-time snapshot our own importer reads back — no lock-in | Supported |
Engineering owns the truth of this page. A row is green only when its fixture passes in the automated suite; the SDK rows mirror the published compatibility table, method by method. Spot a mismatch? Tell us and we fix it the same day.
Email and SMS are out of scope — OpenPush is push, not omnichannel; if you need them in one console today, OneSignal's paid tiers are the honest choice. The React Native and Flutter wrappers are on the roadmap, not in the launch. Web push runs through Firebase Cloud Messaging with your own service worker; there is no first-party JavaScript SDK yet. If your cutover depends on one of these, tell us and we'll give you the real date.
Fixtures, not vibes
Each "Supported" row is backed by a fixture that round-trips a real OneSignal export: import it, register a device on the OpenPush SDK, send, and assert the subscription status and tags match byte-for-byte. A row goes green only when its fixture passes in the suite.
Tell us, we fix fast
If your OneSignal setup uses something not covered here, send us your export schema (no PII needed) and we'll tell you within a day whether it maps — and add it to this page. Accuracy is the whole point.
Know exactly what moves.
Free forever to 100K MAU · importer built for switching · read the pledge