Skip to the content.

香蕉記帳 隱私權政策

最後更新日期:2026-08-11 生效日期:2026-05-18

感謝您使用「香蕉記帳」(以下簡稱「本 App」)。我們非常重視您的隱私,本政策將清楚說明本 App 如何處理您的資料。


一、資料蒐集與儲存方式

1.1 完全本地儲存

本 App 所有由您輸入的資料(包含但不限於:收入、支出、分類、備註、股票代碼、加密貨幣代碼、買入均價、持有數量、存款金額、資產項目、儲蓄目標等),僅由本 App 儲存在您的裝置本機(使用 SQLite 資料庫);因存放於本機 SQLite,這些資料會隨 §4.1 的匯出檔、§4.3 的 Google 自動備份與換機轉移一併帶走

除您主動使用之拍照辨識、廣告與 Premium 訂閱等功能所涉及之第三方服務(另詳 §1.4、§1.8、§2.3、§2.4),以及您啟用 Android 系統層級備份時由作業系統執行之 Google 雲端自動備份與換機轉移(另詳 §4.3)外,我們不會將上述任何由您輸入的記帳 / 股票 / 資產資料上傳至任何雲端伺服器,也不會傳送給開發者或任何第三方。

1.2 不蒐集個人識別資訊

本 App 開發者本身不會蒐集以下任何資訊(下列第 1.4 節說明的 Google AdMob、第 2.4 節說明的 Firebase 服務透過 SDK 自行蒐集者,以及您主動使用 §2.2 意見回饋表單或依 §5.3 寄送 Email 與開發者聯繫時、由您自行提供的內容除外):

1.3 不使用分析或追蹤工具(廣告除外)

除下列第 1.4 節說明的廣告 SDK 外,本 App 開發者未自行整合任何獨立的第三方分析、追蹤 SDK,包含但不限於:

惟需說明:第 1.4 節的 Google AdMob(Google Mobile Ads SDK)內部會隨附 Google 的廣告成效量測元件(app-measurement,與 Google/Firebase Analytics 同源的底層量測模組),用於衡量廣告投放成效與防止點擊詐騙。此元件屬廣告 SDK 的一部分,其蒐集之資料與用途已涵蓋於第 1.4 節,並非開發者另行整合之使用者行為分析工具,開發者亦無法存取其原始資料。

1.4 廣告 SDK(Google AdMob)

為了維持本 App 免費提供,本 App 透過 Google AdMob 顯示下列三種格式之廣告:

AdMob 為 Google 提供之廣告聯播網,上述三種格式皆由同一 SDK 投放,會自行蒐集以下資料以投放廣告與防止點擊詐騙:

上述資料由 Google 蒐集與處理,受 Google 隱私權政策AdMob 政策 規範,本 App 開發者無法存取這些原始資料,僅能於 AdMob 後台查看彙總統計(曝光數、點擊率等)。

如您希望限制個人化廣告,可於:

1.5 本機診斷日誌(app_log)

為了協助您在使用本 App 遇到異常時自助排查問題,本 App 會將警告與錯誤層級的事件寫入裝置本機 SQLite 資料庫的 app_log 表,僅供本機保存

您可透過「設定 → 清除快取」或「清除所有資料」清除本機日誌。

1.6 機上條碼/QR 解析(v1.1.0 / v1.2.0)

本 App 整合 Google ML Kit Barcode Scanningmobile_scanner 兩個元件,皆於您的裝置本機對相機畫面或選取圖片進行條碼/QR 偵測:

1.7 第三方 SDK 清單

本 App 在 production build 中整合下列會連線外部服務或涉及資料蒐集的第三方 SDK 供您審視(皆受 §1.4 / §2.4 / §1.8 / §三 已述條款規範);另有純本機運作、不蒐集亦不傳輸任何資料的基礎套件(如 sqflite 本機資料庫、shared_preferences 偏好設定、file_picker / share_plus 匯出分享等)未逐一列於下表:

