Introduction
Lerix delivers push notifications on Android using Firebase Cloud Messaging (FCM) — but unlike a typical FCM integration, you don’t add agoogle-services.json file or the Google Services Gradle plugin to your app. The SDK registers your device against Lerix’s own Firebase project internally, using this Lerix project’s Sender ID (fetched from the backend automatically). After you complete the Android installation, follow the steps below to enable push delivery.
Make sure you have initialized the SDK with
Lerix.initialize() before configuring push notifications.Dashboard configuration
For the backend to actually send to your devices, it needs to authenticate as your own Firebase project. This is the only Firebase-related step required:- Create or open your app in the Firebase Console.
- Go to Project Settings → Service Accounts → Generate new private key.
- Upload the downloaded JSON file to the Lerix dashboard, under Notifications → Settings.
Manifest permissions and components
Nothing to add here — the SDK’s own manifest already declares theINTERNET and POST_NOTIFICATIONS permissions, its Firebase Messaging service, and its notification-tap receiver. Android’s manifest merger folds all of it into your app automatically; there’s no service, receiver, or permission for you to declare yourself.
Request permission and register
requestPermissions() is a suspend function — call it from a coroutine scope (e.g. lifecycleScope.launch). On Android 13+ it requests the runtime POST_NOTIFICATIONS permission and, once granted, fetches and registers the FCM token; on older Android versions there’s no runtime permission to request, so it registers immediately.
Register setOnNotificationTapped somewhere with access to your navigation, since a tap almost always means routing to a specific screen based on payload.metadata rather than just logging it.
A tap is delivered reliably even when it’s what launched the app from a
fully terminated state — call
setOnNotificationTapped as soon as your
launcher Activity starts, and any tap that happened before your app
finished starting up is replayed automatically once the callback is
registered. Use Lerix.notifications.getInitialNotificationTap() if you
need to check for one synchronously instead.The notification payload
setOnNotificationReceived and setOnNotificationTapped both receive a LerixNotificationPayload:
Device identifiers
Three different methods return three different things — use the right one for what you’re doing:null until notification permission is granted and registration completes.
Sending a custom sound
Setsound when sending a notification — from the dashboard’s Send notification tab, or the REST API’s sound parameter — to play a bundled sound file instead of the device default.
- The file must already ship inside your app under
res/raw/— Lerix only passes the filename through, it never hosts or uploads sound files. - Pass the filename without its extension, e.g.
notifforres/raw/notif.mp3. Supported formats:.wav,.mp3,.ogg.
A sound is locked in the first time it’s used on a given device — Android
fixes a notification channel’s sound at creation and never lets it change
afterward. Sending a different
sound value later creates a new channel
rather than updating the old one; that’s expected Android behavior, not a
bug.Sending metadata
Attach arbitrary custom data withmetadata (a JSON object) when sending — from the dashboard’s Send notification tab, or the REST API’s metadata parameter. It’s delivered back to the device inside payload.metadata:
Sending an image
SetimageUrl when sending a notification — from the dashboard’s Send notification tab, or the REST API’s imageUrl parameter — to show a rich image in the notification. This works automatically on Android, with no extra setup: the SDK’s bundled messaging service downloads the image and renders it as a BigPictureStyle notification.
The image is also available in Kotlin as payload.imageUrl (in setOnNotificationReceived/setOnNotificationTapped) if you want to show it in a custom in-app banner, in addition to the OS rendering it natively.
Target a user on every device
If your product also ships on other platforms (web, mobile or desktop), add them to the same project and link each install to your own user ID after login. Your backend can then send toexternalUserIds and reach that person
on every device in one request.
Topics
Instead of targeting specific device tokens, a device can subscribe to a named topic — send one notification to the topic and every subscriber receives it. A topic doesn’t need to be created ahead of time; it’s created automatically the first time any device subscribes to it. You can also view, create, and delete topics from the Notifications → Topics tab in the dashboard.sendByTopic: true.