Push Notifications Delivered

OneSignal is the market leader in customer engagement, powering mobile push, web push, email, and in-app messages for 600,000+ businesses worldwide.

Get Free AccountSchedule Demo

Free plan includes unlimited mobile and up to 30,000 web push subscribers.

Trusted by over 630,425 developers

  • LendingTree
  • Volkswagen
  • Verizon
  • Zynga
  • Bose
  • HQ Trivia
  • EatStreet
Case Studies
Andrew Watts
OneSignal is incredibly helpful with a front-facing user interface that non-devs can easily use, impeccable service, and the consistent system uptime that make delivering pushes reliable.
Andrew Watts, Marketing Manager

Everything You’re Looking For

It’s never been easier to connect with customers.

15 Minute Setup

Our users are always shocked at how easy it is to get started.

Real-Time Reporting

View delivery and conversion performance for every message.

Incredible Scalability

Millions of users? No problem. We send out billions of notifications daily.

A/B Testing

Compare message performance and automatically send the best.

Superior Segmentation

Create personalized messages and set them to deliver at optimal time.

Automated Messaging

Set it and forget it. You can trigger notifications based on user behavior.

Intelligent Delivery

Leverage machine learning to 2x your click through rates.

Analyze Results Anywhere

Our SDKs are open source and every component is accessible via API.

Built for Developers

Our founders were app developers first. We couldn’t find any great push notification tools so we built OneSignal.
Code in the language you know with any development environment.

All in less than 10 lines of code.

Apple iOS
import OneSignal

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

  // Replace 'YOUR_APP_ID' with your OneSignal App ID.
  OneSignal.initWithLaunchOptions(launchOptions,
    appId: "YOUR_APP_ID",
    handleNotificationAction: nil,
    settings: [kOSSettingsKeyAutoPrompt: false])

  OneSignal.inFocusDisplayType = OSNotificationDisplayType.notification;

  OneSignal.promptForPushNotifications(userResponse: { accepted in
    print("User accepted notifications: \(accepted)")
  })

  return true
}
Android
import com.onesignal.OneSignal;

public class YourAppClass extends Application {
   @Override
   public void onCreate() {
      super.onCreate();

      // OneSignal Initialization
      OneSignal.startInit(this)
        .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
        .unsubscribeWhenNotificationsAreDisabled(true)
        .init();
   }
}
Web Push
<head>
  <link rel="manifest" href="/manifest.json">
  <script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script>
  <script>
    var OneSignal = window.OneSignal || [];
    OneSignal.push(["init", {
      appId: "YOUR_APP_ID"
    }]);
  </script>
</head>
React Native
import OneSignal from 'react-native-onesignal'; // Import package from node modules

export default class App extends Component {
  constructor(properties) {
    super(properties);
    OneSignal.init("YOUR_APP_ID");

    OneSignal.addEventListener('opened', this.onOpened);
  }

  componentWillUnmount() {
    OneSignal.removeEventListener('opened', this.onOpened);
  }

  onOpened(openResult) {
    console.log('Message: ', openResult.notification.payload.body);
    console.log('openResult: ', openResult);
  }
}
Unity
using System.Collections.Generic;

void Start() {
  OneSignal.StartInit("YOUR_APP_ID")
    .HandleNotificationOpened(HandleNotificationOpened)
    .EndInit();

  OneSignal.inFocusDisplayType = OneSignal.OSInFocusDisplayOption.Notification;
}

private static void HandleNotificationOpened(OSNotificationOpenedResult result) {
  // use notification opened result here
}
Flutter
void main() {
    OneSignal.shared.init("YOUR_APP_ID", {
        OSiOSSettings.autoPrompt: false
    });
    OneSignal.shared.setInFocusDisplayType(OSNotificationDisplayType.notification);

    OneSignal.shared.promptUserForPushNotificationPermission();
}

Code in any language. We provide native support for every development environment.

30+ Platform Integrations