一、这份政策说的是什么
FGBA(下称「本 App」)是一个 Game Boy、Game Boy Color、Game Boy Advance 模拟器。这份政策说清楚:哪些数据会离开你的设备、去哪儿、为什么,以及你 怎么把它们删掉。
一句话概括:本 App 没有账号体系、没有分析统计、没有广告。你不注册也能 用全部功能。需要单独交代的只有四个功能,其中三个要联网、都默认关着、由你自己 打开;第四个(画面翻译)根本不联网。
二、一句话回答
| 收集我的个人信息吗? | 不收。没有注册、没有用户画像、不读通讯录/相册/位置/麦克风。 |
|---|---|
| ROM 文件会上传吗? | 不会。任何情况下都不会。 |
| 存档会上传吗? |
只有你在设置里自己打开「云存档」、登录之后,你手动点「上传」的那一个
存档才会传。默认关着,不会自动上传。上传的只有电池存档(.sav)。
|
| 翻译功能会把游戏画面或文字发给第三方 API 吗? | 不会。文字识别和翻译全部在你自己的设备上跑,用的是 iOS 自带的 Vision 和翻译框架,没有任何第三方翻译 API,也不发往任何服务器。 |
| 会上传 IP 和设备信息吗? | 我们不收集这些。但你用到上面那几个联网功能时,对端 (Cloudflare、RetroAchievements)会看到你机器的 IP 地址——任何一次网络请求都会带上它,这是互联网本身的机制,不是本 App 做的采集。 |
| 有广告或者统计 SDK 吗? | 没有。本 App 不带任何广告、埋点、崩溃上报或归因 SDK。 |
| 怎么把我的数据删掉? | 删掉 App 就删掉了设备上的全部数据;云端那份存档发邮件给我们删(见第十节)。 |
三、我们收集什么
什么都不收集。本 App 没有服务器来接收你的使用数据——没有 启动统计、没有功能埋点、没有崩溃日志上报、没有设备指纹、没有广告标识符 (IDFA/GAID)。我们无从知道有多少人在用、用的是哪个机型、在哪儿用。
本 App 也不申请通讯录、相册、相机、麦克风、定位、健康这些权限,一个都没有。
四、你的数据存在哪儿
全部存在你自己的设备上,就在本 App 的 Documents 目录里。这个目录在 iOS 的「文件」App 里看得见(这是让你能自己导入 ROM 的同一个机制),里面有:
- 你自己导入的 ROM 文件;
- 游戏存档(
.sav/.srm); library.json——游戏库的索引和游玩记录;settings.json——你的设置(语言、主题色、按键、核心选择等);covers/——抓下来的游戏封面图;-
只有你登录过对应账号时才会有:
cloud.json(云存档账号的邮箱和 登录令牌)、retroachievements.json(RA 用户名和令牌)、achievements/(成就定义缓存与解锁时间)。
我们看不到其中任何一样。卸载本 App(或在「文件」App 里删掉这些文件)即彻底删除。
提醒一句:cloud.json 和
retroachievements.json 里存的是登录令牌,而 Documents
目录在「文件」App 里可见——别把这两个文件分享给别人。想清掉它们,在设置里
「退出登录」即可。
五、四个需要交代清楚的功能
下面四项都和「数据会不会离开你的设备」这个问题有关。前三项要联网,都默认 关着、要你自己打开,也随时可以关掉;第四项(画面翻译)完全不联网,之所以单 列一条,是因为它最容易被误会成「把画面发给某个翻译 API」。
1. 云存档(可选,默认关闭)
用它要你自己注册一个云存档账号(邮箱 + 密码)。注册和登录时,本 App 会把邮箱,以及由你的密码在本机派生出来的密钥发给服务端。
你输的密码本身不会离开这台设备,也不会被存下来。本 App 在本地先用 PBKDF2-SHA256 把它拉伸 15 万轮(邮箱地址当盐),只把拉伸的结果 发出去。服务端存的是这个结果,从它反推不回你的密码。
但请注意:这个密钥就是登录凭据——拿到它的人可以直接登录你 的账号。所以别拿你在别处用过的密码来注册。
登录之后,只有你亲手点「上传」的那一个存档会被发送。存到云端的东西是:
-
电池存档本身(
.sav的内容)——也就是游戏里的 进度:队伍、道具、地图位置这些; -
这个存档的文件名,而它是由你的 ROM
文件名拼出来的(例如
Pokemon - Emerald Version.sav)。也就是说, 云端能看到你在玩哪个游戏。这是我们为了让存档能一一对上而 必须传的,说清楚比含糊过去好。
ROM 文件本身永远不会被上传——不光是云存档这个功能,本 App 的任何功能都不会传 ROM。
云端由第三方云平台托管:Cloudflare(Workers 与 R2 对象存储)。数据存在 Cloudflare 的基础设施上,同时也受 Cloudflare 自身隐私政策的约束。我们不把这批数据用于任何其他用途,也不卖给别人。
本 App 目前没有提供「删除云端存档」或「注销账号」的入口。要删,请 按第十节发邮件给我们。
2. RetroAchievements 成就(可选,默认关闭)
打开并登录之后,本 App 会和 RetroAchievements(retroachievements.org,下称 「RA」)通信。RA 是一个独立的第三方服务,有自己的账号和隐私政策,我们管不着它 怎么处理数据。发过去的东西是:
- 你的 RA 用户名和密码——登录那一次会发送明文密码给 RA(这是 RA 的连接接口要求的)。密码不会被存在本机任何文件里,换回来的登录令牌才会。 别在别处用过同一个密码。
- 你那个 ROM 的 MD5 哈希(整个文件的 MD5,用来让 RA 认出这是哪个游戏);
- 游玩与解锁事件:哪一局开始、什么难度、解锁了哪条成就、什么 时候解锁的。
发过去的是哈希和事件,不是 ROM 文件、也不是存档文件。但哈希 足以让 RA 判断出你在玩哪个游戏。
3. 游戏封面(可选,默认自动抓取,可关闭)
本 App 会从 libretro 的封面库(thumbnails.libretro.com)下载盒绘,同 时会从 RA 的图片站取成就图标。请求里不包含你的任何账号信息。
值得说明的是:本 App 先取一份按机型分类的封面目录(比如「Game Boy Advance 的全部盒绘名单」),再在本机拿你的 ROM 文件名去比对,最后只按比对出来的图名下载图片。所以封面站看不到你的 ROM 文件名,只能看出你在为哪几个机型取过封面。
4. 画面翻译(本地,不联网)
这一项不发任何数据出去。文字识别用的是 Apple 的 Vision 框架,翻译用的是 Apple 的 Translation 框架,两者都在你的设备上本地运行。没有第三方翻译 API,没有云端 OCR,游戏 画面和识别出来的文字不会离开你的设备。
一点提醒:系统第一次翻某一门语言时,iOS 会自己去 Apple 下载那门语言的语言包。那一步是操作系统在和 Apple 打交道(受 Apple 自己的条款约束),不是本 App 在发数据,下完之后翻译就完全离线了。
本功能需要 iOS 18 或更高版本。Android 版目前没有这个功能。
六、我们不做的事
- 不做用户画像,不推断你的兴趣、身份或位置;
- 不投放广告,也不接入任何广告或归因 SDK;
- 不接入任何分析、崩溃上报或热更新 SDK;
- 不读取、不上传你的 ROM、存档、截图或任何文件;
- 不把你的数据卖给、租给或换给任何人。
七、系统权限
- 网络——上面那三个联网功能要用。不开这些功能时,本 App 一个请求都不发。
- 振动——按键触感反馈,可关。
- 本地网络——只在用 GBA 联机线功能、连另一台设备或模拟器时 才用,流量不出你的局域网。
八、儿童
本 App 不面向 13 岁以下的儿童单独设计,也不会有意收集儿童的个人信息——事实上 我们不收集任何人的个人信息。云存档账号请由成年人注册。
九、这份政策的变更
本 App 改了数据流向(比如以后新增一个联网功能),我们会更新这一页并改掉顶上的 「最后更新」日期。重大变更会在 App 内提示。继续使用即表示你接受更新后的政策。
十、你的权利:怎么删数据、怎么联系我们
删掉设备上的数据:卸载本 App 即可。想在卸载前单独清掉某一样,
- 在「文件」App 里进 FGBA 目录,删掉对应的文件;
- 账号令牌:在设置里「退出登录」;
- 游戏、存档、封面:在游戏库里逐条删除。
删掉云端的存档和账号:本 App 里暂时没有这个入口,请发邮件过来, 写明你的账号邮箱即可。我们会在合理期限内删除,并回信确认。
RetroAchievements 上的数据归 RA 管,请通过 retroachievements.org 处理。
联系方式 / Contact:zhuguoqing9510@gmail.com
1. What this policy covers
FGBA (the “App”) is a Game Boy, Game Boy Color and Game Boy Advance emulator. This policy explains what data leaves your device, where it goes, why, and how to delete it.
In one sentence: the App has no accounts, no analytics and no advertising. You can use every feature without registering. Only four features need any explanation at all: three of them use the network, are off by default and must be turned on by you, and the fourth (screen translation) does not use the network in the first place.
2. Short answers
| Do you collect my personal information? | No. No sign-up, no profiling, and no access to your contacts, photos, location or microphone. |
|---|---|
| Are my ROM files uploaded? | No. Never, under any circumstances. |
| Are my save files uploaded? |
Only the single save you tap “Upload” on, and only
after you have turned on cloud saves in Settings and signed in.
It is off by default and nothing uploads automatically. What is
uploaded is the battery save (.sav) only.
|
| Does the translation feature send game footage or text to a third-party API? | No. Both text recognition and translation run entirely on your own device using Apple’s Vision and Translation frameworks. There is no third-party translation API and nothing is sent to any server. |
| Do you collect my IP address or device information? | We collect neither. But when you use the networked features above, the party on the other end (Cloudflare, RetroAchievements) can see your IP address — every network request carries it. That is how the internet works, not something the App collects. |
| Are there ads or analytics SDKs? | No. The App bundles no advertising, tracking, crash-reporting or attribution SDK of any kind. |
| How do I delete my data? | Deleting the App deletes everything on your device. For the copy in the cloud, email us (see section 10). |
3. What we collect
Nothing. The App has no backend that receives usage data from you — no launch counts, no feature analytics, no crash uploads, no device fingerprinting, no advertising identifier (IDFA/GAID). We have no way of knowing how many people use the App, on what hardware, or from where.
The App also requests none of the usual permissions: no contacts, photos, camera, microphone, location or health.
4. Where your data lives
All of it stays on your own device, in the App’s Documents directory. That directory is visible in the iOS Files app (the same mechanism that lets you import your own ROMs). It contains:
- the ROM files you imported yourself;
- your save files (
.sav/.srm); library.json— your library index and play history;settings.json— your preferences (language, theme colour, controls, core choice, and so on);covers/— downloaded cover art;-
only if you have signed in to the relevant account:
cloud.json(your cloud-save email and login token),retroachievements.json(your RA username and token), andachievements/(cached achievement definitions and unlock times).
We cannot see any of it. Uninstalling the App (or deleting these files from the Files app) removes it for good.
One caution: cloud.json and
retroachievements.json hold login tokens, and the
Documents directory is visible in the Files app — do not share
those two files. To clear them, use “Sign out” in
Settings.
5. Four features worth spelling out
All four bear on the question of whether data leaves your device. The first three use the network, are off by default, must be turned on by you, and can be turned off again at any time. The fourth (screen translation) uses no network at all; it is listed separately because it is the one most likely to be mistaken for “sends your screen to some translation API”.
1. Cloud saves (optional, off by default)
Using it requires you to register a cloud-save account (email and password). When registering and signing in, the App sends the server your email address and a key derived from your password on your own device.
The password you type never leaves the device and is never stored. The App stretches it locally with PBKDF2-SHA256 for 150,000 rounds (using the email address as the salt) and sends only the result. The server stores that result; your password cannot be recovered from it.
Note, however, that this key is the login credential — anyone holding it can sign in as you. Do not reuse a password you use elsewhere.
Once signed in, only the one save you explicitly tap “Upload” on is sent. What is stored in the cloud is:
-
the battery save itself (the contents of the
.sav) — your in-game progress: party, items, map position; -
that save’s file name, which is built from
your ROM’s file name (for example
Pokemon - Emerald Version.sav). In other words, the cloud can see which game you are playing. We have to send this to match saves up correctly, and we would rather say so plainly than gloss over it.
The ROM file itself is never uploaded — not by cloud saves, and not by any other feature of the App.
The cloud is hosted on a third-party platform: Cloudflare (Workers and R2 object storage). Your data sits on Cloudflare’s infrastructure and is also subject to Cloudflare’s own privacy policy. We do not use it for anything else and do not sell it.
The App currently offers no way to delete a cloud save or close your account. To do that, email us as described in section 10.
2. RetroAchievements (optional, off by default)
Once enabled and signed in, the App talks to RetroAchievements (retroachievements.org, “RA”). RA is an independent third-party service with its own accounts and privacy policy; how it handles data is outside our control. What is sent:
- your RA username and password — the sign-in request sends the password in plain text to RA (that is what RA’s Connect API requires). The password is never written to any file on your device; only the returned login token is. Do not reuse a password you use elsewhere.
- the MD5 hash of that ROM (the MD5 of the whole file, which is how RA identifies the game);
- play and unlock events: when a session started, at what difficulty, which achievement unlocked, and when.
What is sent is hashes and events, not the ROM file and not the save file. The hash is enough for RA to tell which game you are playing.
3. Cover art (optional, fetched automatically by default, can be turned off)
The App downloads box art from the libretro thumbnail library (thumbnails.libretro.com) and achievement icons from RA’s image host. These requests carry no account information of yours.
Worth spelling out: the App first fetches a per-console cover index (for example, the list of all Game Boy Advance box art), then matches your ROM’s file name against it locally, and finally downloads only the image it matched. The cover host therefore never sees your ROM file names; it can only tell which consoles you have fetched covers for.
4. Screen translation (on-device, no network)
This feature sends nothing anywhere. Text recognition uses Apple’s Vision framework and translation uses Apple’s Translation framework; both run locally on your device. There is no third-party translation API and no cloud OCR, and neither the game footage nor the recognised text leaves your device.
One caveat: the first time the system translates a given language, iOS itself downloads that language’s model from Apple. That step is the operating system dealing with Apple (under Apple’s own terms) rather than the App sending data, and once it finishes, translation is fully offline.
This feature needs iOS 18 or later. The Android version does not have it.
6. What we do not do
- We do not profile you or infer your interests, identity or location;
- We do not show ads and do not integrate any advertising or attribution SDK;
- We do not integrate any analytics, crash-reporting or over-the-air update SDK;
- We do not read or upload your ROMs, saves, screenshots or any other files;
- We do not sell, rent or trade your data to anyone.
7. System permissions
- Network — used by the three networked features above. With those off, the App makes no requests at all.
- Vibration — haptic feedback on buttons; can be turned off.
- Local network — only for the GBA link-cable feature when connecting to another device or an emulator. That traffic stays inside your own network.
8. Children
The App is not designed for children under 13 and does not knowingly collect personal information from children — in fact it collects personal information from no one. A cloud-save account should be registered by an adult.
9. Changes to this policy
If the App’s data flows change (for example, if a new networked feature is added), we will update this page and the “last updated” date above. Material changes will be announced in the App. Continued use means you accept the updated policy.
10. Your rights: deleting data and contacting us
Deleting data on your device: uninstall the App. To clear individual items first,
- open the FGBA folder in the Files app and delete the files you want gone;
- for account tokens, use “Sign out” in Settings;
- for games, saves and covers, delete them one by one in the library.
Deleting your cloud saves and account: there is no in-app control for this yet. Email us with the account’s email address and we will delete it within a reasonable period and confirm by reply.
Data held by RetroAchievements is theirs to manage; please use retroachievements.org for that.
Contact: zhuguoqing9510@gmail.com