SDK 套件 用途 是否蒐集資料
google_mobile_ads (Google AdMob) 顯示橫幅、插頁(全螢幕)與獎勵式廣告 是,詳見 §1.4
firebase_core / firebase_auth / firebase_app_check / cloud_functions 拍照辨識(§2.3 / §2.4)與 Premium 訂閱驗證/還原(§1.8) 是,詳見 §2.4 與 §1.8
in_app_purchase (Google Play Billing) Premium 訂閱購買與還原(§1.8) 是,詳見 §1.8
mobile_scanner / google_mlkit_barcode_scanning 機上 QR / 條碼解析(§1.6) 否(本機處理)
image_picker 從相簿/相機取得圖片 否(OS 內建 photo picker)
permission_handler 取得相機權限 prompt
in_app_review 顯示 Google Play 內建評分對話框 否(互動由 Play 框架處理)
in_app_update Google Play In-App Update API
webview_flutter 「設定 → 聯絡我們」開啟外部表單 是,詳見 §2.2(開啟頁面即向 Google 送出 IP/User-Agent/cookie;填寫內容由 Google 與開發者取得,詳見 §2.2)
local_auth App 鎖定生物辨識 否(本機處理)
flutter_local_notifications 週期性記帳提醒(§三) 否(本機排程)
google_fonts 首次啟動時下載並快取思源黑體中文字型(§2.5) 是,詳見 §2.5(僅 IP/連線中介資料)

1.8 Premium 訂閱(v2.0.0 新增)

本 App 透過 Google Play Billingin_app_purchase 套件)提供 Premium 月 / 年訂閱方案。為了驗證訂閱真偽並於換機 / 重灌後還原您的訂閱權益,下列資料會在您完成購買時由 Google Play 與本服務 Firebase Cloud Functions 處理:

