FAB — Epic Games Marketplace

OneSignalPro

OneSignalPro diagram
OneSignalPro — architecture & feature overview

Production-ready push notification integration for Unreal Engine 4. Full Blueprint support, zero boilerplate for Android & iOS.

Version 1.0.0 UE 4.27+ Android · iOS Blueprint Ready

What is OneSignalPro?

OneSignalPro is a production-grade Unreal Engine 4 plugin that brings OneSignal push notification services directly into your mobile game. It handles all the platform complexity — Android JNI bridges, iOS Objective-C wrappers, Gradle dependencies, CocoaPods, and manifest permissions — so you can focus entirely on your game logic.

The plugin exposes a clean, consistent Blueprint API. Everything works from Blueprints with no C++ required. For teams that do write C++, a full subsystem and interface layer is available.

📱

Mobile First

Full implementation for Android (SDK 4.x) and iOS (SDK 3.x). Compiles cleanly on Win64, Mac, and Linux as a null stub.

🔵

Blueprint Native

Every feature — initialize, tags, user identity, subscription, events — is exposed as Blueprint nodes with friendly display names.

Zero Code Setup

Set your App ID in Project Settings → Plugins → OneSignal, enable Auto-Initialize, and the SDK starts automatically — no Blueprint nodes required.

🔒

Safe & Stable

All callbacks are dispatched to the game thread. Guards prevent calls before initialization. LoadingPhase = PreLoadingScreen for earliest init.

Complete Feature List

Core Notifications

  • Initialize OneSignal with App ID
  • Auto-initialize on game start (zero code)
  • Receive foreground push notifications
  • Handle notification-opened events (user tap)
  • Player ID received callback
  • Enable / disable push subscription per device
  • Prompt for push permissions (iOS OS dialog)

Device Segmentation (Tags)

  • Send a single key/value tag
  • Send multiple tags in one call (TMap)
  • Delete a tag by key
  • Link device to your backend user (External User ID)
  • Remove External User ID
  • Retrieve OneSignal Player ID at any time

Blueprint Events (Delegates)

  • OnNotificationReceived — foreground notifications
  • OnNotificationOpened — user tapped notification
  • OnPlayerIdReceived — device ID available
  • All events fire on the game thread (safe for UObjects)
  • Bind/unbind at runtime from any Blueprint

Developer Experience

  • Project Settings UI (UDeveloperSettings)
  • Verbose debug logging toggle
  • Dedicated log category: LogOneSignal
  • No engine source modifications
  • Compatible with packaged Shipping builds
  • Works in Editor without platform SDK
  • Subsystem auto-created/destroyed with Game Instance

Supported Platforms

🤖 Android Full — SDK 4.x
🍎 iOS Full — SDK 3.x
🪟 Win64 Compiles (null stub)
🍏 Mac Compiles (null stub)
🐧 Linux Compiles (null stub)
Note: The plugin compiles cleanly on desktop platforms (Win64, Mac, Linux) using a null stub. All push notification APIs are no-ops on non-mobile platforms, which allows the plugin to be active in the Editor without errors or crashes.

How It's Built

Blueprint / C++ user code UOneSignalProBPLibrary ← thin static Blueprint wrappers (stateless) UOneSignalManager ← UGameInstanceSubsystem (owns state + delegates) IOneSignalPlatform ← abstract C++ interface ┌────┴──────────────────┐─────────────────┐ ▼ ▼ ▼ FOneSignalAndroid FOneSignalIOS FOneSignalDefault (JNI bridge) (Obj-C++ bridge) (null stub)

Android Data Flow

OneSignal Cloud FCM Android OS Java foreground handler (GameActivity) nativeOnNotificationReceived() AsyncTask GameThread FOneSignalAndroid::OnJavaNotificationReceived() UOneSignalManager::HandleNotificationReceived() OnNotificationReceived (Blueprint event)

iOS Data Flow

OneSignal Cloud APNs iOS OS OneSignal SDK handler (CocoaPod 3.x) dispatch_get_main_queue() Obj-C++ OSNotificationOpenedResult handler AsyncTask GameThread UOneSignalManager::HandleNotificationOpened() OnNotificationOpened (Blueprint event)

Blueprint Function Reference

Function Name Category Description Inputs
Initialize OneSignal OneSignal Start the OneSignal SDK with your App ID. Not needed if Auto-Initialize is on. AppId, bEnableDebug
Get OneSignal Manager OneSignal Returns the subsystem instance. Use this to bind events.
Is Initialized OneSignal Pure Returns true after a successful Initialize call.
Get Player ID OneSignal|User Pure Returns the OneSignal device Player ID. Empty string if not yet available.
Send Tag OneSignal|Tags Tag this device with a single key/value pair for segmentation. Key, Value
Send Tags OneSignal|Tags Send multiple key/value tags in a single call. Tags (TMap)
Delete Tag OneSignal|Tags Remove a previously sent tag by key. Key
Set External User ID OneSignal|User Link this device to your own backend user identifier. ExternalId
Remove External User ID OneSignal|User Clear the external user ID from this device.
Prompt For Push Permissions OneSignal|Permissions Show the OS push-permission dialog. Required on iOS. No-op on Android.
Set Subscription OneSignal|Subscription Enable or disable push notification delivery for this device. bSubscribed

