iOS App 刪除帳號:送審 Apple 前要測的流程
作者:Mehdi Azizi
更新於 ,7 分鐘
刪除按鈕、相關資料、訂閱與重新登入:送交 App Review 前,用一份具體的測試清單檢查這個流程。
只有按鈕不夠:要確認哪些東西真的消失了
如果你的 App 可以建立帳號,Apple 要求使用者能在 App 內發起刪除帳號。單純停用帳號不符合這項要求。這個流程要好找,也要說明會造成什麼後果。如果有一部分要在網頁上完成,連結必須直接開到對應的頁面。來源:Apple 對刪除帳號的說明。
所以工作不是在設定裡放一顆紅色按鈕就結束了。你要盤點資料、在伺服器端執行刪除、處理錯誤,還要確認使用者接下來看到什麼。這篇指南提供一份產品面和技術面的測試清單;至於依法必須保留的資料,要依照你的業務性質另外處理。
先畫一張資料地圖
假設有一個虛構的閱讀筆記 App。它有帳號、個人檔案、私人筆記,以及使用者上傳的書封照片。下面的例子是一份待驗證的計畫,不是已經在 Devoria 某個 App 上執行過的刪除流程。
- 登入身分: 刪除後要怎麼讓這個帳號無法再使用?
- 個人檔案與筆記: 哪些資料列屬於這個人?要怎麼刪除?
- 儲存的照片: 由哪個處理程序移除檔案和它們的參照?
- 手機上的快取: 畫面是否只在操作真的完成後才清除本機資料?
- 第三方服務: 跟這個帳號相關的資料,是否需要另外刪除?
- 必須保留的資料: 哪些資料、依據哪項義務,以及要怎麼告知使用者?
有了這張地圖,你就不會事後才發現使用者資料已經消失了,照片卻還能存取。它也列出了測試時要去搜尋確認的項目。
清楚易懂的流程:四種狀態
以下是針對這個虛構 App 的建議,請依你產品的實際後果調整:
- 帳號設定。 一直都有一個「刪除我的帳號」的入口。
- 確認。 畫面說明會受影響的資料,而且「取消」動作要跟「刪除」動作一樣清楚易懂。
- 處理中。 按鈕要防止重複送出,介面要顯示操作正在進行。
- 結果。 確認成功後進入登出狀態。失敗時保留有用的訊息和重試的方式,不要假裝帳號已經刪除。
如果處理需要時間,Apple 接受延後完成的流程,前提是要告知使用者,並在完成時確認。只是記錄了刪除請求的時候,App 不能讓人以為刪除已經完成。同一份 Apple 文件也說明了需要重新驗證身分的情況,以及高度受監管行業的例外。
用 Supabase 時要預先想到的事
刪除一個 Auth 使用者,本身並不能證明你產品裡的所有物件都處理好了。Supabase 特別說明,擁有 Storage 物件的使用者,在這個狀況解決之前無法被刪除。文件也提到,刪除使用者並不會立即讓所有已發出的 JWT 失效:設計時要把它們的有效期考慮進去。來源:Supabase 使用者管理。
所以要設計一個伺服器端的處理程序,驗證請求者的身分,以及屬於他的資源。不要依賴手機隨意送來的 ID 來決定要刪哪個帳號。管理員權限要留在伺服器端,參考 Supabase 金鑰文件。
如果處理分成好幾個步驟,要先決定:第一步成功、下一步失敗時,重試應該怎麼做。例如檔案已經刪掉了,新的請求不應該只因為找不到檔案就失敗。這是測試前就要寫好的情境,不是可以憑假設的行為。
帳號和訂閱:兩項各自獨立的檢查
使用者可能刪除了帳號,Apple 訂閱卻還在繼續。Apple 要求你說明之後的扣款會怎麼處理,並提供管理訂閱的入口。如果你有用 Sign in with Apple,也要安排適當地撤銷權杖。這些重點在 Apple 關於刪除帳號的指引裡都有詳細說明。
所以在測試計畫裡,要把帳號消失、付費權限狀態和訂閱管理分開來看。訂閱還是一次性購買這篇指南可以幫你把這個流程放回你的商業模式裡思考。
在測試 build 上執行的測試清單
只用測試帳號和虛構資料。每項檢查都記下 build、裝置、觀察到的結果和限制。
- 取消。 帳號和資料都還能存取。
- 刪除一個有資料的帳號。 最終狀態符合事先說明的處理;相關資料確實被移除。
- 切斷網路。 App 不會顯示假的成功。
- 部分失敗後重試。 請求可以完成,而且不會波及其他資料。
- 開啟第二個工作階段。 舊的存取權依照預定機制處理。
- 用同一個 email 重新建立帳號(如果允許)。 舊的私人資料不會再出現。
把這些情境加進 Devoria 測試表。要發給測試者的話,請參考 TestFlight 指南。主控台沒有錯誤訊息,不代表可以省掉檢查資料和流程。
準備送交 App Review
在審查備註裡,說明這個動作在哪裡、要怎麼測試。如果某個步驟依賴某項服務,要確保審查期間它可以正常使用。不要用備註承諾送審 build 裡還不存在的功能。
如果已經被指出問題,App 被 Apple 拒絕這一頁可以幫你整理回覆。要準備回覆的話,Apple Review Kit 能幫你找到被引用的規範、它的要求,以及修正和回覆的範例。
如果你在準備第一次送審,免費診斷會告訴你還剩哪些事要做,並寄給你我的 Apple 防退件檢查清單,裡面也包含刪除帳號。如果 Apple 已經拒絕你的 App,跟我預約一小時:我們視訊一起看那則訊息。
常見問題
iOS App 一定要提供刪除帳號嗎?
是的,只要你的 App 可以建立帳號:Apple 要求使用者能在 App 內發起刪除帳號。單純停用帳號不符合這項要求。這個流程要好找,也要說明會造成什麼後果。如果有一部分要在網頁上完成,連結必須直接開到對應的頁面。
使用者刪除帳號時,要刪掉哪些東西?
所有屬於這個人的東西,不只是他的使用者資料。列一份清單:登入身分、個人檔案和建立的內容、儲存的檔案和它們的參照、手機上的快取、第三方服務裡的資料。也要記下必須保留的資料、依據哪項義務,並告知使用者。沒有這份盤點,使用者資料消失了,照片可能還能存取。
Apple 接受不是立即完成的刪除帳號嗎?
接受。如果處理需要時間,Apple 接受延後完成的流程,前提是要告知使用者,並在完成時確認。只是記錄了請求的時候,App 不能讓人以為刪除已經完成。失敗時要保留有用的訊息和重試的方式,不要假裝帳號已經刪除。
使用者刪除帳號後,訂閱會怎樣?
刪除帳號後,Apple 訂閱可能還會繼續。Apple 要求你說明之後的扣款會怎麼處理,並提供管理訂閱的入口。如果你有用 Sign in with Apple,也要安排適當地撤銷權杖。在測試計畫裡,要把帳號消失、付費權限狀態和訂閱管理分開來看。
只在 Supabase Auth 刪除使用者就夠了嗎?
不夠,刪除 Auth 使用者不能證明你產品裡的所有物件都處理好了。根據 Supabase 文件,擁有 Storage 物件的使用者,在這個問題解決之前無法被刪除。刪除使用者也不會立即讓所有已發出的 JWT 失效。要準備一個伺服器端的處理程序來驗證請求者的身分。
送交 Apple 前要怎麼測試刪除帳號?
在測試 build 上使用測試帳號和虛構資料。執行六個情境:取消、刪除一個有資料的帳號、切斷網路、部分失敗後重試、開啟第二個工作階段、在允許的情況下用同一個 email 重新建立帳號。要檢查資料和流程:主控台沒有錯誤並不夠。要發布你的 build,請參考 TestFlight 指南。