Squirrel Stash 隱私權政策

最後更新: 2026-06-10
Last updated: 2026-06-10 · Version: 1.0.0+

本文件以繁體中文為主,English follows below。兩個版本內容等價,若有衝突 以英文版為準(App Store / Play Store 審查依據)。

繁體中文版

1. 我們是誰

「Squirrel Stash(松鼠票夾)」是一款獨立開發的票券管理 App。我們 不經營後端帳戶系統,您的所有票券、優惠券、設定預設 只儲存在您的裝置上

2. 我們收集哪些資料

類別 內容 儲存位置 是否離開您的裝置
票券 / 優惠券資料 標題、條碼、到期日、備註、自訂分類 本機 Hive 資料庫(AES-256 加密)
票券截圖 您拍照或從相簿匯入的票券圖片 本機檔案系統(App 私有目錄) 僅在使用 AI 辨識時上傳;上傳前會自動遮罩條碼(見第 3 節)
eSIM LPA 字串 電信商提供的 eSIM 啟用字串 本機 Hive(AES-256 加密) 否(安裝時透過 OS 系統 URL 啟動)
付費 / 訂閱資料 Squirrel Pro 權益狀態:方案、到期日、產品 ID 本機 SharedPreferences 否;購買與還原由 Apple / Google IAP 處理
App 使用記錄 v1.0 上架版本不啟動 telemetry SDK,不收集使用事件
崩潰報告 v1.0 上架版本不啟動 telemetry SDK,不收集遠端崩潰報告
帳號識別 我們不要求註冊帳號,不會收集 email、電話、姓名
廣告相關識別 Free 使用者使用 AI 辨識時,可能需要主動觀看獎勵式廣告以支撐 AI 成本 第三方廣告供應商 僅限您主動啟動 AI 辨識並選擇觀看廣告時;我們不把票券內容、圖片、分類名稱或條碼提供給廣告供應商做投放
裝置 ID Squirrel Stash 不建立自己的裝置識別碼
位置資訊 不收集

3. 圖片辨識(AI VLM)— 關鍵說明

當您使用「拍照新增票券」或「AI 辨識」功能時,App 會將圖片送到第三方 AI 模型供應商以辨識票券資訊(標題、到期日、商家名稱等)。

3.1 條碼遮罩

我們在上傳前會用本機程式自動偵測並用黑色方塊覆蓋圖片中的所有 條碼 / QR Code 區域。這個動作完全在您的裝置上發生,不需要您 手動操作。

遮罩流程(概念虛擬碼,僅作說明用):

function maskBarcodes(image):
    barcodes ← detectBarcodes(image)        # 本機 ML 模型,不上雲端
    if barcodes is empty:
        return image (no masking needed)
    canvas ← decode(image)
    for each barcode in barcodes:
        bbox ← barcode.bounds + 8px padding  # 涵蓋條碼 quiet zone
        canvas.fillRect(bbox, color=BLACK)   # 純黑覆蓋
    return encodeJpeg(canvas, quality=90)

偵測失敗或像素填充失敗時,App 會中止上傳而非送出未遮罩 的原圖(強制中止,不降級)。

目的:條碼是您的票券價值載體(兌換碼、eSIM LPA、會員號碼、付款 QR), 遮罩後即使 AI 供應商保留圖片,也無法用來盜用您的票券。

3.2 我們會把圖片送到哪裡

供應商 模型 用途 隱私政策 資料保留
OpenAI gpt-5.4-mini Free 票券 / 優惠券 / eSIM 圖片辨識 + 圖片種類判定;Pro fallback openai.com policy API 預設 30 天保留、不訓練
OpenAI gpt-5.4 Pro 票券 / 優惠券 / eSIM 圖片辨識主模型 同上 同上

我們不使用 OpenRouter / Google AI Studio / Groq 等其他第三方 推論供應商。所有 AI 影像辨識皆透過 OpenAI 的 API 直接呼叫。

我們無法控制 OpenAI 的政策變更。Squirrel Stash 提供 的條碼遮罩是一道防線,但您仍應評估自身敏感資料的風險。如果您不希望 任何圖片離開裝置,請不要使用 AI 辨識功能,改用手動 輸入或條碼掃描(這兩個功能完全在本機運作)。

3.3 AI 成本與獎勵式廣告

AI 圖片辨識有實際推論成本。Squirrel Stash v1.0 的 Free 版本不在票夾列表、 詳情頁或背景流程顯示被動廣告;Free 使用者在啟動 AI 辨識時,可能需要完成一個 由自己主動開啟的獎勵式廣告流程,才會送出該次辨識請求。Squirrel Pro 會跳過這個 廣告流程。

廣告供應商可能依其 SDK 與平台政策處理廣告播放相關資料,例如廣告請求、曝光、 完成狀態或平台允許的廣告識別資訊。Squirrel Stash 不會把您的票券內容、票券截圖、 條碼 / QR 內容、自訂分類名稱、eSIM LPA 或 AI 辨識結果提供給廣告供應商做廣告投放。 如果您不想觸發任何廣告請求,可以改用手動輸入 / 條碼掃描,或升級 Squirrel Pro。

3.4 隨同圖片傳輸的內容

為了讓 AI 模型給出更準確的分類結果,圖片之外 我們會在 prompt 中夾帶

我們不會傳輸

4. 本機資料安全

5. 您的權利(GDPR / 台灣個資法)

5.1 存取 / 匯出

您隨時可以透過「設定 → 備份」匯出所有資料(加密 ZIP 檔)。

5.2 修改

所有資料皆可在 App 內直接編輯。

5.3 刪除

「設定 → 清除所有資料」會永久刪除所有本機票券、優惠券、截圖、設定, 並 cancel 所有通知排程。

