OneSignal vs Pushwoosh vs Firebase Cloud Messaging: choosing push for a web-wrapped app
Push notifications are the native feature reviewers notice first and users keep longest. WebViewGold supports OneSignal, Pushwoosh and Firebase Cloud Messaging with a config switch each, plus local notifications that need no service at all. Here is how they differ and which one fits a vibe-coded app.
From $109 one-time per platform, or let our team do it all from $698.
Approval guarantee – or money back within 14 days
No coding needed
One-time payment, free updates
24/7 human support
Made in Germany since 2014 · ISO 27001
9:41
Your app
Your appNow live in your pocket
App Store · Google Play Approved
The comparison
OneSignal
Pushwoosh
Firebase Cloud Messaging
Dashboard
Full campaign dashboard: segments, templates, scheduling, journeys, A/B tests
Marketing-oriented dashboard with segments, tags and automation
Basic campaign composer in the Firebase console; topics and analytics audiences for targeting
Sending from code
REST API, addressed by subscription ID or your external user ID
REST API
Admin SDK from Cloud Functions or your server, by token or topic
Switch in Config.swift
oneSignalID + kPushEnabled
kPushwooshEnable + Pushwoosh_APPID in Info.plist
kFirebasePushEnabled + GoogleService-Info.plist
Switch in Config.java
PUSH_ENABLED + IDs in build.gradle
PUSHWOOSH_ENABLED + IDs in strings.xml and AndroidManifest.xml
FIREBASE_PUSH_ENABLED + google-services.json
Per-user ID in the web app
getonesignalplayerid:// → onesignalplayerid, or ?onesignal_push_id= on the first request via kPushEnhanceUrl
getpushwooshid:// → pushwooshplayerid, or ?pushwoosh_id= via kPushwooshEnhanceUrl
getfirebaseplayerid:// → firebaseplayerid, or ?firebase_push_id= via kFirebaseEnhanceUrl; optional firebaseTopic
Deep link on tap
Additional data field "url" (not the Launch URL field)
Custom data in the message
Custom data key "url"
Apple certificates
Upload an APNs key (.p8) in the OneSignal dashboard
Certificate or key import in Pushwoosh
APNs key uploaded to the Firebase project
Cost
Free plan with limits, paid plans above
Free trial; WebViewGold users get two free months
Free to send; you pay only for your own server or Cloud Functions
Best for
Marketing teams that want segments and templates without code
Teams that want marketing automation and multichannel messaging
Apps already on Firebase that send programmatically
Setup effort in WebViewGold
OneSignal: about 30 minutes
Create the OneSignal app, add the APNs key for iOS and the Firebase credentials for Android, paste the App ID into oneSignalID (Config.swift) and the Android build configuration, switch the enable options on, rebuild. The iOS push docs and Android push docs have screenshots.
Pushwoosh: about 30 minutes
Create the Pushwoosh application, import the iOS certificate or key and the Android credentials, set the application ID in Info.plist and in strings.xml and AndroidManifest.xml, enable the switches, rebuild.
Firebase: 30 to 45 minutes
Register the bundle ID and package name in your Firebase project, download the two config files into the projects, upload an APNs key under Cloud Messaging, enable the switches. Firebase registrations are permanent, so settle the bundle ID first.
Local push: zero setup
Scheduled from JavaScript while the app is open, delivered later by the device. No account, no keys, no server.
Per-user targeting: store the subscription ID
The dashboards send to everyone or to segments. To notify one specific user ("your order shipped"), save the device's subscription ID next to the user in your database. The same pattern works for all three providers; shown here for OneSignal.
javascript
const inApp = /WebViewGoldApp/.test(navigator.userAgent);
async function savePushId(userId) {
if (!inApp) return;
window.location.href = "getonesignalplayerid://"; // WebViewGold sets window.onesignalplayerid
await new Promise(r => setTimeout(r, 800));
const pushId = window.onesignalplayerid; // Firebase: window.firebaseplayerid, Pushwoosh: window.pushwooshplayerid
if (!pushId) return;
await fetch("/api/me/push-id", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ userId, pushId }) });
}
// Then send from your backend: OneSignal REST API with include_subscription_ids: [pushId]
// Tip: set autoInjectVariable (iOS) / AUTO_INJECT_VARIABLES (Android) to true and the variables exist without the call.
I am very happy I bought this app! Extremely easy and great documentation. Was in contact with the customer service, they replied very quickly and very friendly. They solved my question within a day. 10/10 would recommend.
WebViewGold can schedule a notification from JavaScript that fires after the app is closed: sendlocalpushmsg://push.send?s=SECONDS=msg!MESSAGE&!#TITLE&!#URL, where the URL opens when the user taps the notification, and sendlocalpushmsg://push.send.cancel clears everything scheduled. It covers reminders ("your session starts in 2 hours"), streak nudges and abandoned carts without a backend. Its limits are the flip side: nothing can be sent from your server, there is no segmentation and no delivery statistics. Many apps start with local push for reminders and add a provider when they need campaigns.
Independently of the provider, control when the permission dialog appears. Set askforpushpermissionatfirstrun to false in Config.swift and trigger registerpush:// from your web app after sign-up or when the user enables a notification setting. Permission requested at a moment of value is granted far more often than at a cold first launch.
Which one to choose
A decision in four questions.
Do you only need reminders scheduled by the app itself?
Local push. Add a provider later if campaigns become relevant.
Is your backend Firebase (Firebase Studio, Softgen, Databutton)?
FCM. You already have Cloud Functions and the Admin SDK; one more config file and you are done. Add OneSignal only if non-developers need a campaign dashboard.
Is your backend Supabase or a custom API and someone will send campaigns by hand?
OneSignal or Pushwoosh. Both give marketers a dashboard, and an edge function can call their REST APIs for transactional messages.
Do you want marketing automation across push, email and in-app messages?
Pushwoosh is built around that; OneSignal covers it as well. Compare the current plans on their websites; prices and limits change.
Push mistakes that cost reviews and users
Asking for permission on first launch before the user has seen any value. Ask after sign-up or when a notification setting is switched on.
Sending marketing push to users who only agreed to transactional notifications. Apple Guideline 4.5.4 requires consent for marketing push and an opt-out.
Putting the deep link in OneSignal's Launch URL field: WebViewGold expects it in the additional data field "url".
Renaming the bundle ID without updating the OneSignalNotificationServiceExtension target; its identifier must keep the main bundle ID as prefix.
Never sending anything in the first weeks. Users who granted permission expect a reason.
Forgetting Android 13 and newer: the system asks for notification permission at runtime; the timing advice applies there too.
Frequently asked questions
Can I switch providers later?
Yes, with a store update. Existing users are registered with the new provider when they open the updated app; segments and history in the old dashboard do not transfer.
Do I need a Mac to set up push?
No. The APNs key is created in the Apple Developer portal in the browser, and the Cloud Builder or Xcode handle the signing. OneSignal, Pushwoosh and Firebase all accept the .p8 key.
Does push work in TestFlight and Play testing tracks?
Yes. Test builds receive notifications like production builds, which is the right moment to test permission timing and deep links.
Can I send push from Lovable or Supabase?
From a Supabase edge function or any server: call the provider's REST API with the subscription IDs you stored per user.
Is this the same as web push in a PWA?
No. Web push on iOS only works for sites added to the Home Screen and has its own limits. Native push through WebViewGold reaches every install of the store app.
Three ways to get your app into the stores
Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.
Do it yourself
$109 per platform, one-time
The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.
No Mac, no Xcode, no Android Studio: configure in the browser, we build both apps in the cloud and hand them to App Store Connect and the Play Console.
Send us your URL and icon. Our team configures, builds and delivers your app within 72 hours, white-label, with source projects. Both platforms for $1,158.