Create Free APK

Notifications

AppMint Push - Notify Your Users

Send notifications to everyone who installed your app, straight from AppMint on your own Firebase project - schedule, edit after sending, cancel, deep links

AppMint

1How It Works#

AppMint Push sends notifications to everyone who installed your app, from inside AppMint - send now, schedule, edit after sending, cancel, deep links.

It runs on YOUR OWN Firebase project: your users, your project, no shared limits, and nothing of yours hosted by AppMint. Firebase Cloud Messaging is free with no message limit.

You need two files from that project - google-services.json (for the build) and a service-account key (for sending). The next steps get both. Works with every build mode: website, ZIP, HTML and AI.

AppMint Push and OneSignal are alternatives: turning one on turns the other off.

2Create a Firebase Project#

Go to Firebase Console and click 'Add project' (or open a project you already have). A free Firebase project is enough - no billing needed for notifications.

One project can hold several of your apps.

3Add Your App and Download google-services.json#

In your Firebase project:

  • Click 'Add app' and choose Android
  • Enter the package name EXACTLY as set in the AppMint wizard (e.g. com.yourname.yourapp) - a mismatch means notifications never arrive, and AppMint refuses the build for it
  • Click 'Register app' and download google-services.json
  • You can skip the remaining SDK steps - AppMint handles them

4Turn It On and Upload the File#

In the build wizard's Push Notifications card:

  • Enable 'AppMint Push'
  • Tap 'Upload google-services.json' and pick the file from the previous step

The wizard checks the file contains your package name. Then build your APK as normal - during the build your app is registered for push against your project.

Users just install the app and open it once. On Android 13+ they are asked to allow notifications after the first screen loads.

5Upload Your Service-Account Key (Once)#

AppMint sends through your project, so it needs a key from it - the same file OneSignal asks for.

In Firebase Console:

  • ⚙ Project settings → 'Service accounts' tab
  • Click 'Generate new private key' and confirm - a JSON file downloads

In AppMint: Home > Notifications → pick your app → 'Upload key' → choose that JSON.

AppMint verifies the key with a test send to your project before storing it (encrypted), so a green tick means the next send will really go out. One upload per app; rebuilding the app does not need it again unless you switch Firebase projects.

⚠️ Upload the SERVICE-ACCOUNT key here, not google-services.json - the screen tells you if you mix them up. To revoke access later, delete the key in Firebase Console.

6Send Your First Notification#

In Home > Notifications:

  • Pick your app
  • Write a title (message, image and link are optional)
  • Tap 'Send Notification'

Every phone with your app installed receives it. Use 'Preview' first to see it exactly as users will - including a real notification on your own phone.

7Schedule for Later#

In the compose form, tap the Delivery row and choose 'Schedule for later...', then pick a date and time. The notification goes out automatically at that moment.

Until it fires, you can edit or cancel it from the History list below.

8Fix a Mistake After Sending#

Tap any notification in History:

  • 'Edit & resend' - replaces it IN PLACE on every device with the corrected version
  • 'Cancel' - removes it from every phone where it has not been opened yet
  • 'Delete' - same as cancel, and clears it from your history

⚠️ A notification the user already opened or dismissed cannot be taken back.

9Open a Specific Page#

The optional Link field controls what a tap opens:

  • A full https:// address (great for website apps)
  • An in-app route like #/offers

Your app's code can also read it any time:

const link = window.WebToApk?.getLaunchUrl?.();
window.addEventListener('appmint:deep-link',
  e => goTo(e.detail.url));

10In-App Inbox (Optional)#

Every push is also stored inside the installed app (last 50), so your app can show its own notifications screen with unread badges. This works in EVERY build mode - including website (URL) apps, where you just add these few lines to your own site.

Dismiss is a SWIPE, not a tiny ✕, and it is reversible - pair it with a brief Undo:

const B = window.WebToApk;
const inbox = JSON.parse(B?.getPushInbox?.() ?? "[]");
// [{id,title,body,imageUrl,link,receivedAt,read}]
const unread = inbox.filter(m => !m.read).length;

// live arrival while the app is open
window.addEventListener('appmint:push', e => {
  if (e.detail.type === 'received') showBanner(e.detail.message);
  refreshInbox();   // fires for 'revoked' too
});

B?.markPushRead?.(id);        // "" = mark all read
B?.dismissPushMessage?.(id);  // swipe away
B?.restorePushMessage?.(id);  // ...Undo

11If Nothing Arrives on Your Test Phone#

Almost always a limit on the TEST PHONE, not your app or your users.

Android allows roughly 100 push registrations per phone. Every FRESH install of an app that uses notifications takes one - so installing build after build while testing can use them all up, and that phone then stops receiving for newly installed apps.

Free up slots (this is what actually works):

  • Uninstall test apps you no longer need - Android releases the slot each one was holding
  • Or clear a test app's data: Settings > Apps > [that app] > Storage > Clear data - that releases its slot without uninstalling
  • On an emulator, wiping it resets every slot at once

Restarting the phone does NOT help: these registrations are stored permanently, which is why they survive a reboot. Clearing Google Play Services' cache does not free them either.

Avoid it while testing:

  • Keep ONE package name while you iterate - every different package name takes its own slot
  • Install the new APK OVER the old one instead of uninstalling first - an update keeps the existing registration, a reinstall spends a new one
  • Test on a spare phone or an emulator; wiping an emulator resets its slots instantly
  • Delete test apps you have finished with

Also check the basics: the app was opened at least once after installing, and notifications are allowed for it in Android settings. The app re-subscribes on every launch, so it recovers by itself once slots free up - no rebuild needed.

12Limits and Good Practice#

  • No limit on how many notifications you send - Firebase Cloud Messaging is free
  • Title up to 120 characters; image links must be https://
  • On the free plan a short ad plays before each send
  • Test apps: remove them with the trash icon next to the app selector - this deletes the history and stored key in AppMint only; your Firebase project is untouched, and a rebuild adds the app back
  • Rebuilding with a NEW google-services.json from the SAME project changes nothing: your key stays, existing installs keep receiving
  • ⚠️ Moving the app to a DIFFERENT Firebase project is a clean break. Rebuild with the new google-services.json, upload the new project's key (AppMint drops the old one, since it could never send for the new project) - and know that phones still running the OLD version stop receiving until their users update. Notifications reach a project, and those installs are still listening to the old one
  • Send sparingly: users uninstall apps that spam them

This page is generated from the Integration Guide inside the app itself, so it says exactly what the current build says. Read it as Markdown.

Checked against the shipped guide on 2026-09-09.