Skip to main content
Flashduty Android RUM SDK automatically collects multiple metrics and attributes for all RUM events by default. You can also add custom attributes via API to extend the default dataset.

Privacy and Permissions

Flashduty Android RUM SDK collects only the runtime information needed for real user monitoring, error diagnosis, performance analysis, and network request analysis. The SDK itself declares the following Android permissions:
The SDK itself does not declare or require sensitive permissions such as READ_PHONE_STATE, ACCESS_FINE_LOCATION, or ACCESS_COARSE_LOCATION.

Device Identifiers Not Collected

The Android RUM SDK does not read or report the following unique device identifiers:
RUM may generate an anonymous user ID by default to correlate the same anonymous user across sessions. This ID is a randomly generated UUID stored in the app’s local data directory. It is not derived from Android ID, IMEI, OAID, or advertising ID. You can disable anonymous user tracking in the RUM configuration.

System Context Collected

The SDK automatically attaches the following system context to help diagnose performance, crash, and network issues:
The geo-location fields documented below are inferred by the Flashduty backend from the client request IP address. They are not collected from Android system location APIs. The SDK does not call GPS, cell-tower location, or fused location APIs, and it does not require location permissions.

App Startup Metrics

Flashcat automatically collects the following app startup performance metrics:
Startup Type Descriptions:
  • Cold Start - App first launch or launch after process terminated, needs to load all resources and initialize app state
  • Warm Start - App process in memory, but Activity needs to be recreated
  • Hot Start - App and Activity both in memory, only needs to bring Activity to foreground

Views Monitoring

A View represents a unique screen the user sees in the app. Each View creates a new RUM event when it starts, and updates that event throughout the View’s lifecycle.
Views collect information about all resources, actions, errors, and long tasks that occur during their lifecycle.

Auto Tracking Strategies

In Android, Activities and Fragments are considered Views. The SDK provides the following auto tracking strategies:
You can also customize View tracking by manually calling RumMonitor.startView() and RumMonitor.stopView().

Default Attributes

RUM SDK automatically attaches default attributes to all events, helping you understand user devices, network status, and app context.
The following device-related attributes are automatically collected in all RUM events:
The following network-related attributes are automatically collected in all RUM events:
The following OS-related attributes are automatically collected in all RUM events:
Flashcat RUM can infer geographic location information from user’s IP address:
Geo-location information is inferred by Flashcat backend based on client IP address. Precise GPS location is not collected on the Android client, and location permissions are not required.
You can set user information via the setUser() API, which will be attached to all RUM events:
Only the standard user fields above are supported. Other user attributes are not supported. If needed, configure them under context.

Event-Specific Attributes

In addition to default attributes, different types of RUM events collect specific metrics and attributes.
View events include the following specific attributes and performance metrics:
Resource events represent network requests in the app. Collected attributes include:
Error events collect exception and crash information. Error messages and stack traces are automatically included:Network Errors:Network errors contain information about failed HTTP requests and collect the following attributes:
Actions represent user interactions with the app (e.g., clicks, swipes, scrolls).Timing Attributes:Basic Attributes:

Data Storage and Security

Local Storage Mechanism

Before data is uploaded to Flashcat, it is stored in plaintext in the app’s cache directory. Storage Location:
Security Protection:
  • Cache folder is protected by Android app sandbox
  • On most devices, other apps cannot read this data
Security Notes:
  • If mobile device is rooted or Linux kernel is tampered with, stored data may become readable
  • Sensitive data should not be included in RUM events, or should be obfuscated or filtered via EventMapper before sending

Data Upload Mechanism

Flashcat RUM Android SDK uses batch processing to upload events, ensuring data transmission while minimizing impact on user experience.

Batch Processing Flow

1

Event Collection

SDK appends uncompressed events to batch files using TLV encoding format (Tag-Length-Value).
2

Batch Optimization

When batch closes:
  • Read batch file and extract events
  • Deduplicate RUM events (remove redundant View events)
  • Build payload specific to each trace
3

Compressed Upload

Use gzip compression to reduce network traffic and upload time.

Upload Triggers

Batches are uploaded when any of the following occurs:

Upload Strategy

Smart Upload Mechanism:
  • Network Optimization - Prefer WiFi upload, mobile network also supported
  • Battery Management - Ensures not to excessively drain device battery
  • Failure Retry - Batches are retained locally on upload failure until successfully sent
  • Data Compression - Uses gzip compression to reduce network traffic

Direct Boot Mode Support

If your app supports Direct Boot mode (launching before device unlock), note:
Data captured before device unlock will not be recorded because credential-encrypted storage is not yet available.
Flashcat SDK will start collecting data after device unlock. If you need to collect data in Direct Boot mode, ensure you use device-encrypted storage instead of credential-encrypted storage.

SDK Integration

Learn how to integrate the Android SDK

Advanced Configuration

Configure custom attributes, sampling, and event filtering

Insights

View and analyze collected RUM data