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.
| 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 | VAPID web-push SDK; imports existing subscriptions | Supported |
| 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, adapted or refused 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 | Imported and re-registered on first SDK run; no re-permission prompt. FCM, APNs and VAPID all round-trip | 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 | Same HMAC scheme; per-app toggle; already-registered devices are migrated, not rejected | Supported |
| Subscription status | subscribed / unsubscribed / never-subscribed | Preserved exactly — unsubscribed stays unsubscribed | Supported |
| Custom events | Custom Events (Professional 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 (Professional 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, capped by total subscribers per plan | 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 | — | OpenPush + OneSignal SDKs coexist in one build during rollout — they are independent SDKs on separate credentials | By design |
| Rollback | — | Point sends back at OneSignal; nothing is deleted on either side, so your OneSignal audience stays intact throughout | By design |
| Staged rollout | — | Migrate a share of traffic, verify, then cut fully over | By design |
| Data export | CSV export | Your whole account 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 suite that runs on every deploy; 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 1M MAU · importer built for switching · read the pledge