資料項目 蒐集者 用途 儲存位置 / 期限
purchaseToken(Google Play 簽發的訂閱憑證) Google Play → 本服務 Firebase Cloud Functions 向 Google Play Developer API 驗證訂閱真偽、後續用於還原購買 Firebase Firestore(asia-east1);訂閱結束後仍保留供退款 / 爭議處理(詳見 §5.2,您可依 §5.3 申請刪除)
orderId(Google Play 訂單號) Google Play → 本服務 於「管理訂閱」深連到該訂單詳情、客服查詢 同上
expiryTime(訂閱有效期至) Google Play Developer API 判斷 isPremium 狀態、UI 顯示「訂閱有效至 YYYY/MM/DD」 同上 + 裝置本機 SQLite entitlements 表(離線可用)
subscriptionState(ACTIVE / IN_GRACE_PERIOD / CANCELED 等) Google Play Developer API 區分「期內取消」與「已過期」以正確 gate Premium 權益 同上
autoRenewing(是否自動續訂) Google Play Developer API UI 顯示「自動續訂中 / 已關閉自動續訂」 同上
productId(訂閱方案 ID:premium_monthly / premium_yearly Google Play Developer API(以伺服器回傳值為準,不採信 client) 顯示目前方案 / 深連到 Play Store 管理頁 同上
tier(權益等級:free / subscriber 本服務 Cloud Functions 依驗證結果推得 判定是否給予 Premium 權益 同上
validatedAt(最後一次驗證時間) 本服務 Cloud Functions 判斷憑證是否需要重新驗證、稽核 同上
revoked(權益是否已撤銷)/inTrial(是否在試用期)/queuedProductId(已排入下期的方案 ID) 本服務 Cloud Functions 依 Google Play Developer API 回傳值推得 正確 gate Premium 權益、顯示試用與方案變更狀態 同上

說明:

  1. 上述資料不包含您的姓名、Email、信用卡號或任何 Google 帳號識別資訊。Google Play 後端付款流程由 Google 處理,本服務無法存取您的付款工具細節。
  2. 訂閱驗證 callable 透過 §2.4 已述的 Firebase Anonymous Auth + App Check 識別請求來源;匿名 UID 不對應您的 Google 帳號或姓名。 2-1. 跨裝置還原時的匿名 UID 關聯:同一張購買憑證只能對應一個匿名 UID。當您換機或重灌後以同一個 Google Play 帳號還原訂閱,本服務會把該憑證改綁到新的匿名 UID,並在舊的匿名 UID 紀錄上標記已撤銷、撤銷原因、撤銷時間,以及接手的新匿名 UID(欄位 revokedInFavorOf),以利退款與爭議處理時追溯。這代表同一位使用者先後使用過的多個匿名 UID 之間會留下關聯紀錄;這些 UID 皆為系統自動產生,仍不包含也無法回推姓名、Email 或 Google 帳號。您可依 §5.3 申請刪除。
  3. 訂閱權益會以單列 cache 儲存於裝置本機 SQLite entitlements 表,使本 App 在離線時仍能正確判定您是否為 Premium 使用者。
  4. 試用與自動扣款揭露:月訂閱方案(premium_monthly)首次訂閱者享 7 天免費試用;試用期間若您未於 Google Play Store 取消,將於試用結束時依您 Play Store 綁定的付款方式自動扣款續訂為月訂閱,並於之後每月自動續訂直至取消。年訂閱方案(premium_yearly)無試用期。完整自動續訂、價格調整與取消條款請參閱本 App「設定 → 服務條款」§5。
  5. 您隨時可於 Google Play Store → 我的訂閱取消、暫停或變更方案;取消後仍可使用至本期結束日。若於 7 天試用期內取消,將不會被收取任何費用。
  6. 您解除安裝本 App 不會自動取消訂閱,請務必於 Play Store 端取消。
  7. 若您換機或重灌本 App,登入同一個 Google Play 帳號後,本 App 啟動時會背景自動向 Play Store 詢問您的有效訂閱並還原權益;您也可在「設定 → 升級訂閱 → 恢復購買」手動觸發。

Google Play Billing 與訂閱資料處理受 Google Play 服務條款 規範。


二、網路連線用途

本 App 僅在以下情況使用網路:

2.1 股票/加密貨幣即時報價與匯率查詢

2.1.1 台股公開資料查詢(股票名稱清單、除權息預告)

2.2 意見回饋(選用)

2.3 拍照辨識功能(記帳 + 股票對帳單,v1.1.0 新增)

本 App 提供兩處主動觸發的圖片辨識功能:

兩者使用完全相同的後端流程,請特別注意以下說明:

  1. 您拍攝或選取的圖片會以 HTTPS 加密傳輸至本服務的 Firebase Cloud Functions(Google Cloud,asia-east1 區域)。拍照記帳另會一併傳送您在本 App 的收支分類名稱清單(含您自訂的分類名稱),供 AI 從清單中挑選一個建議分類;此清單不含金額、備註或任何交易內容,且股票對帳單辨識不會傳送
  2. Cloud Functions 將圖片轉送至 Google Generative Language API(Gemini 2.5 Flash-Lite / Flash 模型) 進行 OCR 辨識
  3. 圖片不會被本服務儲存(傳輸完成即刻丟棄,僅暫存於記憶體中處理)
  4. 為防止濫用,我們會以 匿名 UID 記錄每月呼叫次數(不包含圖片內容、不可關聯到個人身分;資料以 Firestore 保存於 asia-east1)
  5. Google 對 Gemini API 的資料處理規範請參見 Google AI Studio 服務條款
  6. 第一次使用時 APP 會顯示同意對話框;您未同意前不會傳送任何圖片
  7. 若您不希望使用此功能,所有記帳與股票資料都可以手動輸入完成,功能完全可選

2.4 Firebase 服務(拍照辨識與訂閱驗證所需)

為支援 §2.3 之拍照辨識功能,以及 §1.8 之 Premium 訂閱驗證與還原,本 App 使用 Google Firebase 平台的下列服務,皆由 Google 蒐集、儲存與處理,本 App 開發者無法存取原始識別資料:

子服務 蒐集內容 用途 儲存位置
Firebase Anonymous Auth 匿名 UID(一串隨機字串,不含個資;首次啟動產生) 識別請求來源以執行 §2.3 的每月呼叫次數限額;UID 不對應您的 Google 帳號或姓名 Google 伺服器
Firebase App Check(Play Integrity) 由 Google Play 服務簽發的裝置完整性 token、APP 套件名稱(com.personal.expense_tracker)、APP 簽章雜湊 防止本 App 的 Cloud Function 端點被機器人 / 假 APP 濫用,確保只有來自正式 APP 的請求得到回應 Google 伺服器
Firebase Cloud Functions §2.3 所述的圖片內容,以及拍照記帳一併送出的收支分類名稱清單(皆即傳即丟、不儲存) 將圖片與分類名稱清單轉送 Gemini API 並回傳 OCR 結果 asia-east1 區域
Firebase Firestore 匿名 UID + 計數所屬月份 + 當月呼叫次數計數 + 方案別(免費/Premium 訂閱) 執行每月呼叫次數限額。保留期限:自最後一次使用起最多保留約 13 個月,逾期由排程作業自動刪除。 asia-east1 區域

Firebase 服務受 Google 隱私權政策Firebase 隱私條款 規範。若您未使用拍照辨識功能(包含 §2.3 拍照記帳與股票對帳單),上述網路請求仍會以 Anonymous Auth + App Check 建立連線以維持下次使用就緒;但不會送出任何圖片

如您完全不希望本 App 連線 Firebase,可在系統設定中限制本 App 的網路存取(功能將自動降級為手動輸入)。

2.5 字型下載(Google Fonts)

為了在各廠牌 / 各版本 Android 裝置上一致呈現中文字型(思源黑體 Noto Sans TC),本 App 透過 google_fonts 套件於首次啟動時Google Fonts CDNfonts.googleapis.com / fonts.gstatic.com)下載字型檔,下載後即快取於裝置本機,之後不再重複下載。


三、權限使用說明

權限 用途
網路存取(INTERNET) 查詢股票即時報價、載入 AdMob 廣告、Firebase Cloud Functions / Auth / App Check / Firestore(拍照辨識所需,詳見 §2.3/§2.4)、下載中文字型(詳見 §2.5)
通知(POST_NOTIFICATIONS) 顯示本機排程的提醒通知:週期性記帳提醒、預算門檻提醒、儲蓄月結提醒、股票即將除息提醒
開機啟動(RECEIVE_BOOT_COMPLETED) 重新註冊週期性提醒
生物辨識(USE_BIOMETRIC) App 鎖定(指紋/臉部解鎖)
觸覺回饋(VIBRATE) 操作(如刪除、儲存)的輕量震動回饋
廣告 ID(AD_ID) 提供 Google AdMob 投放廣告與計算曝光
相機(CAMERA) v1.1.0 拍照辨識功能(拍攝發票或股票對帳單進行 OCR 辨識;功能可選)
應用程式內購買(com.android.vending.BILLING) 提供 App 內訂閱(Premium 進階功能)的購買與還原

上表為本 App 主動宣告的權限。此外,本 App 使用的第三方 SDK(Firebase、Google Play 服務、Google AdMob 等)在建置時可能由系統自動合併少數標準框架權限(例如網路狀態 ACCESS_NETWORK_STATE、喚醒鎖 WAKE_LOCK、廣告服務 ADSERVICES_* 與相關系統接收器等)。這些屬框架層權限,僅用於支援上表及第二節所述之已揭露功能(股票報價、廣告投放、Firebase 連線與通知),不會用於其他目的。

我們不會將上述任何權限(含 SDK 自動合併的框架權限)用於已揭露功能以外的目的。


四、匯出與匯入備份

4.1 備份檔案

4.2 換機或還原

4.3 Google 自動備份與換機 D2D 轉移

自 v2.0.1 起,本 App 已開啟 Android 的 Auto Backup 與裝置間直接轉移(device-to-device transfer),以避免使用者忘記匯出而於換機 / 重灌時遺失財務資料:

安全性提醒: 收方裝置在 D2D 或 Google 雲端還原完成後,App 資料仍以明文方式存於 SQLite / SharedPreferences(即 §七.1 描述的明文儲存狀態)。 請先為新機設定鎖屏密碼或生物辨識後再開始轉移 / 還原,並於完成後盡快啟用 App 內建的「App 鎖定」。本 App 開發者無法控制 Android 系統轉移與雲端還原流程中的加密強度。

訂閱憑證安全提醒:若您的舊機曾購買 Premium 訂閱,備份 / 還原至新機時,purchaseToken 會一併還原。本 App 後端(Cloud Functions)會在新機呼叫時偵測「同一購買憑證綁定到不同匿名 UID」並自動撤銷舊 UID 的 Premium 狀態(防止單張訂閱跨多帳號濫用),不影響您在新機正常使用訂閱權益。


五、資料的刪除

5.1 本機資料

5.2 伺服器端保留資料

為了服務正常運作與防止濫用,本 App 會在 Firebase Firestore 保留少量資料:

資料 路徑 用途 保留期限
每月呼叫次數計數 quotas/{anonUid} 拍照辨識每月呼叫上限管控,防止濫用(內容為匿名 UID、計數所屬月份、當月已呼叫次數與方案別,不含圖片或辨識內容 自最後一次使用起最多約 13 個月,逾期由排程作業自動刪除
訂閱憑證 subscriptions/{anonUid} 驗證 Premium 訂閱狀態、防止單一購買憑證跨多帳號共用、處理退款 訂閱結束後仍保留作為退款與爭議處理依據(無固定刪除期限);您可隨時依 §5.3 申請刪除
配額退還失敗紀錄 quota_refund_failures/{自動 ID} 拍照辨識失敗時要退還已預扣的次數,若當下退還失敗則寫入此處待自動重試(內容為匿名 UID、日期、辨識類型、方案別與錯誤訊息摘要,不含圖片或辨識內容 最多 90 天,逾期由排程作業自動刪除;退還成功即立即刪除
訂閱狀態稽核紀錄 subscription_audit/{日期} 每日比對本服務保存的訂閱狀態是否仍與 Google Play 一致,以便及早發現退款/撤銷後未同步的情形(內容為當日統計數字,以及少量作為人工比對用的匿名 UID 前 8 碼片段與原因代碼;當日檢查整體執行失敗時另記一筆失敗紀錄,含日期與錯誤訊息摘要。皆不含購買憑證、訂單編號或方案名稱 最多 180 天,逾期由排程作業自動刪除

上述資料僅以 Firebase 匿名 UID(系統自動產生、無法回推至特定個人)為索引,不包含姓名、電話、Email、生日等個人識別資訊

5.3 申請刪除伺服器端資料

如您希望刪除 §5.2 所列伺服器端的資料,請以以下方式提出申請:

註:申請刪除後,您原有的 Premium 訂閱憑證對應紀錄將一併移除,未來無法以該裝置 / 匿名 UID 自動還原 Premium 狀態(仍可透過 Google Play 的「還原購買」流程重新綁定)。

刪除處理範圍:包含 §5.2 表格所列的全部項目——每月呼叫次數計數、訂閱憑證、配額退還失敗紀錄,以及訂閱狀態稽核紀錄中屬於您的匿名 UID 片段。

5.4 您對個人資料的權利

依《個人資料保護法》第 3 條,您就您的個人資料享有下列權利:查詢或請求閱覽、請求製給複製本、請求補充或更正、請求停止蒐集/處理/利用、請求刪除。行使方式如下:

行使上述權利不需付費,亦不影響您使用本 App 之任何功能。


六、兒童隱私

本 App 為一般財務管理工具,不刻意針對 13 歲以下兒童設計,也不蒐集兒童的個人資料。


七、安全性聲明

7.1 資料以「明文(未加密)」儲存於本機

請特別注意:本 App 為了保留「無雲端依賴」與「自由匯出匯入備份」的便利性,目前所有本機資料皆以明文(未加密)儲存

這代表:能存取您裝置儲存空間的程式或人員(例如 root / 越獄裝置上的其他應用程式、實體取得您手機者、未鎖屏的拾獲者)都有可能讀取其中內容。此外,若您於裝置上開啟「USB 偵錯」或其他開發者選項,連接電腦的人可能透過 ADB 等開發者工具讀取本 App 的資料目錄;此為本機(裝置端)存取風險,與 §四.3 的雲端自動備份 / 換機轉移屬不同管道,即使您於系統設定關閉雲端備份,開發者模式的本機存取仍不受影響。請僅在您信任的環境下啟用開發者選項。

7.2 App 鎖定的範圍

App 內建的「生物辨識鎖」(設定 → 安全 → 生物辨識鎖)僅限制進入 App UI 時要求生物辨識或 PIN,並不加密底層資料庫檔案。即使啟用 App 鎖定,能繞過裝置鎖屏的人仍可能透過檔案存取讀取資料庫。

7.3 為保護您的資料,請務必:

7.4 加密規劃(未來版本)

未來版本將評估以下選項以提升加密強度:

上述項目為評估方向,實際導入時程依開發資源與技術可行性調整,不構成具體承諾


八、政策變更

本政策若有重大變更,我們會於本 App 內或 Google Play 商店頁面通知您。建議您定期查看本頁,以了解最新內容。


九、聯絡我們

若您對本隱私權政策有任何疑問,可透過 App 內「設定 → 聯絡我們」與我們聯繫。


開發者: 個人開發者 App 名稱: 香蕉記帳 Package Name: com.personal.expense_tracker