Overview
Unlike iOS, Android currently does not offer a native Live Activities system. However, similar behavior can be achieved using standard notifications, including persistent (ongoing) notifications and silent pushes.
With our SDK, you can start, update, and end a Live Activity-like experience on Android by sending push notifications that reflect the current state of an event (e.g., delivery progress, workout status, or timers). These notifications can remain fixed in the status bar, update dynamically, or disappear when the activity ends.
We support both:
- Visible notifications: Useful for ongoing user-facing events.
- Silent pushes: Ideal for background updates without interrupting the user.
This approach allows full flexibility:
You can control layout, content, priority, actions, or custom sounds—just like with any other Android notification.
Our SDK handles:
- Device registration
- Push reception (visible or silent)
- Dynamic notification management (create/update/cancel)
Live Activities on Android are powered entirely by push logic and custom notification handling—giving you full control and compatibility across Android versions.
Limitations
- Bulk message delivery is supported on devices running Android 5.0 (API 21) and above.
- Currently, Live Activities on Android are a custom implementation via the SDK, not a native feature like on iOS.
Documentation
https://developer.android.com/develop/ui/views/notifications
Integration
Log In / Log Out with an externalCode
Before using Live Activities, the device must be registered with your backend using an external identifier:
var indigitall = new MIndigitall();
// Log In
indigitall.LiveActivityLogIn(
"yourExternalCode",
onSuccess: device =>
{
Console.WriteLine($"Device registered: {device.DeviceId}");
},
onError: (code, message) =>
{
Console.WriteLine($"Login error [{code}]: {message}");
}
);
// Log Out
indigitall.LiveActivityLogOut(
onSuccess: device =>
{
Console.WriteLine($"Device logged out: {device.DeviceId}");
},
onError: (code, message) =>
{
Console.WriteLine($"Logout error [{code}]: {message}");
}
);
List Active Live Activities
You can retrieve the list of active Live Activities associated with the device:
indigitall.GetListLiveActivities(
onSuccess: liveActivities =>
{
foreach (var activity in liveActivities)
{
Console.WriteLine($"ID: {activity.LiveActivityId}, Topic: {activity.AndroidTopicId}");
}
},
onError: (code, message) =>
{
Console.WriteLine($"Error fetching live activities [{code}]: {message}");
}
);
Manage Topics (Subscribe / Unsubscribe / List)
Each Live Activity is identified by a unique topic. Use these methods to control which ones the device is subscribed to.
List topics
indigitall.LiveActivityTopicsList(
onSuccess: topics =>
{
Console.WriteLine("Subscribed topics: " + string.Join(", ", topics));
},
onError: (code, message) =>
{
Console.WriteLine($"Error listing topics [{code}]: {message}");
}
);
Subscribe to Topics
string[] topicsToSubscribe = { "order_123", "match_live", "flight_abc" };
indigitall.LiveActivityTopicsSubscribe(
topicsToSubscribe,
onSuccess: topics =>
{
Console.WriteLine("Successfully subscribed: " + string.Join(", ", topics));
},
onError: (code, message) =>
{
Console.WriteLine($"Subscribe error [{code}]: {message}");
}
);
Unsubscribe from Topics
string[] topicsToUnsubscribe = { "order_123" };
indigitall.LiveActivityTopicsUnsubscribe(
topicsToUnsubscribe,
onSuccess: topics =>
{
Console.WriteLine("Successfully unsubscribed: " + string.Join(", ", topics));
},
onError: (code, message) =>
{
Console.WriteLine($"Unsubscribe error [{code}]: {message}");
}
);
Push Notification Behavior
Once subscribed, the server can send:
- Visible push: Appears as a fixed notification (e.g., "Your delivery is 5 minutes away").
- Silent push: Triggers background processing or data updates without interrupting the user.
You have full control of:
- Notification layout
- Priority and sound
- Persistence (ongoing)
- Auto-dismiss logic
Notes
- Topics allow a 1:1 mapping with live events.
- This approach is compatible with all modern Android versions.
- Make sure to handle push reception in your FirebaseMessagingService.