Create a new app by clicking New App/Website, or add a platform to an existing app in Settings > Push & In-App. Select the platform(s) you want to configure and click Next: Configure Your Platform.
Click Save & Continue after entering your credentials.
3
Save your App ID and install the SDK
Your App ID is displayed on the final screen. Copy and save it — you need it when initializing the SDK. Select your SDK platform, then follow the setup guide.
In your Flutterflow project, navigate to Custom Code, then click the +Add button and select Action.
Under Action settings on the right-hand toolbar, click Add Dependency and enter the following dependency and click refresh to add it to the action:
dependency
dependencies: onesignal_flutter: ^5.1.2
In the Action Code, under the pre-loaded code add the following, then save and compile your action.Replace YOUR_APP_ID with your OneSignal App ID found in your OneSignal dashboard Settings > Keys & IDs.
If you don’t have access to the OneSignal app, ask your Team Members to invite you.
Flutter
import 'package:onesignal_flutter/onesignal_flutter.dart'; Future onesignal() async { //Remove this method to stop OneSignal Debugging OneSignal.Debug.setLogLevel(OSLogLevel.verbose); OneSignal.initialize("YOUR_APP_ID"); // The promptForPushNotificationsWithUserResponse function will show the iOS or Android push notification prompt. We recommend removing the following code and instead using an In-App Message to prompt for notification permission OneSignal.Notifications.requestPermission(true); }
Next, click on the main.dart file in the left-hand tool bar and click the + icon next to Initial Actions in the right-hand bar and click on the onesignal action that has just been created.
This will add the action to you app and cause the OneSignal SDK to be initialised when the app runs:
Once the APK has downloaded, you can test the app by dragging the APK into an Android emulator to install it. Push capabilities should work immediately and you can send push notifications to the device as soon as you provide push permissions through the native prompt.
Open the Developer Menu and download the project code:
The downloaded project will likely not be ready to launch in iOS. Before setting up the OneSignal specific additions, you will need to make sure that the project is fully built. To do so:
Open up a Terminal window, cd (change directory) to the ios folder of your downloaded project.
In Terminal type flutter build iosand press enter. Wait for the build to complete, this may take some time depending on the size of your project.
Still in Terminal type pod install and press enter. Wait for the pod install to complete.
Open the .xcworkspace file in Xcode located your project’s ios folder.Select the root project > your main app target > Signing & Capabilities.If you do not see Push Notifications enabled, click + Capability and add Push Notifications. Ensure that you enter the correct details for your Team and Bundle Identifier.
Click + Capability again and add Background Modes. Then check Remote notifications.
The OneSignalNotificationServiceExtension allows your iOS application to receive rich notifications with images, buttons, and badges. It’s also required for OneSignal’s confirmed receipt analytics features.In Xcode Select File > New > Target…Select Notification Service Extension then Next.
Enter the product name as OneSignalNotificationServiceExtension and press Finish.
Do not activate the scheme on the dialog that is shown after selecting Finish.Press Cancel on the “Activate scheme” prompt.
Select the OneSignalNotificationServiceExtension target and General settings.Set Minimum Deployments to be the same value as your Main Application Target. This should be iOS 11 or higher.
App Groups allow your app and the OneSignalNotificationServiceExtension to communicate when a notification is received, even if your app is not active. This is required for badges and Confirmed Deliveries.Select your Main App Target > Signing & Capabilities > + Capability > App Groups.
Within App Groups, click the + button.Set the App Groups container to be group.YOUR_BUNDLE_IDENTIFIER.onesignal where YOUR_BUNDLE_IDENTIFIER is the same as your Main Application “Bundle Identifier”.
Press OK and repeat for the OneSignalNotificationServiceExtension Target.Select the OneSignalNotificationServiceExtension Target > Signing & Capabilities > + Capability > App Groups.
Within App Groups, click the + button.Set the App Groups container to be group.YOUR_BUNDLE_IDENTIFIER.onesignal where YOUR_BUNDLE_IDENTIFIER is the same as your Main Application “Bundle Identifier”.DO NOT INCLUDEOneSignalNotificationServiceExtension.
Optional instructions to setup custom App Group Name
This step is only required if you do not want to use the default app group name (which is group.{your_bundle_id}.onesignal).Open your Info.plist file and add a new OneSignal_app_groups_key as a String type.Enter the group name you checked in the last step as it’s value.Make sure to do the same for the Info.plist under the OneSignalNotificationServiceExtension folder.
In the Xcode project navigator, select the OneSignalNotificationServiceExtension folder and open the NotificationService.m or NotificationService.swift file.Replace the whole file’s contents with the following code.
import UserNotificationsimport OneSignalExtensionclass NotificationService: UNNotificationServiceExtension { var contentHandler: ((UNNotificationContent) -> Void)? var receivedRequest: UNNotificationRequest! var bestAttemptContent: UNMutableNotificationContent? override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.receivedRequest = request self.contentHandler = contentHandler self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) if let bestAttemptContent = bestAttemptContent { /* DEBUGGING: Uncomment the 2 lines below to check this extension is executing Note, this extension only runs when mutable-content is set Setting an attachment or action buttons automatically adds this */ // print("Running NotificationServiceExtension") // bestAttemptContent.body = "[Modified] " + bestAttemptContent.body OneSignalExtension.didReceiveNotificationExtensionRequest(self.receivedRequest, with: bestAttemptContent, withContentHandler: self.contentHandler) } } override func serviceExtensionTimeWillExpire() { // Called just before the extension will be terminated by the system. // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { OneSignalExtension.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent) contentHandler(bestAttemptContent) } }}
#import <OneSignalExtension/OneSignalExtension.h>#import "NotificationService.h"@interface NotificationService ()@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);@property (nonatomic, strong) UNNotificationRequest *receivedRequest;@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;@end@implementation NotificationService- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { self.receivedRequest = request; self.contentHandler = contentHandler; self.bestAttemptContent = [request.content mutableCopy]; /* DEBUGGING: Uncomment the 2 lines below and comment out the one above to ensure this extension is executing Note, this extension only runs when mutable-content is set Setting an attachment or action buttons automatically adds this */ // NSLog(@"Running NotificationServiceExtension"); // self.bestAttemptContent.body = [@"[Modified] " stringByAppendingString:self.bestAttemptContent.body]; [OneSignalExtension didReceiveNotificationExtensionRequest:self.receivedRequest withMutableNotificationContent:self.bestAttemptContent withContentHandler:self.contentHandler];}- (void)serviceExtensionTimeWillExpire { // Called just before the extension will be terminated by the system. // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. [OneSignalExtension serviceExtensionTimeWillExpireRequest:self.receivedRequest withMutableNotificationContent:self.bestAttemptContent]; self.contentHandler(self.bestAttemptContent);}@end
This guide helps you verify that your OneSignal SDK integration is working correctly by testing push notifications, subscription registration, and in-app messaging.
If you are testing with an Android emulator, it should start with a cold boot.
The native push permission prompt should appear automatically if you added the requestPermission method during initialization.
2
Check your OneSignal dashboard
Before accepting the prompt, check the OneSignal dashboard:
Go to Audience > Subscriptions.
You should see a new entry with the status “Never Subscribed”.
3
Return to the app and tap Allow on the prompt.
4
Refresh the OneSignal dashboard Subscription's page.
The subscription’s status should now show Subscribed.
You have successfully created a mobile subscription.
Mobile subscriptions are created when users first open your app on a device or if they uninstall and reinstall your app on the same device.
If all setup steps were completed successfully, the test users should receive a notification with an image included:
Images will appear small in the collapsed notification view. Expand the notification to see the full image.
5
Check for confirmed receipt.
In your dashboard, go to Delivery > Sent Messages, then click the message to view stats.You should see the confirmed stat, meaning the device received the push.
You have successfully sent a notification via our API to a segment.
In-app messages let you communicate with users while they are using your app.
1
Close or background your app on the device.
This is because users must meet the in-app audience criteria before a new session starts. In OneSignal, a new session starts when the user opens your app after it has been in the background or closed for at least 30 seconds. For more details, see our guide on how in-app messages are displayed.
2
Create an in-app message.
In your OneSignal dashboard, navigate to Messages > In-App > New In-App.
Find and select the Welcome message.
Set your Audience as the Test Users segment we used previously.
3
Customize the message content if desired.
4
Set Trigger to 'On app open'.
5
Schedule frequency.
Under Schedule > How often do you want to show this message? select Every time trigger conditions are satisfied.
6
Make message live.
Click Make Message Live so it is available to your Test Users each time they open the app.
7
Open the app and see the message.
After the in-app message is live, open your app. You should see it display:
Not seeing the message?
Start a new session
You must close or background the app for at least 30 seconds before reopening. This ensures a new session is started.
If you reinstalled or switched devices, re-add the device to Test Users and confirm it’s part of the Test Users segment.
Having issues?
Follow Getting a Debug Log while reproducing the steps above. This will generate additional logging that you can share with support@onesignal.com and we will help investigate what’s going on.
You have successfully setup the OneSignal SDK and learned important concepts like:
Previously, we demonstrated how to create mobile Subscriptions. Now we’ll expand to identifying Users across all their subscriptions (including push, email, and SMS) using the OneSignal SDK. We’ll cover External IDs, tags, multi-channel subscriptions, privacy, and event tracking to help you unify and engage users across platforms.
Use an External ID to identify users consistently across devices, email addresses, and phone numbers using your backend’s user identifier. This ensures your messaging stays unified across channels and 3rd party systems (especially important for Integrations).Set the External ID with our SDK’s login method each time they are identified by your app.
OneSignal generates unique read-only IDs for subscriptions (Subscription ID) and users (OneSignal ID).As users download your app on different devices, subscribe to your website, and/or provide you email addresses and phone numbers outside of your app, new subscriptions will be created.Setting the External ID via our SDK is highly recommended to identify users across all their subscriptions, regardless of how they are created.
Tags are key-value pairs of string data you can use to store user properties (like username, role, or preferences) and events (like purchase_date, game_level, or user interactions). Tags power advanced Message Personalization and Segmentation allowing for more advanced use cases.Set tags with our SDK addTag and addTags methods as events occur in your app.In this example, the user reached level 6 identifiable by the tag called current_level set to a value of 6.
We can create a segment of users that have a level of between 5 and 10, and use that to send targeted and personalized messages:
Earlier we saw how our SDK creates mobile subscriptions to send push and in-app messages. You can also reach users through emails and SMS channels by creating the corresponding subscriptions.
If the email address and/or phone number already exist in the OneSignal app, the SDK will add it to the existing user, it will not create duplicates.You can view unified users via Audience > Users in the dashboard or with the View user API.
Best practices for multi-channel communication
Obtain explicit consent before adding email or SMS subscriptions.
Explain the benefits of each communication channel to users.
Provide channel preferences so users can select which channels they prefer.
Instead of calling requestPermission() immediately on app open, take a more strategic approach. Use an in-app message to explain the value of push notifications before requesting permission.For best practices and implementation details, see our Prompt for push permissions guide.
Use SDK listeners to react to user actions and state changes.The SDK provides several event listeners for you to hook into. See our SDK reference guide for more details.
Make sure you’ve enabled all key features by reviewing the Mobile push setup guide.For full details on available methods and configuration options, visit the Mobile SDK reference.
Congratulations! You’ve successfully completed the Mobile SDK setup guide.