1️⃣ System & Device Info — All accessible without permissions; safe for analytics/debug. |
Device model | "device_model": "Pixel 7" | Build.MODEL | Identifies device model (e.g., "Pixel 7"). |
Manufacturer | "manufacturer": "Google" | Build.MANUFACTURER | Device manufacturer (e.g., "Google"). |
Android version | "android_version": "14" | Build.VERSION.RELEASE | OS version (e.g., "14"). |
SDK version | "sdk_int": 34 | Build.VERSION.SDK_INT | API level (e.g., 34 for Android 14). |
Device name | "device_name": "walleye" | Build.DEVICE | Internal device codename (e.g., "walleye" for Pixel). |
Brand | "brand": "Samsung" | Build.BRAND | Device brand (e.g., "Samsung"). |
Hardware | "hardware": "exynos9820" | Build.HARDWARE | Hardware identifier (e.g., "exynos9820"). |
CPU architecture | "cpu_abi": ["arm64-v8a"] | Build.SUPPORTED_ABIS | Array of supported ABIs (e.g., ["arm64-v8a", "armeabi-v7a"]). |
System language | "locale": "en-US" | Locale.getDefault().toString() | Device language and region (e.g., "en-US"). |
Timezone | "timezone": "Europe/Paris" | TimeZone.getDefault().getID() | Device timezone (e.g., "Europe/Paris"). |
2️⃣ Network Info (Basic) — Limited network data without ACCESS_NETWORK_STATE. |
Approx. connection type (WebView) | "network_type": "4g" | navigator.connection.type (WebView JS) | Requires WebView; returns "4g", "wifi", etc. |
Public IP | "ip_address": "logged_server_side" | Backend logging | Client can’t reliably get public IP; log server-side. |
Proxy info | "proxy": "none" | System.getProperty("http.proxyHost") | Rarely useful; returns proxy host or "none". |
3️⃣ App Info — App-specific, always accessible. |
App version | "app_version": "1.0.0" | PackageManager.getPackageInfo().versionName | Version name from build.gradle. |
Version code | "version_code": 1 | PackageManager.getPackageInfo().versionCode | Version code from build.gradle. |
Package name | "package_name": "com.example.myapp" | context.packageName | Unique app ID (e.g., "com.example.myapp"). |
First launch flag | "first_launch": true | SharedPreferences | Track first launch; persist in SharedPreferences. |
Local UUID | "device_uuid": "generated-uuid" | UUID.randomUUID() + SharedPreferences | Generate & persist unique device ID. |
4️⃣ Usage Data (Basic Analytics) — App-specific; no permission needed. |
Current date/time | "timestamp": "2025-07-05T23:03:00Z" | System.currentTimeMillis() + SimpleDateFormat | UTC timestamp (ISO 8601). |
Session duration | "session_duration": 145 | App logic | Time in ms or sec; use lifecycle tracking. |
Screen/page views | "screen_view": "Home" | App logic | Track screen or Activity name. |
Clicks/taps | "event": "button_clicked" | App logic | Log user interactions. |
JS errors | "js_error": "TypeError at script.js:10" | window.onerror (WebView JS) | Capture JS errors; requires `window.onerror`. |
5️⃣ Local Storage (WebView) — Sandboxed, no permissions needed. |
Local storage | "local_storage": {"key": "value"} | localStorage (WebView JS) | Key-value pairs in WebView. |
Cookies | "cookies": {"session_id": "abc123"} | document.cookie (WebView JS) | Domain cookies via WebView JS. |
6️⃣ Device Capabilities — Hardware/software, no permissions needed. |
Screen orientation | "orientation": "portrait" | context.resources.configuration.orientation | "portrait" or "landscape". |
Screen width | "screen_width": 1080 | context.resources.displayMetrics.widthPixels | Width in pixels. |
Screen height | "screen_height": 1920 | context.resources.displayMetrics.heightPixels | Height in pixels. |
Screen density | "density": 3.0 | context.resources.displayMetrics.density | Density (e.g., 3.0 for xxxhdpi). |
Dark mode | "dark_mode": true | UI_MODE_NIGHT_MASK | True if dark mode is active. |
Battery level | "battery_level": 87 | BatteryManager.getIntProperty() | Battery % (API 21+). |
❌ Restricted Data — Requires explicit user permission; never bypass. |
Contacts | N/A | READ_CONTACTS | Dangerous permission required. |
SMS | N/A | READ_SMS | Dangerous permission required. |
Phone number / IMEI | N/A | READ_PHONE_STATE | Restricted; permission required. |
Call logs | N/A | READ_CALL_LOG | Dangerous permission required. |
GPS location | N/A | ACCESS_FINE_LOCATION | Dangerous permission required. |
Unique device serial | N/A | Restricted since API 26+ | Inaccessible without permission. |