Chính sách quyền riêng tư — Chơi Mà Học
Cập nhật lần cuối: 04/08/2026
Một ngoại lệ, và nó do bố mẹ tự bật: nếu bố mẹ tạo tài khoản để giữ dữ liệu khi đổi máy, tên bé và tháng/năm sinh sẽ rời khỏi máy — nhưng đã mã hoá bằng chìa khoá sinh từ mật khẩu của bố mẹ, và chìa khoá đó không rời khỏi máy, nên chúng tôi giữ một khối dữ liệu mình không đọc được. Không tạo tài khoản thì không có gì rời khỏi máy.
1. Ai làm ứng dụng này
Chơi Mà Học là ứng dụng học qua chơi dành cho trẻ 2–5 tuổi. Liên hệ: [email protected].
Ứng dụng không đòi tài khoản. Mọi tính năng dùng được đầy đủ mà không cần đăng nhập.
Bố mẹ có thể tự chọn tạo một tài khoản (email + mật khẩu) trong khu vực của bố mẹ, chỉ để giữ lại hồ sơ và cài đặt khi đổi sang máy khác. Nếu tạo tài khoản:
- Chúng tôi lưu địa chỉ email của bố mẹ và một bản băm một chiều của mật khẩu. Email chỉ dùng để đăng nhập; chúng tôi không gửi thư quảng cáo và không chia sẻ cho bên nào.
- Tên và ngày sinh của bé được mã hoá ngay trên máy của bạn trước khi gửi đi, bằng chìa khoá sinh ra từ mật khẩu của bạn. Chìa khoá đó không rời khỏi máy, nên máy chủ của chúng tôi giữ một khối dữ liệu mà chúng tôi không đọc được.
- Vì chúng tôi không có chìa khoá nên không có chức năng khôi phục mật khẩu cho phần dữ liệu đã đồng bộ. Quên mật khẩu là phần đó không mở lại được. Đây là chủ ý: có đường khôi phục nghĩa là có người ngoài bố mẹ mở được dữ liệu của bé.
- Đã đăng nhập thì ứng dụng tự lưu lên máy chủ 5 phút một lần (và một lần nữa khi bố mẹ đóng ứng dụng), chỉ gửi khi có thay đổi. Bố mẹ tắt bằng cách thoát tài khoản; hồ sơ trên máy vẫn còn nguyên.
- Không tạo tài khoản thì không có gì trong mục này áp dụng, và ứng dụng vẫn chạy đầy đủ.
2. Thông tin bố mẹ nhập, lưu trên máy
Những thông tin sau do bố mẹ tự nhập khi thiết lập, và nằm trong bộ nhớ của thiết bị. Chúng chỉ rời khỏi máy khi bố mẹ tự bật đồng bộ ở mục 1, và khi đó thì đã được mã hoá trên máy trước khi gửi:
- Tên gọi của bé — dùng để ứng dụng chào bé bằng tên và để bé tập viết chính tên mình. Không cần tên thật đầy đủ.
- Tháng và năm sinh — dùng để chọn độ khó phù hợp lứa tuổi. Không lưu ngày sinh cụ thể.
- Hình đại diện bé chọn (một biểu tượng cảm xúc).
- Cài đặt của bố mẹ: giới hạn thời gian, mã PIN (đã băm, không lưu dạng thô), ngôn ngữ, giọng đọc.
- Lịch sử chơi: hoạt động nào, bao lâu, nhãn dán đã nhận.
- Nét vẽ và tranh tô màu của bé — không bao giờ rời khỏi máy, kể cả khi bố mẹ đã bật đồng bộ.
Gỡ ứng dụng là toàn bộ những dữ liệu này bị xoá cùng. Trong ứng dụng, khu vực dành cho bố mẹ cũng có nút xoá sạch dữ liệu bất cứ lúc nào.
3. Thông tin gửi lên máy chủ
Ứng dụng có máy chủ riêng của chúng tôi (choimahoc.kubin.vn) để tải nội dung
mới và ghi nhận quyền mua. Đây là danh sách đầy đủ những gì được gửi lên:
| Dữ liệu | Vì sao cần | Giữ bao lâu |
|---|---|---|
| Mã thiết bị ngẫu nhiên (UUID do ứng dụng sinh ra trên máy ở lần mở đầu tiên) | Phân biệt các thiết bị để cấp nội dung và ghi nhận quyền mua. Không phải IDFA, không phải mã nhận dạng nào của Apple. Không liên kết với Apple ID, số điện thoại hay email — chúng tôi không có những thứ đó. Nhưng mã này bền theo máy, nên các bản ghi dưới đây gắn với một thiết bị; xoá ứng dụng rồi cài lại là sinh mã mới. | Đến khi bố mẹ yêu cầu xoá |
| Mã hồ sơ bé ngẫu nhiên + nhóm tuổi (2–3, 3–4, 4–5) | Để bố mẹ xem lại tiến bộ của con khi đổi máy, và để chúng tôi biết bài tập nào chưa phù hợp với lứa tuổi nào. Không gửi tên, không gửi ngày sinh. | 180 ngày |
| Bản ghi hoạt động: loại hoạt động, mã bài tập, nhóm kỹ năng, thời điểm, thời lượng, số câu đúng trên tổng số | Bảng tiến bộ trong khu vực dành cho bố mẹ, và để biết bài nào quá khó hay quá dễ mà chỉnh nội dung. | 180 ngày |
| Mã sản phẩm và mã giao dịch khi bố mẹ mua bản đầy đủ | Để bố mẹ đổi máy hay cài lại vẫn còn quyền đã trả tiền. Không có thông tin thẻ hay thông tin thanh toán nào — xem mục 6. | Đến khi bố mẹ yêu cầu xoá |
| Phiên bản ứng dụng và phiên bản hệ điều hành | Hỗ trợ khi có lỗi. | Đến khi bố mẹ yêu cầu xoá |
| Địa chỉ email của bố mẹ — chỉ khi bố mẹ tạo tài khoản | Để nhận ra bố mẹ khi đăng nhập lại trên máy khác. Không gửi thư quảng cáo, không chia sẻ cho ai. Đây là email của bố mẹ, không phải của bé. | Đến khi bố mẹ yêu cầu xoá tài khoản |
| Bản băm một chiều của mật khẩu bố mẹ — chỉ khi có tài khoản | Để kiểm tra mật khẩu lúc đăng nhập. Không lưu mật khẩu dạng thô. Bản băm này không mở được khối dữ liệu ở dòng dưới: chìa khoá sinh theo một đường khác và không rời khỏi máy của bố mẹ. | Đến khi bố mẹ yêu cầu xoá tài khoản |
| Một khối dữ liệu đã mã hoá chứa hồ sơ các bé (tên gọi, tháng/năm sinh, hình đại diện) và cài đặt của bố mẹ — chỉ khi có tài khoản | Để bố mẹ đổi máy không phải khai lại. Mã hoá trên máy của bố mẹ bằng chìa khoá sinh từ mật khẩu; máy chủ giữ khối dữ liệu này mà không đọc được nội dung. Ứng dụng tự gửi bản mới 5 phút một lần khi có thay đổi. | Đến khi bố mẹ yêu cầu xoá tài khoản |
| Địa chỉ IP của yêu cầu | Chỉ dùng để chống lạm dụng: đếm số yêu cầu trên mỗi IP để chặn script gửi hàng nghìn lượt. Không dùng để định vị, không ghép với bản ghi hoạt động, không dùng cho mục đích nào khác. Mọi kết nối đi qua Cloudflare, nên Cloudflare cũng thấy IP theo vai trò nhà cung cấp hạ tầng. | Tối đa 1 giờ |
Không gửi: ảnh, danh bạ, vị trí, nội dung bé vẽ, giọng nói, hay bất kỳ định danh quảng cáo nào (IDFA). Tên bé và tháng/năm sinh chỉ rời khỏi máy khi bố mẹ tự tạo tài khoản, và khi đó chúng nằm trong khối đã mã hoá ở bảng trên — chúng tôi không đọc được. Không có tài khoản thì chúng không rời khỏi máy. Ứng dụng không yêu cầu quyền truy cập máy ảnh, micrô, vị trí hay thư viện ảnh, và không dùng App Tracking Transparency vì không có gì để theo dõi.
4. Không quảng cáo, không bên thứ ba, không theo dõi
- Không có quảng cáo dưới mọi hình thức.
- Bản ứng dụng không nhúng bộ công cụ nào của bên thứ ba — không Firebase, không Google Analytics, không Facebook SDK, không AppsFlyer, không công cụ báo lỗi nào. Ứng dụng chỉ dùng các khung của chính Apple (SwiftUI, AVFoundation, StoreKit).
- Không chia sẻ, không bán, không trao đổi dữ liệu với bất kỳ ai. Dữ liệu chỉ nằm trên máy chủ của chúng tôi.
- Không theo dõi người dùng qua các ứng dụng hay website khác. Không ghép dữ liệu của ứng dụng với dữ liệu từ nguồn nào khác.
- Chúng tôi có thống kê của riêng mình — dựng từ chính các bản ghi hoạt động ở mục 3, để biết bài tập nào quá khó theo từng nhóm tuổi. Đây là thống kê tổng hợp cho việc soạn nội dung, không phải theo dõi người dùng, và không có công cụ phân tích của bên thứ ba nào tham gia.
5. Đối chiếu với nhãn App Privacy trên App Store
Nhãn “App Privacy” ở trang App Store của ứng dụng khai đúng năm mục sau. Bảng này để bố mẹ và người xét duyệt đối chiếu nhanh với mục 3:
| Hạng mục trên nhãn | Tương ứng với | Mục đích |
|---|---|---|
| Identifiers → Device ID | Mã thiết bị ngẫu nhiên | Vận hành ứng dụng |
| Usage Data → Product Interaction | Bản ghi hoạt động + mã hồ sơ bé và nhóm tuổi | Vận hành ứng dụng và thống kê nội dung |
| Purchases → Purchase History | Mã sản phẩm và mã giao dịch | Vận hành ứng dụng |
| Diagnostics → Other Diagnostic Data | Phiên bản ứng dụng và hệ điều hành | Vận hành ứng dụng |
| Contact Info → Email Address | Email của bố mẹ, chỉ khi bố mẹ tự tạo tài khoản | Vận hành ứng dụng (đăng nhập) |
Cả năm mục đều khai “không dùng để theo dõi” (not used for tracking). Nhãn ghi các mục này “gắn với người dùng” (linked) vì chúng gắn với mã thiết bị bền nói ở mục 3 — theo cách Apple định nghĩa, gắn với thiết bị cũng tính là gắn với người dùng. Nếu bố mẹ không tạo tài khoản thì chúng tôi không có tên, email hay tài khoản nào của bạn; tạo tài khoản rồi thì chúng tôi có email của bố mẹ — và vẫn không có gì đọc được về bé.
6. Mua hàng trong ứng dụng
Ứng dụng có một khoản mua một lần để mở toàn bộ nội dung — không phải thuê bao, không tự động gia hạn. Giao dịch do Apple xử lý hoàn toàn qua App Store; chúng tôi không nhìn thấy và không lưu thông tin thẻ hay thông tin thanh toán. Máy chủ chỉ ghi nhận “thiết bị này đã mở khoá”, kèm mã sản phẩm và mã giao dịch của Apple.
Mọi lối vào việc mua hàng đều nằm sau cổng phụ huynh. Trang bán hàng không bao giờ hiện ra cho bé: nội dung bị khoá chỉ hiện một ổ khoá im lặng, chạm vào thì mở cổng phụ huynh.
Điều khoản sử dụng áp dụng cho khoản mua này là bản chuẩn của Apple: Apple Standard End User License Agreement.
7. Nội dung do bố mẹ kiểm soát
- Khu vực dành cho bố mẹ nằm sau cổng phụ huynh (mã PIN, hoặc câu hỏi cộng trừ viết bằng chữ).
- Bố mẹ đặt giới hạn thời gian mỗi ngày, mỗi lượt chơi, và khung giờ ngủ.
- Trong ứng dụng không có liên kết nào bé chạm được để ra ngoài, không có mạng xã hội, không có tính năng nhắn tin hay chia sẻ. Hai liên kết pháp lý và trang hỗ trợ chỉ đặt trong khu vực của bố mẹ.
- Không có thông báo đẩy, không tự phát nội dung tiếp theo, không chuỗi ngày liên tiếp — ứng dụng không có cơ chế nào để giữ bé ở lại lâu hơn.
8. Trẻ em
Ứng dụng thiết kế cho trẻ dưới 5 tuổi và tuân theo yêu cầu của mục Kids Category trên App Store. Chúng tôi không thu thập thông tin nhận dạng nào của trẻ mà mình đọc được: máy chủ chỉ thấy một mã ngẫu nhiên và một nhóm tuổi, còn tên và tháng/năm sinh thì nằm trên máy — hoặc nằm trong khối đã mã hoá nếu bố mẹ bật đồng bộ, và khối đó chúng tôi không mở được. Mọi ô nhập email và mật khẩu đều nằm sau cổng phụ huynh; không màn hình nào của bé chạm tới chúng. Nếu bố mẹ tin rằng có dữ liệu nào của con mình đã được gửi lên ngoài ý muốn, hãy viết thư tới [email protected] — chúng tôi sẽ xoá và xác nhận lại.
9. Lưu giữ và xoá dữ liệu
- Bản ghi hoạt động và mã hồ sơ bé: tối đa 180 ngày, sau đó máy chủ tự
xoá. Đây là việc máy chủ làm thật, không phải lời hứa suông — mã nguồn thực hiện nằm ở
hàm
purge_expired_events(). - Địa chỉ IP: tối đa 1 giờ.
- Mã thiết bị và bản ghi quyền mua: giữ lại cho tới khi bố mẹ yêu cầu xoá — nếu tự xoá thì bố mẹ đổi máy sẽ mất nội dung đã trả tiền.
- Tài khoản bố mẹ (email, bản băm mật khẩu, khối dữ liệu đã mã hoá): giữ đến khi bố mẹ yêu cầu xoá. Gửi thư từ chính địa chỉ email đã đăng ký là chúng tôi xoá cả tài khoản lẫn khối dữ liệu.
- Muốn xoá sớm hơn hoặc xoá tất cả, gửi thư kèm mã thiết bị (xem trong ứng dụng: Khu vực bố mẹ → Về app & dữ liệu). Chúng tôi xoá và trả lời xác nhận.
10. Thay đổi chính sách
Khi có thay đổi, ngày cập nhật ở đầu trang sẽ đổi theo. Thay đổi làm mở rộng phạm vi dữ liệu thu thập sẽ được thông báo ngay trong ứng dụng trước khi áp dụng.
Privacy Policy — Chơi Mà Học
Last updated: 04/08/2026
One exception, and a parent has to switch it on: if a parent creates an account to carry data to a new device, the child's nickname and birth month do leave the device — but encrypted with a key derived from the parent's password, and that key never leaves the device, so we hold a blob we cannot read. Without an account, nothing leaves the device.
1. Who makes this app
Chơi Mà Học is a learning-through-play app for children aged 2–5. Contact: [email protected]. The app never requires an account — every feature works without signing in.
Parents may optionally create an account (email + password) inside the parent area, solely to carry profiles and settings across to a new device. If you do:
- We store the parent's email address and a one-way hash of the password. The email is used only for signing in; we send no marketing and share it with nobody.
- Your child's name and date of birth are encrypted on your device before they are sent, using a key derived from your password. That key never leaves your device, so our server holds a blob that we cannot read.
- Because we do not hold the key, there is no password recovery for the synced data. Forgetting the password means that data cannot be reopened. This is deliberate: a recovery path would mean someone other than you could open it.
- Once signed in, the app saves to the server every 5 minutes (and once more when you close it), sending only what changed. Signing out turns this off; the profiles stay on the device.
- If you do not create an account, none of this section applies.
2. Entered by a parent, stored on the device
Entered by a parent during setup and held on the device: the child’s nickname, birth month and year, chosen avatar, parent settings (time limits, hashed PIN, language, voice), play history, and anything the child draws or colours. These leave the device only if a parent switches on the sync described in section 1, and then only encrypted on the device first. Drawings and colourings never leave the device at all, even with sync on. Deleting the app deletes all of it; the parent area also has a “delete everything” button.
3. Sent to our server
Our own server (choimahoc.kubin.vn) delivers content updates and records the
In-App Purchase entitlement. This is the complete list of what is sent:
| Data | Why | Retention |
|---|---|---|
| A random device identifier — a UUID generated on the device at first launch | To tell devices apart for content delivery and to record the purchase entitlement. It is not the IDFA and not any Apple identifier, and it is not linked to an Apple ID, phone number or email address — we hold none of those. It is, however, persistent per device, so the records below are tied to a device; deleting and reinstalling the app produces a new identifier. | Until a parent asks us to delete it |
| A random child-profile key plus an age band (2–3, 3–4, 4–5) | So a parent can see their child’s progress after changing device, and so we can see which exercises do not suit which age group. The child’s name and date of birth are never sent. | 180 days |
| Activity records: activity type, activity id, skill area, timestamp, duration, and correct/total answers | The progress screen inside the parent area, and content difficulty tuning. | 180 days |
| Product identifier and transaction identifier for the purchase | So a parent keeps the content they paid for after reinstalling or changing device. No payment or card details — see section 6. | Until a parent asks us to delete it |
| App version and OS version | Support and debugging. | Until a parent asks us to delete it |
| The parent’s email address — only if a parent creates an account | To recognise the parent when they sign in on another device. No marketing, never shared. This is the parent’s email, not a child’s. | Until a parent asks us to delete the account |
| A one-way hash of the parent’s password — only with an account | To verify the password at sign-in; the password itself is never stored. This hash cannot open the blob below: that key is derived separately and never leaves the parent’s device. | Until a parent asks us to delete the account |
| One encrypted blob holding the child profiles (nickname, birth month and year, avatar) and the parent settings — only with an account | So a parent changing device does not have to set everything up again. Encrypted on the parent’s device with a key derived from their password; our server stores the blob without being able to read it. The app sends an updated blob every 5 minutes when something has changed. | Until a parent asks us to delete the account |
| The request’s IP address | Abuse prevention only: counting requests per IP to block scripted floods. Not used for geolocation, never joined to the activity records, not used for anything else. All traffic passes through Cloudflare, which therefore also sees the IP address in its role as our infrastructure provider. | At most 1 hour |
Never sent: photos, contacts, location, drawings, voice or audio, or any advertising identifier (IDFA). A child’s nickname and birth month leave the device only if a parent creates an account, and then only inside the encrypted blob above, which we cannot read. The app requests no camera, microphone, location or photo-library permission, and does not use App Tracking Transparency because there is nothing to track.
4. No advertising, no third parties, no tracking
- No advertising of any kind.
- The build contains no third-party SDKs — no Firebase, no Google Analytics, no Facebook SDK, no AppsFlyer, no crash-reporting SDK. It links only Apple’s own frameworks (SwiftUI, AVFoundation, StoreKit).
- Data is never shared, sold or traded with anyone. It stays on our own server.
- No tracking across other apps or websites, and no joining of this data with data from any other source.
- We do run our own analytics, built from the activity records in section 3, to find out which exercises are too hard for which age group. These are aggregate statistics used to author content — not user tracking — and no third-party analytics service is involved.
5. How this maps to our App Store privacy label
| Label entry | Corresponds to | Purpose |
|---|---|---|
| Identifiers → Device ID | The random device identifier | App Functionality |
| Usage Data → Product Interaction | Activity records plus child key and age band | App Functionality and Analytics |
| Purchases → Purchase History | Product and transaction identifiers | App Functionality |
| Diagnostics → Other Diagnostic Data | App and OS version | App Functionality |
| Contact Info → Email Address | The parent’s email, only if a parent creates an account | App Functionality (sign-in) |
All five are declared as not used for tracking. They are declared as “linked to the user” because they are tied to the persistent device identifier described in section 3 — under Apple’s definition, data tied to a device counts as linked. Without an account we hold no name, email or account for you; with one we hold the parent’s email — and still nothing readable about the child.
6. In-app purchase
One non-consumable purchase unlocks all content — not a subscription, nothing auto-renews. Payment is handled entirely by Apple; we never see or store payment details. Our server records only that a given random device identifier has unlocked the content, together with Apple’s product and transaction identifiers. Every route to the purchase sits behind a parental gate, and the purchase screen is never shown to a child. The licence terms are Apple’s standard terms: Apple Standard End User License Agreement.
7. Parental controls
The parent area sits behind a parental gate (a 4-digit PIN, or an arithmetic question written out in words). Parents set daily and per-session time limits and a bedtime window. There are no outbound links a child can reach, no social features and no messaging; the legal and support links live only inside the parent area. There are no push notifications, no autoplay of the next item, and no streaks — the app has no mechanism to keep a child engaged longer.
8. Children
The app is designed for children under 5 and follows the App Store Kids Category requirements. We collect no identifying information about children that we can read: the server only ever sees a random key and an age band, while the nickname and birth month stay on the device — or sit inside the encrypted blob if a parent switched sync on, and that blob we cannot open. Every email and password field lives behind the parental gate; no screen a child can reach contains one. If you believe any data about your child was sent to us unintentionally, email [email protected] and we will delete it and confirm.
9. Retention and deletion
- Activity records and child keys: at most 180 days, then deleted automatically by the server. This is enforced in code, not merely promised.
- IP addresses: at most 1 hour.
- Device identifier and purchase record: kept until a parent asks us to delete them — deleting them automatically would cost a parent the content they paid for when they change device.
- Parent account (email, password hash, encrypted blob): kept until you ask us to delete it. Email us from the registered address and we delete both the account and the blob.
- To delete sooner, or delete everything, email us with the device identifier (in the app: Parent area → About the app & data). We delete it and confirm.
10. Changes to this policy
When this policy changes, the date at the top changes with it. Any change that widens what we collect will be announced inside the app before it takes effect.