隱私與資料
旅行 App 到底需要上傳哪些資料?本機優先是什麼意思
「資料存在你的裝置上」是很多 App 的標語,但很少說明按下分享、開啟提醒、購買 Pro 時,到底哪些欄位離開了手機。這篇用 TripBoard 逐功能列給你看。
Read this in English- 旅行 App 隱私
- 本機優先
- 免註冊
- 資料備份
旅行 App 裡有你要去哪、住哪、搭哪班飛機、跟誰去、誰付了多少錢。組合起來,就是一份完整的個人行蹤紀錄。
多數人直到換手機發現行程不見了,才想到這些資料存在哪裡。這篇只回答一個具體問題:一個旅行 App 為了讓功能動起來,最少需要上傳什麼?
三種常見架構:雲端帳號型、本機優先、純離線#
三種做法的差別在於「行程的正本放在哪裡」,每一種都有代價。
表格可左右滑動查看
| 雲端帳號型 | 本機優先 | 純離線 | |
|---|---|---|---|
| 行程正本在哪 | 服務商的伺服器,手機上是快取 | 你的裝置,伺服器只存特定功能需要的少量資料 | 只在你的裝置 |
| 需要帳號 | 需要,通常是 Email 或社群登入 | 不一定,TripBoard 不需要 | 不需要 |
| 換手機 | 登入就回來 | 要自己備份、匯入 | 要自己備份、匯入,或根本無法搬 |
| 分享給同行者 | 邀請共同編輯 | 主動分享時才上傳一份內容 | 只能截圖或匯出檔案 |
| 出發前提醒 | 伺服器知道你的行程,隨時能推播 | 開啟時只上傳排程所需欄位 | 只能靠手機本身的鬧鐘或行事曆 |
雲端帳號型最方便,代價是服務商保有整份行程的副本;純離線最安全,代價是「跟別人有關」的功能幾乎都做不了。本機優先夾在中間:預設不上傳,只有你用到某個需要伺服器的功能時,才送出那個功能需要的最少資料。
本機優先在 TripBoard 是什麼意思#
TripBoard 的行程存在瀏覽器內建的資料庫 IndexedDB 裡,這是架構本身:伺服器端的資料庫裡沒有任何一張存放行程、花費或照片的表,也沒有使用者帳號系統。
只存在你裝置上的資料
- 行程本身:名稱、目的地、日期、每日安排與景點(包含景點照片)。
- 航班、打包清單、備忘錄。
- 所有費用、預付款、換匯紀錄與現金錢包。
- 同行成員名單與分帳結果。
- 結算時填的匯款帳號(另外存放,連備份檔都不會帶)。
伺服器上只有六種資料:Pro 啟動碼、分享連結、聯絡表單、防濫用的限流紀錄、推播訂閱,以及推播排程。下面逐一說明它們各自是怎麼來的。
逐功能說明:用這個功能時會上傳什麼#
分享連結:你主動交出去的那一份#
分享是唯一會上傳行程內容的功能,因為朋友要在自己的手機上打開。上傳的是分享頁要顯示的內容:
- 行程名稱、目的地、出發與結束日期、分享卡片的主題色。
- 每一天的日期,以及當天景點的名稱、時間、分類與景點備註。
- 航班資訊(航班號碼、航空公司、起降機場與時間、座位、航廈等)。
- 不包含景點照片、費用、成員名單與行程備忘錄。
分享連結會跟著行程更新,但有效期是從最後一次更新起算:免費版 24 小時、Pro 7 天,過期後自動刪除;朋友反覆打開連結不會延長它的壽命。免費版同時只能有一筆行程在分享中,要停掉只能等它過期;Pro 可以隨時停止分享或換一條新連結。控制這條連結的權杖只存在你的裝置上,伺服器只存它的雜湊值。
另外兩種分享要分開講。結算分享是一次性快照,會包含費用名稱、金額、誰付的、誰該給誰多少,以及你選擇填寫的匯款帳號,同樣在 24 小時或 7 天後過期。用 Email 寄行程時,收件人地址與行程摘要(名稱、目的地、日期、每日景點名稱與時間,有設定預算的話也包含預算)會經過伺服器交給寄信服務送出。建立分享連結時,伺服器也會記一筆 IP 的雜湊值,只用來限制建立次數。
行程提醒:不分享也會上傳的唯一路徑#
出發前 7 天、前 1 天、當天早上,以及行程結束隔天的結算提醒,都是由伺服器在指定日期推播。伺服器要知道「哪天、送給哪台裝置、寫什麼」,所以開啟某趟行程的提醒時會上傳(詳見 iPhone 推播設定教學):
- 行程名稱、本機的行程編號,以及每則提醒的送出日期(由出發日或結束日推算,出發日本身不上傳)。
- 你勾選了哪幾個提醒時間點,以及每則提醒最後一次送出的日期。
- 瀏覽器提供的推播端點與加密金鑰、介面語系、時區偏移。
結算提醒要不要送,取決於有沒有未結清的費用,而這個判斷只在你的裝置上做。伺服器看不到金額,也看不到結清狀態,只看得到「這天有一則排程」或「沒有」。提醒預設關閉,關掉某趟行程的提醒就會刪除該行程的排程;已送出的提醒紀錄會在一段時間後自動清除。
Pro 啟用:啟動碼與裝置綁定#
購買 Pro 時,付款由 Lemon Squeezy 處理,TripBoard 不經手也不儲存卡號;你填的 Email 只用來寄送啟動碼。輸入啟動碼時,App 會把啟動碼和一組在你瀏覽器產生的裝置識別碼送到伺服器,把這組碼綁定到這台裝置。伺服器記得的只有碼、方案與綁定的裝置,與行程內容無關。
聯絡表單:你寫的訊息與診斷資訊#
透過聯絡頁或設定頁送出意見時,會送出你選的類別、你寫的內容,以及一段診斷資訊:瀏覽器版本、當下所在的頁面網址、語言、是否已加到主畫面、畫面尺寸。這些會以 Email 寄給開發者。
永遠不會上傳的資料#
- 景點照片:任何功能都不會上傳,包括分享連結。
- 行程備忘錄、打包清單、換匯紀錄與現金錢包。
- 費用、分帳與成員名單:唯一例外是你主動按下「結算分享」,那一份快照會在過期後刪除。
- 每日安排:只有在你用連結或 Email 分享行程時,才會以上面那份分享內容的形式上傳。
還有一類流量要講清楚:天氣查詢會把城市名稱或座標送到伺服器代查,匯率會向公開的匯率服務抓取;網站本身也有匿名的流量統計與廣告成效追蹤,記錄的是「看了哪一頁、按了哪個按鈕」這類事件,事件裡不帶行程內容。
代價與取捨:本機優先不是沒有缺點#
伺服器上沒有你的行程,也就沒辦法幫你救回行程:
- 換裝置要自己搬:到 設定 匯出 ZIP 備份,在新裝置上匯入。Pro 可以替備份檔加上 AES-256 密碼保護。
- 清除瀏覽器資料會清掉行程:清快取、移除網站資料、刪掉主畫面上的 App,都可能一起刪掉 IndexedDB。出國前與回國後各備份一次最保險。
- 沒有多裝置同步:手機和電腦上的行程是兩份各自獨立的資料,不會自動合併。
- 有些設定只屬於這台裝置:行程提醒要在新裝置重新開啟;分享連結的控制權不會跟著備份走,還原後要重新分享。
需要多人同時編輯、或常在手機與電腦間切換的話,雲端帳號型可能更適合;本機優先適合「一個人排行程、出發前分享給大家」的用法。
怎麼確認一個 App 的說法是真的#
不管用哪一個旅行 App,都可以用下面三個方法自己檢查:
- 看隱私權政策寫得多細:好的政策會寫出每個功能上傳哪些欄位、存多久、怎麼停。TripBoard 的 隱私權政策 就是照這個方式寫推播提醒的。
- 看網路請求:在電腦瀏覽器打開開發者工具的 Network 分頁,新增一筆行程或一筆費用,看看有沒有送出夾帶這些內容的請求。本機優先的 App 在這時應該安安靜靜。
- 看它要不要帳號:需要登入的服務幾乎一定把資料存在伺服器上,帳號就是為了讓你在別台裝置拿回資料。
常見問題#
本機優先(local-first)是什麼意思?
資料正本存在你的裝置上,平常不需要伺服器;只有用到分享、推播這類功能時,才上傳該功能需要的最少資料,伺服器上沒有整份行程的副本。
TripBoard 的行程會上傳到雲端嗎?
平常不會。行程、費用、成員、照片都存在瀏覽器的 IndexedDB。只有你主動分享時,會上傳一份不含照片與費用的行程內容,並在最後更新後 24 小時(Pro 為 7 天)過期;開啟行程提醒時,只會上傳行程名稱與送出日期等排程欄位。完整清單見 隱私權政策。
換手機時行程會不見嗎?
不會自動跟過去。請先在舊裝置的 設定 匯出 ZIP 備份,再到新裝置匯入;行程提醒需要在新裝置重新開啟,分享連結也需要重新分享。
清除瀏覽器快取會刪掉行程嗎?
可能會。行程存在瀏覽器的網站資料裡,清除網站資料或移除主畫面上的 App 都可能一併刪除。建議出發前與回國後各匯出一次備份。
不用帳號,行程只存在你的裝置
打開就能用,不必註冊。建立行程 試試看,或先讀完整的 隱私權政策。
開始規劃行程