284 lines
9.6 KiB
Markdown
284 lines
9.6 KiB
Markdown
# Google Play Data Safety Form — Kordant Android
|
|
|
|
> **Last updated:** 2026-06-01
|
|
> **Package:** `com.kordant.android`
|
|
> **Instructions:** Use this document to fill out the Play Console Data Safety section at
|
|
> **Play Console → Your app → App content → Data safety**
|
|
|
|
---
|
|
|
|
## Section 1: Data Collection & Sharing
|
|
|
|
### Q1: Does your app collect or share any of the required user data types?
|
|
|
|
**Answer:** ✅ Yes
|
|
|
|
### Q2: Is all of the user data collected by your app encrypted in transit?
|
|
|
|
**Answer:** ✅ Yes
|
|
|
|
All API communication uses TLS 1.2+ enforced via `network_security_config.xml`.
|
|
Clear text traffic is blocked at the platform level.
|
|
|
|
### Q3: Do you provide a way for users to request that their data is deleted?
|
|
|
|
**Answer:** ✅ Yes
|
|
|
|
Users can delete their data via:
|
|
1. **In-app:** Settings → Delete Account (calls backend API + clears all local data)
|
|
2. **Email:** privacy@kordant.com with data deletion request
|
|
3. **Backend:** Account deletion endpoint (`/api/trpc/user.delete`)
|
|
4. **Local effect:** `clearAllData()` on EncryptedSharedPreferences + DataStore + CacheManager
|
|
|
|
### Q4: Has your app been independently reviewed against a global security standard?
|
|
|
|
**Answer:** ⚠️ No (planned before production launch)
|
|
|
|
External security audit by a third party is planned but not yet completed.
|
|
|
|
---
|
|
|
|
## Section 2: Data Type Declarations
|
|
|
|
### 2.1 Location
|
|
|
|
**Do you collect precise or approximate location?**
|
|
**Answer:** ❌ No
|
|
|
|
Evidence: No `ACCESS_FINE_LOCATION` or `ACCESS_COARSE_LOCATION` permission in AndroidManifest.xml.
|
|
|
|
---
|
|
|
|
### 2.2 Personal Info
|
|
|
|
**Do you collect any personal info?**
|
|
**Answer:** ✅ Yes
|
|
|
|
| Data Type | Collected | Shared | Ephemeral | Purposes |
|
|
|-----------|-----------|--------|-----------|----------|
|
|
| **Name** | ✅ Yes | ❌ No | ❌ No | App functionality, Personalization, Account management |
|
|
| **Email address** | ✅ Yes | ❌ No | ❌ No | App functionality, Personalization, Account management |
|
|
| **Phone number** | ✅ Yes | ❌ No | ❌ No | App functionality, Personalization |
|
|
| **User IDs** | ✅ Yes | ❌ No | ❌ No | App functionality, Account management |
|
|
| **Address** | ✅ Yes | ❌ No | ❌ No | App functionality (HomeTitle property monitoring) |
|
|
| **Other info (avatar)** | ✅ Yes | ❌ No | ❌ No | Personalization |
|
|
|
|
**Details:**
|
|
- Name, email, and user ID collected at account registration (mandatory)
|
|
- Phone number collected optionally for spam call detection
|
|
- Address collected optionally for property monitoring
|
|
- Stored encrypted in `EncryptedSharedPreferences` and on the backend server
|
|
- Shared only with the app's backend API via TLS-encrypted connections
|
|
|
|
---
|
|
|
|
### 2.3 Financial Info
|
|
|
|
**Do you collect financial info?**
|
|
**Answer:** ❌ No (on-device)
|
|
|
|
Stripe Checkout and billing portal are handled via web views. Payment card data goes directly to Stripe and never touches the Kordant Android app.
|
|
|
|
**Exception:** Subscription tier and billing status are retrieved from the backend API (`/api/trpc/billing.*`), but no raw financial data (credit card numbers, bank accounts) is collected by the app.
|
|
|
|
---
|
|
|
|
### 2.4 Health & Fitness
|
|
|
|
**Do you collect health or fitness data?**
|
|
**Answer:** ❌ No
|
|
|
|
---
|
|
|
|
### 2.5 Messages
|
|
|
|
**Do you collect messages?**
|
|
**Answer:** ❌ No
|
|
|
|
No SMS, MMS, or in-app messaging data is collected.
|
|
|
|
---
|
|
|
|
### 2.6 Photos & Videos
|
|
|
|
**Do you collect photos or videos?**
|
|
**Answer:** ❌ No
|
|
|
|
The app loads images from URLs (avatars, property photos) via Coil image loader, but does not capture or store photos/videos. No `CAMERA` or storage permissions are declared.
|
|
|
|
---
|
|
|
|
### 2.7 Audio Files
|
|
|
|
**Do you collect audio files?**
|
|
**Answer:** ✅ Yes
|
|
|
|
| Data Type | Collected | Shared | Ephemeral | Purposes |
|
|
|-----------|-----------|--------|-----------|----------|
|
|
| **Voice recordings** | ✅ Yes | ❌ No | ❌ No | App functionality (VoicePrint) |
|
|
| **Audio analysis results** | ✅ Yes | ❌ No | ❌ No | App functionality (VoicePrint) |
|
|
|
|
**Details:**
|
|
- Voice recordings are collected as part of the VoicePrint feature for voice-based caller identification
|
|
- User must explicitly enroll and grant `RECORD_AUDIO` permission
|
|
- Recordings are sent to the backend for voice analysis
|
|
- Analysis results are stored for matching incoming calls
|
|
- Not shared with third parties
|
|
- Stored encrypted in transit (TLS) and at rest on the backend
|
|
|
|
---
|
|
|
|
### 2.8 Files & Docs
|
|
|
|
**Do you collect files or documents?**
|
|
**Answer:** ❌ No
|
|
|
|
---
|
|
|
|
### 2.9 Calendar
|
|
|
|
**Do you collect calendar events?**
|
|
**Answer:** ❌ No
|
|
|
|
---
|
|
|
|
### 2.10 Contacts
|
|
|
|
**Do you collect contacts?**
|
|
**Answer:** ❌ No
|
|
|
|
The app does not access the device contacts book. No `READ_CONTACTS` permission.
|
|
|
|
**Note:** Call screening receives incoming phone numbers via the Android telecom system, but does not read the user's contact list.
|
|
|
|
---
|
|
|
|
### 2.11 App Activity
|
|
|
|
**Do you collect app activity data?**
|
|
**Answer:** ✅ Yes
|
|
|
|
| Data Type | Collected | Shared | Ephemeral | Purposes |
|
|
|-----------|-----------|--------|-----------|----------|
|
|
| **App interactions** | ✅ Yes | ❌ No | ❌ No | Analytics, Fraud prevention |
|
|
| **Installed apps (security check)** | ✅ Yes | ❌ No | ✅ Ephemeral | Fraud prevention, Security |
|
|
| **In-app search history** | ✅ Yes | ❌ No | ❌ No | Analytics, Personalization |
|
|
| **Other user-generated content** | ✅ Yes | ❌ No | ❌ No | App functionality |
|
|
|
|
**Details:**
|
|
- App interactions tracked via API calls and analytics (startup timing, feature usage)
|
|
- Installed apps list checked only during root detection (`SecurityChecker.kt`) — checked ephemerally, not stored
|
|
- Watchlist items, property addresses, and exposure reports are user-generated content
|
|
- App activity is used for fraud prevention (root detection) and improving the service
|
|
|
|
---
|
|
|
|
### 2.12 Web Browsing
|
|
|
|
**Do you collect web browsing history?**
|
|
**Answer:** ❌ No
|
|
|
|
---
|
|
|
|
### 2.13 App Info & Performance
|
|
|
|
**Do you collect app info and performance data?**
|
|
**Answer:** ✅ Yes
|
|
|
|
| Data Type | Collected | Shared | Ephemeral | Purposes |
|
|
|-----------|-----------|--------|-----------|----------|
|
|
| **Crash logs** | ✅ Yes | ✅ Yes (Firebase) | ❌ No | Analytics, Fraud prevention |
|
|
| **Performance data** | ✅ Yes | ❌ No | ❌ No | Analytics |
|
|
| **Other diagnostics** | ✅ Yes | ❌ No | ❌ No | Analytics |
|
|
|
|
**Details:**
|
|
- Crash logs are collected via Firebase Crashlytics and sent to Google's Firebase servers
|
|
- Performance data includes app startup timing (`StartupTracker.kt`)
|
|
- Diagnostics include ANR traces and network request timing
|
|
- Crashlytics is enabled for both debug and release builds
|
|
|
|
---
|
|
|
|
### 2.14 Device & Other IDs
|
|
|
|
**Do you collect device IDs?**
|
|
**Answer:** ✅ Yes
|
|
|
|
| Data Type | Collected | Shared | Ephemeral | Purposes |
|
|
|-----------|-----------|--------|-----------|----------|
|
|
| **Device ID / FCM token** | ✅ Yes | ❌ No | ❌ No | Analytics, App functionality |
|
|
|
|
**Details:**
|
|
- FCM device token is collected for push notification delivery
|
|
- A unique request ID is generated for each API call (`X-Request-ID` header)
|
|
- Device platform and app version are sent with every API request
|
|
- No Android Advertising ID or device serial number is collected
|
|
|
|
---
|
|
|
|
## Section 3: Data Sharing Declaration
|
|
|
|
### Do you share user data with third parties?
|
|
|
|
**Answer:** ✅ Yes — Limited sharing
|
|
|
|
| Third Party | Data Shared | Purpose | Type |
|
|
|------------|-------------|---------|------|
|
|
| **Firebase Crashlytics (Google)** | Crash logs, device info, app version | Crash analytics | SDK |
|
|
| **Firebase Cloud Messaging (Google)** | Device token, notification delivery data | Push notifications | SDK |
|
|
| **Google Sign-In (Google)** | OAuth tokens, profile info | Authentication | SDK |
|
|
| **Stripe** | N/A on device (payment processed via web) | Payment processing | Web view |
|
|
|
|
### Do you sell user data?
|
|
|
|
**Answer:** ❌ No
|
|
|
|
The app does not sell user data to any third party.
|
|
|
|
---
|
|
|
|
## Section 4: Security Practices Summary
|
|
|
|
| Practice | Status | Notes |
|
|
|----------|--------|-------|
|
|
| **Encryption in transit** | ✅ TLS 1.2+ | All API traffic; cleartext blocked by `network_security_config.xml` |
|
|
| **Encryption at rest** | ✅ AES-256-GCM | EncryptedSharedPreferences with MasterKey in Android Keystore |
|
|
| **User data deletion** | ✅ Available | In-app account deletion + privacy@kordant.com |
|
|
| **Security review** | ⚠️ Pending | External audit planned before production launch |
|
|
|
|
---
|
|
|
|
## Section 5: Play Console Entry Map
|
|
|
|
Use the following to navigate directly to the right sections:
|
|
|
|
1. **Play Console** → Select app → **App content** → **Data safety**
|
|
2. Click **"Start"** (or **"Manage"** if already started)
|
|
3. Follow the sections above for each question
|
|
4. For "Does your app collect or share any of the required user data types?" → **Answer Yes**
|
|
5. Fill in each data type section as documented above
|
|
6. In **Security practices**, check:
|
|
- [x] Data encrypted in transit (TLS 1.3)
|
|
- [x] Data encrypted at rest (EncryptedSharedPreferences)
|
|
- [x] User can request data deletion
|
|
7. For **Independent security review** → Leave unchecked (pending)
|
|
8. Add **Privacy Policy URL**: `https://kordant.com/privacy`
|
|
|
|
---
|
|
|
|
## Section 6: Validation After Submission
|
|
|
|
After completing the form in Play Console, verify:
|
|
|
|
- [ ] Every question has an answer (no blanks)
|
|
- [ ] Crashlytics data sharing is accurately declared
|
|
- [ ] FCM data collection is accurately declared
|
|
- [ ] Google Sign-In data collection is accurately declared
|
|
- [ ] Voice recording collection is accurately declared
|
|
- [ ] No location data is declared (since not collected)
|
|
- [ ] "Data shared with third parties" accurately reflects Firebase/Google
|
|
- [ ] "Data encrypted in transit" is checked
|
|
- [ ] "User can request data deletion" is checked
|
|
- [ ] Privacy policy URL is linked and accessible
|
|
- [ ] Answers match the data collection audit document
|