隱私與資料

旅行 App 到底需要上傳哪些資料?本機優先是什麼意思

「資料存在你的裝置上」是很多 App 的標語,但很少說明按下分享、開啟提醒、購買 Pro 時,到底哪些欄位離開了手機。這篇用 TripBoard 逐功能列給你看。

Read this in English
隱私與功能閱讀時間 10 分鐘
  • 旅行 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 都可能一併刪除。建議出發前與回國後各匯出一次備份。

不用帳號,行程只存在你的裝置

打開就能用,不必註冊。建立行程 試試看,或先讀完整的 隱私權政策。

開始規劃行程

延伸閱讀