操作流程:

  1. 點擊「設定 → 清除所有資料」紅色按鈕
  2. 在彈出對話框中輸入「刪除」二字啟用確認鈕
  3. 點擊「清除所有資料」立即執行

明確會清除:本機 Hive boxes、所有截圖目錄、多數 SharedPreferences 設定、所有已排程的通知。

明確保留(白名單機制):

注意 1:刪除本機資料不會回溯刪除過去送給 AI 供應商的圖片副本。如需向各供應商請求刪除,請參考其隱私政策。

注意 2:Apple App Store / Google Play 政策要求所有 App 提供帳號 / 資料刪除入口。本 App 在「設定 → 清除所有資料」即為該入口,無需另外申請或聯絡開發者。

5.4 IAP 訂閱

訂閱由 Apple / Google 管理,請至「設定 → Apple ID → 訂閱項目」或 Google Play 訂閱頁面管理。

6. 兒童隱私

本 App 不刻意收集 13 歲以下兒童的資料。若我們發現意外收集,將立即刪除。

7. 政策變更

本政策若有重大變更,會在 App 內顯示提示,並更新本頁的 "Last updated" 日期。

8. 聯絡我們


English

1. Who we are

Squirrel Stash is an indie ticket / coupon management app. We do not operate any account backend — all your data is stored on your device by default.

2. What data we touch

CategoryContentStorageLeaves device?
Tickets / CouponsTitles, barcodes, expiry, notes, custom categoriesLocal Hive DB (AES-256 encrypted)No
Ticket screenshotsPhotos you take or importLocal app-private dirOnly when AI recognition is invoked; barcodes are masked first (§3)
eSIM LPACarrier-provided activation stringLocal Hive (AES-256 encrypted)No (OS handles installation)
Paid purchases / subscriptionsSquirrel Pro entitlement status: plan, expiry, product IDLocal SharedPreferencesNo — purchase and restore are handled by Apple / Google IAP
Usage analyticsNot collected in the v1.0 launch build; telemetry SDKs are not initialisedNo
Crash reportsNot collected in the v1.0 launch build; telemetry SDKs are not initialisedNo
Account IDsWe do not require sign-up
Ad-related identifiersFree users may be asked to watch a rewarded ad before an AI recognition to support AI costsThird-party ad providerOnly when you start AI recognition and choose the rewarded-ad flow; we do not share ticket contents, images, category names, or barcodes with ad providers for ad targeting
Device IDsSquirrel Stash does not create its own device identifier
LocationNot collected

3. AI Recognition (VLM) — Important Disclosure

When you use the "scan ticket via AI" feature, the app sends an image to OpenAI to extract ticket metadata (title, expiry, merchant).

3.1 Barcode masking

Before any upload, the app automatically detects and blacks out every barcode / QR code in the image on-device. This happens entirely on your device — no manual action required.

Masking flow (conceptual pseudocode, illustrative only):

function maskBarcodes(image):
    barcodes ← detectBarcodes(image)        # local ML model, never leaves device
    if barcodes is empty:
        return image (no masking needed)
    canvas ← decode(image)
    for each barcode in barcodes:
        bbox ← barcode.bounds + 8px padding  # cover the barcode quiet zone
        canvas.fillRect(bbox, color=BLACK)   # solid black fill
    return encodeJpeg(canvas, quality=90)

If detection or pixel-fill fails, the app aborts the upload rather than degrading to the unmasked original. There is no fallback path that sends the original image when masking partially fails.

Rationale: barcodes carry the value of the ticket (redemption codes, eSIM LPA, membership numbers, payment QRs). Masking ensures that even if the provider retains the image, it cannot be used to redeem your tickets.

3.2 Where the masked image goes

ProviderModelUsePrivacy policyRetention
OpenAI gpt-5.4-mini Free ticket / coupon / eSIM image extraction + image-kind classifier; Pro fallback openai.com policy API default 30-day retention, no training
OpenAI gpt-5.4 Pro ticket / coupon / eSIM primary extraction model same as above same as above

We do not use OpenRouter / Google AI Studio / Groq or any other third-party inference provider. All AI image recognition is called directly against the OpenAI API.

We do not control OpenAI's policy changes. Barcode masking is one line of defence — you should still assess the sensitivity of your data. If you prefer no image ever leaves your device, do not use AI recognition; use manual entry or barcode scanning instead (both run entirely on-device).

3.3 AI costs and rewarded ads

AI image recognition has a real inference cost. In the v1.0 launch build, Squirrel Stash does not show passive ads in the wallet list, detail screens, or background flows. Free users may be asked to complete a user-initiated rewarded ad flow before an AI recognition request is sent. Squirrel Pro skips that ad flow.

The ad provider may process ad-playback data under its SDK and platform policies, such as ad requests, impressions, completion status, or platform- allowed advertising identifiers. Squirrel Stash does not share ticket contents, ticket screenshots, barcode / QR contents, custom category names, eSIM LPA strings, or AI recognition results with ad providers for ad targeting. If you do not want to trigger any ad request, use manual entry / barcode scanning, or upgrade to Squirrel Pro.

3.4 What travels with the image (and what doesn't)

To help the model classify accurately, the prompt does include:

The prompt does NOT send:

4. Local data security

5. Your rights (GDPR / TW PDPA)

This does not retroactively delete image copies that AI providers may retain per their own policies. Contact each provider for their deletion process. App Store and Google Play require an in-app deletion entry point — Settings → Reset all data IS that entry point.

6. Children's privacy

This app does not knowingly collect data from children under 13. If we discover such collection, we will delete it.

7. Changes to this policy

Material changes will be announced in-app and the "Last updated" date above will be revised.

8. Contact