Skip to content
Launching Oct 10 — OpenPush is free forever to 1M MAU per app, every feature included. Get early access →
ProductJourneysLive ActivitiesPricingCompareDocsChangelogMigrate from OneSignalSign in
Home / SDKs
SDKs · iOS · Android · Unity · web · public Oct 10

Keep your initialize call.

Three native SDKs written from scratch, with the method names a OneSignal integration already uses: initialize, login, logout, User.addTag, User.pushSubscription, Notifications.requestPermission. Swap the keys, keep the code. Where a method does not map, the compatibility table says so rather than pretending.

Public on Oct 10 · iOS 16 and up · Android API 26 and up · Unity with a host-owned FCM service · the method-by-method table →
iOS · Swift

Swift Package, no swizzling

Registration, receipts, tags, aliases, identity verification, Live Activities with push-to-start, custom events, sessions. Your app forwards its APNs callbacks; the SDK never swizzles them. GitHub Oct 10

Android · Kotlin

Your FCM service, or ours

Keep your own FCM service and forward the token, or add the optional FCM artifact. Live Updates render start, update and end as one ongoing notification, promoted on the newest Android. GitHub Oct 10

Unity · C#

The same facade, in C#

One OpenPush.Initialize(appId, sdkKey), tags and identity, Live Activities with a bundled default widget and the injection to use it. No native dependency manager. GitHub Oct 10

Web

VAPID web push

A service worker and a VAPID key; existing web-push subscriptions import from OneSignal. Chrome, Firefox, Edge and Safari on the desktop.

REST

Everything, from any language

Messages, audience, events, journeys, Live Activities and exports — per-app keys, readable in one sitting. Reference →

Roadmap

React Native · Flutter · Cordova

Wrappers over the native SDKs follow the launch. Until then the REST API and web push work from any stack.

The swap

Two lines change.

The package and the keys. The call sites stay.

// iOS — before import OneSignalFramework OneSignal.initialize("ONESIGNAL_APP_ID", withLaunchOptions: launchOptions) // iOS — after import OpenPushOneSignal OneSignal.initialize(appId: "op_app_…", sdkKey: "opsk_…") // from the console → Keys // unchanged OneSignal.login("player-42") OneSignal.User.addTag("level", "10") OneSignal.Notifications.requestPermission(fallbackToSettings: true) { accepted in … }

Android: OpenPush.initialize(context, appId, sdkKey). Unity: OpenPush.Initialize(appId, sdkKey). Both SDKs can run side by side in one build during rollout — they are independent SDKs on separate credentials.

What the SDK does for you

The parts you would otherwise write yourself.

Reliability

Retries, batching, receipts

Tag and alias writes batch into one request; transient registration failures retry on a short backoff; confirmed-delivery and click receipts ride a durable queue so a flaky network does not lose a data point. Identity hashes stay in memory only; the device credential lives in the Keychain or the Android keystore.

The event pipe

Sessions and custom events, built in

One trackEvent call feeds segments, event-triggered Journeys and Intelligent Delivery at once. The SDK reports sessions so each device's best hour is learned without extra code — and nothing is collected that the per-app switches in the console have not turned on.

Straight answers

SDK questions.

Is any OneSignal code inside?

No. Their licence restricts their SDK to their service. Ours are written from scratch with compatible method names, and the compatibility table lists every method as forwarded, adapted or refused so you are never guessing.

Which licence?

The SDK repositories carry a permissive licence and are public from Oct 10. The OpenPush server is a hosted service and is not published.

Do I have to re-prompt users for permission?

No. Imported tokens are re-registered on the first SDK run; a device that was subscribed stays subscribed, and one that was not stays not.

What about Flutter or React Native today?

Use the REST API from your backend for sends and audience, and web push in a web view where it applies; the wrappers over the native SDKs follow the launch. Tell us on the early-access form if one of them gates your migration.

Swap the keys

Keep the code.

Free forever to 1M MAU · read the pledge