In-app notifications in the Genuin SDK

Learn where signed-in members see their Genuin notifications inside your app, and how the unread badge and read state work.

Genuin keeps a notifications list for every member. Each notification Genuin creates for a member lands in that list, whether or not a push notification reaches a device. The SDK's notifications screen shows the list, and a badge on a bell icon counts what the member hasn't read yet.

Push notifications deliver the same notifications to the device. To register tokens and route taps, see Set up push notifications in the Genuin SDK. This page describes the Android and iOS SDKs 2.1.5, which genuin-react-native 3.0.3 wraps.

How a notification reaches the list

The list below follows one notification from the event to the moment it's read:

  1. Something involves a member. For example, another member comments on their post.
  2. Genuin stores one notification for each recipient and marks it unread.
  3. Genuin sends it as a push notification to every device registered for the member. If the member has no registered device, Genuin emails some notification types to a verified email address instead.
  4. The bell's badge shows the new unread count the next time the feed appears on screen.
  5. The notification is marked as read when the member opens it, from the notifications screen or by tapping the push notification.

The events that create notifications, and the screen each one opens, are listed in Notification types.

Where members see notifications

SurfaceShown whenWhat it does
Bell icon with unread badgeA signed-in member views a standard wall of your brand feedOpens the notifications screen. The badge shows the unread count, or "9+" at 10 or more, and is hidden at 0.
Notifications screenThe member taps the bell, or your app opens a /notification linkLists the member's notifications, 20 at a time as they scroll. Pulling down refreshes the list.
System notificationA push notification arrivesOpens the notification's destination when tapped. See the push notifications guide.

Both the bell and the screen need a signed-in member. Viewers who aren't signed in don't see the bell, because they have no notifications list.

Note: The notifications screen is in the UI module (com.begenuin:ui on Android, GenuinUI on iOS). On Android without it, the bell still shows for signed-in members, but tapping it only displays an "unsupported feature" message.

On the notifications screen

Each row opens the same destination as the push notification for that event, such as the post with its comments open. Tapping a row marks that notification as read.

When the member leaves the screen, the SDK marks every notification in the list as read. On iOS, it also resets the app icon badge to 0.

On Android, a failed video upload adds a row at the top of the screen, with an action to retry the upload.

Notifications that arrive while the app is open

When your app is in the foreground, neither platform shows a Genuin notification on its own. Your app decides what happens:

PlatformWhat arrivesWhat shows
AndroidFCM passes the message to your FirebaseMessagingService.onMessageReceivedA system notification, if you call GenuinSDK.handleForegroundNotifications. The SDK builds it on its own channel, ID 101.
iOSiOS calls your userNotificationCenter(_:willPresent:withCompletionHandler:)A banner, if you return .banner in the presentation options.

Either way, the notification is already in the member's list, and the badge picks it up the next time the feed appears. The code for both platforms is in Set up push notifications in the Genuin SDK.

Open the notifications screen from your app (Optional)

If your app has its own bell or menu item, open the SDK's notifications screen with a link whose path is /notification. Use your white-labelled community domain, and pass the link to the SDK's deep-link handler. A member must be signed in.

On Android, wrap the link in an intent:

NotificationsButton.kt
kotlin
val link = Intent(Intent.ACTION_VIEW, Uri.parse("https://{{YOUR_DOMAIN}}/notification"))
GenuinSDK.handleDeepLink(this, link)

On iOS, check the link and open it from the current view controller:

NotificationsButton.swift
swift
let link = URL(string: "https://{{YOUR_DOMAIN}}/notification")!
if GenuinSDK.shared.willHandleDeepLink(url: link) {
    GenuinSDK.shared.handleDeeplink(viewController: self)
}

handleDeeplink(viewController:) shows a loading indicator, loads your brand's settings, and then presents the notifications screen. For the rest of the deep-link setup, see Handle Genuin deep links in your app.

Limitations

  • No count or list API: The SDK doesn't expose the unread count or the notifications list to your code. A custom bell in your app can't show Genuin's unread badge.
  • Badge refresh: The badge updates when the feed appears and after a member signs in, not while the feed stays on screen.
  • One place for the bell: The bell appears on the standard wall of your brand feed. Carousels, grids, and placements don't show it.
  • Mark all as read on exit: Leaving the notifications screen marks every notification as read, including ones the member scrolled past without opening.
  • iOS app icon badge: Genuin sets the badge to 1 with every push notification. The SDK resets it only when the member leaves the notifications screen or signs out.
  • Flutter: The genuin_sdk 1.0.1 plugin wraps native SDK 1.1.9.x, which this page doesn't describe.

See also

TRUST AND COMPLIANCE

© 2026 Genuin Inc.

Genuin Footer