This guide explains how the Flashduty RUM SDK (the “SDK”) processes personal information within your app, and helps you meet China’s Personal Information Protection Law (PIPL), the relevant app personal-information collection regulations, and the privacy requirements of various app stores. It focuses on the SDK’s own processing rules; Flashduty’s service terms and data security commitments as the entrusted processor are covered separately in the Data protection agreement and the RUM Data security doc.
Two key requirements for compliant use
After integrating the SDK, you (the app operator) must complete the following two compliance actions — both are mandatory:① Privacy policy disclosure
Disclose in your app’s privacy policy that the SDK is integrated and what personal information it collects. See Privacy policy disclosure.
② Deferred initialization
Do not initialize the SDK or report any data before the user accepts your privacy policy. See Deferred initialization.
Division of compliance responsibilities
The SDK runs as a third-party component embedded in your app. The responsibility boundary is as follows:| Role | Party | Responsibility |
|---|---|---|
| Personal information processor | You (the app operator) | Disclose and obtain consent for your app’s overall collection and use of personal information, including the integrated SDK |
| Entrusted processor | Beijing Flashcat Cloud Technology Co.,Ltd. (Flashduty) | Process data only within the scope necessary to provide RUM services, never for purposes beyond what is agreed |
How the SDK processes personal information
The following is the factual basis for completing your privacy policy disclosure.Personal information collected
Following the principle of data minimization, the SDK collects only information directly related to implementing crash analysis, performance diagnostics, and user experience monitoring, and does not collect personal information unrelated to these functions. The table below itemizes the information types, fields, purposes, and collection methods. Apart from “app runtime information”, all collection items can be disabled or masked via configuration (see Data handling rules and commitments).| Information type | Specific fields | Purpose | Collection method | Can be disabled |
|---|---|---|---|---|
| Device information | Device model, brand, device name, CPU architecture, screen information | Distinguish crashes and performance across device models | Collected automatically by the SDK | No (base attribute) |
| Operating system information | OS name and version | Distinguish compatibility and fault distribution across OS versions | Collected automatically by the SDK | No (base attribute) |
| Network information | Connectivity status, network interface type (Wi-Fi / cellular / wired network, etc.), uplink/downlink bandwidth, signal strength | Analyze how the network affects loading and request latency | Collected automatically by the SDK | No (base attribute) |
| App runtime information | Package name, version, build number, environment, SDK version | Correlate issues with releases | Collected automatically by the SDK | No (required) |
| Crash and log information | Crash stack traces, error messages, ANR, custom logs | Reconstruct the crash scene and locate defects | Collected on crash/error or manual logging | Yes (disable error tracking) |
| Behavior and performance information | View access paths and dwell time, user actions, resource loading latency, long tasks, launch time | Reconstruct user journeys and analyze bottlenecks | Collected on interaction/navigation | Yes (disable auto tracking or mask) |
| Session identifier | Randomly generated session ID (session.id) | Link events within a single session for traceability | Generated automatically by the SDK | No (already anonymized) |
| Network address | Country/region derived from the report’s source IP | Analyze performance and faults by region | Derived server-side during processing | Yes (disable IP / geolocation) |
Information explicitly not collected
To minimize privacy impact, the SDK does not collect the following, and does not request the related sensitive permissions:- Unique device identifiers: IMEI, IDFA, IDFV, Android ID, MAC address, OAID, etc.
- Precise geolocation (GPS / latitude-longitude).
- Contacts, SMS, call logs, photo albums, microphone, or camera content.
- The list of installed apps.
- SIM carrier name / carrier ID (
simCarrierIdName/simCarrierId), and telephony identifiers such as IMSI or SIM serial number. - Directly identifiable information such as phone numbers or ID numbers (unless you actively pass it in via the API — see the note below).
If you actively pass personally identifiable information to the SDK via
setUserInfo (user ID, name, email) or custom attributes, this information is reported along with events. Make sure such collection is disclosed in your privacy policy and consented to, and avoid passing in sensitive personal information.Device permissions requested
Following the principle of least privilege, the SDK only requests the network permissions necessary for monitoring. It does not request sensitive permissions such as location, camera, microphone, contacts, phone, or storage, and does not present runtime sensitive-permission prompts to the user.| Platform | Permission | Purpose | Required |
|---|---|---|---|
| Android | android.permission.INTERNET | Report monitoring data | Required |
| Android | android.permission.ACCESS_NETWORK_STATE | Read network status for metrics collection and reporting strategy | Required |
| iOS | No additional permission declaration required | Network access uses the system default capability | — |
Data handling rules and commitments
Beyond collecting data on a minimal, as-needed basis, the SDK provides the following data-handling mechanisms and commitments to help you further control the collection scope and reduce privacy risk:Data minimization and de-identification
Data minimization and de-identification
The SDK collects only the information necessary for monitoring. Sessions are identified by a random
session.id and user identity is not tracked by default, anonymizing the data while preserving trend analysis.Controllable collection (disable / sample / mask)
Controllable collection (disable / sample / mask)
You can finely control collection behavior:
- Disable auto tracking: turn off automatic collection of user actions and view visits, keeping only explicit reporting.
- Sampling: reduce collection and reporting via the session sample rate.
- Attribute masking: use
EventMapperto modify or drop fields before events are reported, removing any PII that may have leaked in (such as action names or personal information in URLs). - Action name masking: enable
enablePrivacyForActionNameto replace unnamed action names with a placeholder.
IP and geolocation can be disabled
IP and geolocation can be disabled
You can disable collection of IP address and geolocation (country/city) data in the app’s “user data collection” settings; the change takes effect immediately server-side.
Proxy reporting
Proxy reporting
All RUM events can be forwarded through your own proxy server so end-user devices never communicate with Flashduty directly, letting you centrally control egress traffic.
Withdrawal of consent and data destruction
Withdrawal of consent and data destruction
When the user withdraws consent, the SDK stops serving, or an account is closed, you can switch the consent state to
NOT_GRANTED to stop collection immediately; already-reported data is deleted or anonymized by Flashduty after the agreed retention period expires.Integrator obligations
This section details how to implement the two key requirements.1. Privacy policy disclosure
Make sure the app you develop or operate has a privacy policy that meets regulatory requirements, and be sure to clearly inform end users that your app integrates third-party SDK services. In your privacy policy, you should state the purpose, methods, and scope of this SDK’s collection and use of personal information, and indicate the SDK’s developer/operator name (Beijing Flashcat Cloud Technology Co.,Ltd.) along with a link to its privacy policy. On the app’s login/registration page and on first launch, you should inform the user of the privacy policy in clear, plain language through simple, prominent, and easily accessible means such as a pop-up, a text link, or an attachment, so that the user gives a voluntary and explicit indication of consent on a fully informed basis. Where personal information is provided to a third party, you should also list it separately in the “third-party SDK information sharing list”. We provide the following disclosure text as a reference; you may inform users in text or table form (for the table form, refer directly to Personal information collected above). Please note that the features and the fields required may differ across SDK versions depending on your choices and configuration; therefore, inform users fully and obtain their consent based on this guide and the actual behavior of the SDK as you integrate and use it. The reference text can be used directly — adjust it to match your actual integration:2. Deferred initialization
To meet legal and regulatory requirements, make sure you initialize the SDK only after the user has consented. To prevent the SDK from starting to collect and use personal information before consent, the SDK provides a deferred-initialization API and a compliant initialization approach — see Android SDK integration and iOS SDK integration for detailed instructions. The specific requirements are:-
Authorize first, then initialize: only call the initialization API after the user has read your app’s privacy policy and granted authorization, at an appropriate time per your app’s needs; if the user declines the privacy policy, you must not call the initialization API. When you initialize with the
PENDING/.pendingstate, the call only completes initialization and buffers data locally — it sends no personal information to the server — and reporting starts only after the state is switched to granted. - No permissions, collection, or reporting before consent: do not dynamically request sensitive device permissions involving personal information before the user accepts the privacy policy; do not collect or report personal information before consent (pay special attention to Android ID, OAID, IMEI, MAC address, hardware serial number, and the installed-app list). The SDK does not collect these identifiers by default — see Information explicitly not collected.
| Consent state | SDK behavior | Scenario |
|---|---|---|
Android GRANTED / iOS .granted | Collect and report | The user has consented |
Android NOT_GRANTED / iOS .notGranted | Collect no data | The user declined or withdrew |
Android PENDING / iOS .pending | Collect but defer reporting until the state is switched to granted | Awaiting user confirmation |
The snippets above show only the minimal code needed for deferred initialization. For the full initialization parameters, integration steps, and consent APIs per platform, see the corresponding docs:
Data storage and security
Data collected by the SDK is reported only to the Flashduty server you configure and is used solely to provide monitoring services to you. It is not shared with any other third party and is not used for advertising, user profiling, or cross-app tracking. Throughout the data lifecycle, Flashduty applies the following safeguards:- Transport security: all reported data is transmitted over HTTPS/TLS.
- Storage security: data is stored on compliant servers within mainland China, with encryption, access control, and security auditing.
- Retention and deletion: data is stored for the agreed retention period and deleted or anonymized after expiry.
- Cross-border transfer: no cross-border transfer occurs without your explicit consent or unless otherwise required by laws and regulations.
Compliant integration checklist
Update your privacy policy
Add the SDK’s name, provider, collected information, and purpose to your app’s privacy policy.
Defer initialization
Ensure the SDK is not initialized and no data is reported before the user consents (or use the
PENDING state).Register the third-party SDK list
Register the personal information fields and purposes from this guide in your app’s third-party sharing list / filing materials.
Provide a withdrawal entry
Provide an entry to withdraw consent in your app settings, and call
setTrackingConsent(NOT_GRANTED) upon withdrawal.Contact us
This SDK is provided by Beijing Flashcat Cloud Technology Co.,Ltd. If you have any questions, feedback, or complaints about how this SDK processes personal information, or if you need to exercise your data-subject rights, you can contact us via:Technical Support
Scan to add our WeCom for one-on-one technical support
Business Inquiries
Scan to add our business manager on WeCom
Console Feedback
Sign in to the console and submit feedback in the bottom left corner