Chính sách quyền riêng tư
1. Ứng dụng làm gì
DMH Analys là bảng điều khiển nội bộ của một studio game và ứng dụng di động. Ứng dụng tổng hợp số liệu chi phí quảng cáo (Google Ads, Meta Ads), doanh thu và lượt cài (AppsFlyer), doanh thu quảng cáo (AdMob) và chỉ số chất lượng app (Google Play Vitals) để theo dõi hiệu quả. Ứng dụng chỉ xử lý số liệu của các tài khoản quảng cáo và phát hành do đơn vị vận hành sở hữu. Ứng dụng không thu thập dữ liệu cá nhân của người dùng cuối của các app được theo dõi.
2. Dữ liệu truy cập từ Google
- Google Ads (phạm vi
https://www.googleapis.com/auth/adwords): chi phí, lượt hiển thị, lượt nhấp, lượt cài đặt, chuyển đổi, tên chiến dịch, nhóm quảng cáo và quảng cáo, quốc gia, tên và mã tài khoản quảng cáo. Ứng dụng chỉ đọc dữ liệu, không thay đổi chiến dịch, ngân sách hay cài đặt. - AdMob (phạm vi
https://www.googleapis.com/auth/admob.readonly): tài khoản publisher, ứng dụng, định dạng quảng cáo, quốc gia, nguồn hiển thị (mediation) và doanh thu, lượt hiển thị theo ngày. - Google Play Vitals: tỷ lệ crash và ANR theo từng ứng dụng, đọc qua Play Developer Reporting API bằng tài khoản dịch vụ chỉ đọc.
3. Dữ liệu từ nền tảng khác
- AppsFlyer (Pull API, token do đơn vị vận hành cấp): số lượt cài, doanh thu, sự kiện dùng thử và trả phí theo ứng dụng, quốc gia và nguồn. Đây là dữ liệu tổng hợp, không có thông tin cá nhân của người dùng cuối.
- Meta Ads (access token quyền đọc quảng cáo, do đơn vị vận hành cấp): chi phí, lượt hiển thị, lượt nhấp và lượt cài theo tài khoản quảng cáo. Ứng dụng chỉ đọc.
- Tỉ giá: ứng dụng tải tỉ giá hằng ngày từ exchangerate-api.com. Yêu cầu này chỉ lấy tỉ giá, không gửi dữ liệu của bạn.
4. Mục đích sử dụng
- Hiển thị số liệu, tính chỉ số (chi phí mỗi lượt cài, ROAS, doanh thu) và cảnh báo bất thường.
- Báo cáo hằng ngày qua Telegram (tuỳ chọn): tóm tắt số liệu, có thể kèm tên chiến dịch. Không kèm khoá truy cập hay token.
- Phân tích bằng AI (tuỳ chọn, khi đơn vị vận hành cấu hình khoá Gemini): số liệu tổng hợp, tên chiến dịch và kênh (tối đa 8 chiến dịch đầu của mỗi kênh), tối đa 8 quốc gia đầu, chỉ số chất lượng app và câu hỏi bạn nhập vào ô phân tích (nếu có) được gửi tới Google Gemini API. Khoá truy cập và token không bao giờ được gửi.
5. Chia sẻ dữ liệu
Chúng tôi không bán dữ liệu, không dùng dữ liệu để hiển thị quảng cáo, và không chia sẻ với bên thứ ba ngoài các dịch vụ cần để vận hành: hạ tầng máy chủ (Vercel), cơ sở dữ liệu (Supabase), Google Gemini API (khi bật phân tích AI), Telegram (khi bật báo cáo hằng ngày) và exchangerate-api.com (chỉ nhận yêu cầu lấy tỉ giá).
6. Lưu trữ và thời hạn
- Máy chủ: refresh token và khoá API nằm trong biến môi trường hoặc cấu hình của máy chủ. Mỗi đăng nhập Google được lưu thành một profile gồm email tài khoản và refresh token đã mã hoá (AES-256-GCM), trong bảng Supabase do đơn vị vận hành quản lý hoặc tệp mã hoá trên máy chạy cục bộ. Tài khoản đăng nhập ứng dụng (email, vai trò) và nhật ký truy cập (không có mật khẩu hay token) cũng lưu trong cơ sở dữ liệu Supabase của đơn vị vận hành. Cài đặt do owner nhập (tỉ giá, tên package, mã khách hàng, mã publisher) được lưu trong Supabase. Developer token, khoá API của AppsFlyer và Meta, và các token khác nhập trong Cài đặt được mã hoá AES-256-GCM trước khi lưu. Khoá Gemini không lưu trên máy chủ. Phiên đăng nhập nằm trong cookie httpOnly trên trình duyệt của bạn. Chúng không được đưa vào mã nguồn công khai và không gửi tới trình duyệt.
- Bản sao dữ liệu Google Ads trên máy chủ (nếu bật): giữ tối đa 3 phiên bản gần nhất cho mỗi tài khoản. Bản cũ hơn 7 ngày không được dùng làm dự phòng khi Google giới hạn truy cập.
- Trình duyệt của bạn: lịch sử số liệu lưu trong IndexedDB (tối đa 20 bản cho mỗi truy vấn). Khoá Gemini, mã developer token, mã khách hàng và mã publisher bạn nhập trong Cài đặt được lưu trong localStorage. Mật khẩu truy cập dashboard (nếu có) chỉ nằm trong sessionStorage của phiên trình duyệt, đóng tab là mất. Bạn có thể xoá bằng cách xoá dữ liệu của trang trong trình duyệt.
7. Thu hồi quyền và xoá dữ liệu
- Bạn có thể thu hồi quyền truy cập Google bất cứ lúc nào tại myaccount.google.com/permissions. Khi bạn thu hồi tại đây, token đã lưu trên máy chủ không còn dùng được, nhưng vẫn nằm trong profile cho đến khi bạn xoá profile trong ứng dụng.
- Trong tab tài khoản của ứng dụng, xoá một profile sẽ xoá token đã lưu của profile đó và gửi yêu cầu thu hồi quyền tới Google. Yêu cầu gửi tới Google được thực hiện tốt nhất có thể; nếu cần chắc chắn, hãy kiểm tra tại myaccount.google.com/permissions.
- Token AppsFlyer và Meta có thể thu hồi hoặc đổi tại nền tảng tương ứng. Trong Cài đặt, bạn thay token bằng token mới.
- Yêu cầu xoá dữ liệu còn lại: gửi email tới dungduong2899@gmail.com.
8. Sử dụng dữ liệu API của Google
Việc sử dụng và chuyển tiếp thông tin nhận được từ API của Google tới bất kỳ ứng dụng nào khác của DMH Analys tuân thủ Chính sách Dữ liệu Người dùng API Dịch vụ Google, bao gồm các yêu cầu Sử dụng Hạn chế (Limited Use).
9. Thay đổi chính sách
Khi chính sách thay đổi, chúng tôi cập nhật ngày ở đầu trang.
Privacy Policy
1. What the app does
DMH Analys is an internal dashboard for a game and mobile app studio. It combines advertising cost data (Google Ads, Meta Ads), installs and revenue attribution (AppsFlyer), ad revenue (AdMob) and app quality metrics (Google Play Vitals) to monitor performance. It only processes data from advertising, attribution and publishing accounts owned by the operator. It does not collect personal data of end users of the apps it monitors.
2. Google user data we access
- Google Ads (scope
https://www.googleapis.com/auth/adwords): cost, impressions, clicks, installs, conversions, campaign, ad group and ad names, countries, and advertising account names and IDs. The app only reads this data; it does not change campaigns, budgets or settings. - AdMob (scope
https://www.googleapis.com/auth/admob.readonly): publisher accounts, apps, ad formats, countries, mediation sources, and daily revenue and impressions. - Google Play Vitals: crash and ANR rates per app, read through the Play Developer Reporting API with a read-only service account.
3. Data from other platforms
- AppsFlyer (Pull API, token issued to the operator): installs, revenue, trial and paid events per app, country and source. This is aggregated data and contains no personal data of end users.
- Meta Ads (read-only ads access token issued to the operator): cost, impressions, clicks and installs per ad account. The app only reads this data.
- Exchange rates: the app fetches daily exchange rates from exchangerate-api.com. The request only asks for rates and does not send your data.
4. How we use it
- Display metrics, compute indicators (cost per install, ROAS, revenue) and show alerts.
- Optional daily Telegram summary: a summary of metrics that may include campaign names. It never includes access keys or tokens.
- Optional AI analysis, only when the operator configures a Gemini key: aggregated metrics, campaign and channel names (up to 8 campaigns per channel), up to 8 leading countries, app quality metrics, and the question you type in the analysis box (if any) are sent to the Google Gemini API. Access keys and tokens are never sent.
5. Sharing
We do not sell data, do not use it for advertising, and do not share it with third parties except the services needed to run the app: hosting (Vercel), database (Supabase), the Google Gemini API (when AI analysis is enabled), Telegram (when the daily summary is enabled), and exchangerate-api.com (which only receives requests for exchange rates).
6. Storage and retention
- Server: refresh tokens and API keys are kept in the server's environment variables or configuration. Each Google login is stored as a profile with the account email and an encrypted refresh token (AES-256-GCM), in a Supabase table run by the operator or in an encrypted local file for local runs. Sign-in accounts (email and role) and an access log without passwords or tokens are kept in the operator's Supabase database. Settings the owner enters (exchange rates, package names, customer and publisher IDs) are stored there too. The developer token, the AppsFlyer and Meta tokens, and other tokens entered in Settings are encrypted with AES-256-GCM before they are stored. The Gemini key is not stored on the server. Your sign-in session is kept in httpOnly cookies in your browser. They are not in public source code and are not sent to the browser.
- Local copy of Google Ads data on the server (if enabled): the three most recent versions per account. Copies older than 7 days are not used as a fallback when Google limits access.
- Your browser: dashboard history in IndexedDB (up to 20 versions per query). The Gemini key, developer token, customer ID and publisher ID you enter in Settings are kept in localStorage. The dashboard password (if any) lives only in sessionStorage for the browser session and is lost when the tab closes. Clear them by clearing site data in your browser.
7. Revoking access and deleting data
- You can revoke Google access at any time at myaccount.google.com/permissions. Once you revoke access there, the token stored on the server no longer works, but it stays in the profile until you delete the profile in the app.
- In the app's account tabs, deleting a profile deletes its stored token and sends a revocation request to Google. The request is made on a best-effort basis; to be certain, check myaccount.google.com/permissions.
- AppsFlyer and Meta tokens can be revoked or replaced on their platforms. In Settings, you replace the token with a new one.
- To request deletion of remaining data, email dungduong2899@gmail.com.
8. Google API Services User Data Policy
DMH Analys' use and transfer of information received from Google APIs to any other app will adhere to the Google API Services User Data Policy, including the Limited Use requirements.
9. Changes
When this policy changes, we update the date at the top of the page.