Blueprint Assignable Events

Bind these in Blueprint via Get OneSignal Manager → Assign Event.

OnNotificationReceived

Fired when a push notification arrives while the app is in the foreground.

  • Notification FOneSignalNotification — the notification data

OnNotificationOpened

Fired when the user taps a push notification to open the app (background/killed state).

  • Action FOneSignalNotificationAction — contains Notification + ActionId

OnPlayerIdReceived

Fired once the OneSignal Player ID becomes available after initialization completes.

  • PlayerId FString — the OneSignal device identifier

Notification Data Structures

FOneSignalNotification

  • Title FString
  • Body FString
  • NotificationId FString
  • LargeIconUrl FString
  • AdditionalData TMap<FString,FString>

FOneSignalNotificationAction

  • Notification FOneSignalNotification
  • ActionId FString — empty = default tap

Getting Started in 4 Steps

1

Install the Plugin

Copy the OneSignalPro folder into your project's Plugins/ directory. Regenerate project files and enable the plugin in Edit → Plugins → Developer Tools → OneSignalPro.

2

Enter Your App ID

Open Edit → Project Settings → Plugins → OneSignal. Paste your OneSignal App ID and enable Auto-Initialize on Startup. Optionally enable debug logs.

3

Bind Events in Blueprint

In your GameMode, PlayerController, or any Blueprint — add Event BeginPlayGet OneSignal Manager → drag off and bind On Notification Received and On Notification Opened.

4

iOS Only: Request Permission

On iOS you must prompt the user before notifications can be delivered. Call Prompt For Push Permissions once (e.g. on first launch or after a tutorial). On Android this is automatic.

C++ Usage (Optional)

Access the subsystem from C++ the standard UE4 way:

// Get the subsystem (valid after GameInstance starts)
UOneSignalManager* Manager = UGameInstance::GetSubsystem<UOneSignalManager>();

if (Manager && Manager->IsInitialized())
{
    // Tag the device
    Manager->SendTag(TEXT("level"), TEXT("5"));

    // Link to your backend user
    Manager->SetExternalUserId(TEXT("user-123"));

    // Bind notification event
    Manager->OnNotificationReceived.AddDynamic(this,
        &AMyGameMode::HandlePushNotification);
}
// Or use the static BP Library from C++
UOneSignalProBPLibrary::SendTag(WorldContext, TEXT("vip"), TEXT("true"));
UOneSignalProBPLibrary::SetSubscription(WorldContext, true);

DefaultEngine.ini Configuration

[/Script/OneSignalPro.OneSignalSettings]
AppId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
bEnableDebugLogs=False
bAutoInitialize=True

Requirements & Compatibility

Unreal Engine Version 4.27 or newer
Plugin Version 1.0.0
Plugin Type Runtime · LoadingPhase: PreLoadingScreen
Android SDK OneSignal Android SDK 4.x (Gradle auto-resolved)
iOS SDK OneSignal iOS SDK 3.x (CocoaPod auto-resolved)
Android Min API API 21 (Android 5.0 Lollipop)
iOS Min Version iOS 11.0
Android Permissions (auto-added) WAKE_LOCK · VIBRATE · RECEIVE_BOOT_COMPLETED · ACCESS_NETWORK_STATE
iOS Entitlements (auto-added) Push Notifications · Background Modes (remote-notification)
Engine Source Modification None — drop-in plugin only
OneSignal Account Required (free tier available at onesignal.com)

Plugin Source Layout

Plugins/OneSignalPro/
├── OneSignalPro.uplugin
├── Resources/                         # Icon assets
└── Source/OneSignalPro/
    ├── OneSignalPro.Build.cs            # Module build rules + platform deps
    ├── OneSignalPro_APL.xml             # Android: Gradle, Manifest, Java injection
    ├── OneSignalPro_iOS_APL.xml         # iOS: plist, CocoaPod integration
    ├── Public/
    │   ├── OneSignalTypes.h             # FOneSignalNotification, FOneSignalNotificationAction
    │   ├── IOneSignalPlatform.h         # Abstract interface + native delegates
    │   ├── OneSignalSettings.h          # UDeveloperSettings (AppId, debug, auto-init)
    │   ├── OneSignalManager.h           # UGameInstanceSubsystem (main API)
    │   ├── OneSignalProBPLibrary.h      # Static Blueprint wrapper
    │   └── OneSignalPro.h               # Module class + LogOneSignal category
    └── Private/
        ├── OneSignalManager.cpp         # Platform selection + subsystem lifecycle
        ├── OneSignalPro.cpp             # IMPLEMENT_MODULE
        ├── Android/
        │   └── OneSignalAndroid.cpp     # JNI bridge (C++ ↔ Java ↔ OneSignal SDK)
        ├── IOS/
        │   └── OneSignalIOS.mm          # Objective-C++ wrapper
        └── Default/
            └── OneSignalDefault.h      # Null stub (editor + desktop)

Support & Contact

📖

Documentation

Full setup guide, Blueprint examples, and C++ API reference included in the plugin package.

🐛

Issue Reporting

Submit issues and feature requests via the FAB product page or the creator's support channel.

🌐

Creator

Alpha XP — alpha-xp5-ai.github.io

💬

OneSignal Docs

For OneSignal dashboard setup, segmentation, and REST API: documentation.onesignal.com