付費 App 的退款永遠不會通知你的伺服器,所以只能由 App 自己發現
買斷制付費 App 的退款會繞過你的伺服器監聽的所有通知。Google 給買家兩小時的退貨期並解除安裝 App,Apple 可依據你簽署的協議在 90 天內退款,兩者都不會向你索取證據。本文說明各商店會告訴你什麼、退款讓你損失什麼,以及如何在 App 內偵測。

重點摘要
- 付費 App 退款針對的是 App 下載本身的價格,而不是 App 內購買。Apple 和 Google 都沒有為它記載任何伺服器通知。
- Google Play Console 說明文件指出,買家購買付費 App 後有最多兩小時可以退貨並取得全額退款,同一款 App 只能退一次。
- Google Play 的退款政策指出,App 會在退款過程中被解除安裝,買家再次購買同一款 App 後不能再次退款。
- Apple 的 App Store Server Notifications V2 中的 REFUND 類型涵蓋消耗性項目、非消耗性項目、自動續訂型訂閱和非續訂型訂閱。App 本身的購買不在這份清單中。
- Apple 開發者計劃授權協議 Schedule 2 第 6.3 條允許 Apple 為下載後 90 天內取消購買的買家退款,並由開發者向 Apple 償付這筆款項。
- Apple 的 StoreKit 文件在 AppTransaction(App 購買的簽署紀錄)上列出了 revocationDate,App 可以在裝置上檢查它。
- CONSUMPTION_REQUEST 和 Google Play 的 orders.reviewrefund 都沒有記載適用於 App 下載購買,因此付費 App 退款是在沒有開發者證據的情況下裁定的。
買斷制付費 App 的退款走的是一道側門,大多數退款工具從不盯著它。當買家退掉的是 App 本身,而不是在 App 內買的東西時,Apple 和 Google 會直接從你的收益中扣回這筆錢,卻不會向你的伺服器傳送任何通知。Google 至少會解除安裝 App。在 iOS 上,Apple 官方論壇裡的開發者反映,退款後的買家仍在繼續使用 App。如果你銷售付費 App,付費 App 退款是唯一一種你只能在報表裡看到一行負數的退款,除非 App 在裝置上主動檢查。
Google Play 與 App Store 的付費 App 退款規則
兩家商店都把下載購買視為一項獨立商品,適用各自的規則。以下是各商店文件中的說法。
| 規則 | Google Play | App Store |
|---|---|---|
| 快速自助退貨 | 購買後最多兩小時內,全額退款 | 無文件記載 |
| 較長的申請期限 | 買家可在 48 小時內申請,之後需聯絡開發者 | 依據開發者協議 Schedule 2,Apple 可在下載後 90 天內退款 |
| 可退次數 | 每款 App 一次。再次購買後不能再退 | 無文件記載 |
| App 會怎樣 | 在退款過程中被解除安裝 | 無文件記載。開發者反映退款買家仍可使用 |
| 開發者能否退款 | 可以,僅限全額退款,在 Play Console 中操作 | 不能 |
| 傳給你的伺服器通知 | 無文件記載 | 無文件記載 |
| 向你索取證據 | 無文件記載 | 無文件記載 |
Google Play 的兩小時退貨如何運作
Google 的 Play Console 說明文件寫得很直白。購買付費 App 後,使用者有最多兩小時可以退貨並取得全額退款,而且同一款 App 只能退一次。Google 面向消費者的退款政策還補充,在 48 小時內,買家可能可以視購買情況取得退款,App 會在退款過程中被解除安裝,再次購買同一款 App 的人不能再為它退款。超過 48 小時後,Google 會請買家去找開發者。
Apple 如何為付費 App 退款
在 App Store 上,買家透過 reportaproblem.apple.com 向 Apple 提出申請,選擇原因,然後選取該 App。Apple 表示預計會在 24 到 48 小時內提供處理結果。你無法自行為 App Store 購買退款。你的合約設定了最長期限。Apple 開發者計劃授權協議 Schedule 2 第 6.3 條規定,如果買家希望在下載後九十天內取消,或者 App 不符合你的規格說明或適用法律,Apple 可以全額退款,而你需要向 Apple 償付該金額或給予等額抵扣。
為什麼你的伺服器永遠收不到付費 App 退款的消息
兩家商店發出的所有退款訊號都是為 App 內購買設計的。Apple 將 notificationType 描述為觸發通知的 App 內購買或外部購買事件。它的 REFUND 類型涵蓋消耗性項目、非消耗性項目、自動續訂型訂閱或非續訂型訂閱。Get Refund History 傳回的是顧客已退款的 App 內購買。App 下載不在其中任何一份清單裡。
Google 也是一樣。即時開發人員通知涵蓋訂閱、一次性產品和作廢購買,而作廢購買的 productType 只會是訂閱或一次性購買。Voided Purchases API 說明它適用於一次性 App 內訂單和訂閱,而且只能回溯 30 天。
付費 App 退款會觸發 CONSUMPTION_REQUEST 嗎?
不會。Apple 的文件指出,當顧客為消耗性 App 內購買或自動續訂型訂閱申請退款時,它會傳送 CONSUMPTION_REQUEST。這是兩家商店中僅有的兩種會向開發者索取證據的退款流程之一。另一種是 Google Play 的退單審查,需在 24 小時內透過 orders.reviewrefund 回應,它同樣經由 App 內購買的通知流到達。兩者都沒有記載適用於 App 下載。付費 App 退款的裁定,不會參考你能提供的任何東西。
退款後的買家還能繼續使用 App 嗎?
在 Google Play 上,政策規定 App 會被解除安裝。在 iOS 上,Apple 論壇裡有開發者正是在問這個問題。2025 年 3 月的一篇貼文寫道:「當使用者對買斷制付費 App 退款後,他們仍然可以存取該 App。」另一篇 2022 年的貼文懷疑有買家購買、安裝、退款後繼續使用。第三篇貼文發於 2025 年 6 月,詢問 App Store Server Notifications V2 究竟會不會回報 App 層級的退款。這三篇貼文都沒有得到 Apple 的回答。
付費 App 退款讓你損失多少錢
收益這一側是可預測的。Google 的 Play Console 說明文件指出,你退款時它會退還其服務費,因此從你收益中扣除的是你的分潤,而不是標價。如果退款發生在 Google 已經付款給你之後,會從未來的付款中扣除;如果你的餘額持續為負至少 48 小時,Google 可能會從你的銀行帳戶扣款。在 Apple 這一側,合約規定你償付與價格相等的金額。實務上,RevenueCat 在 2022 年回報,Apple 扣除的是顯示為 Extended Partner Share 的扣佣後金額,也就是說 Apple 沒有保留它的抽成。
拿不回來的,是你為服務這位買家已經付出的成本。來看一個示例。一款售價 $6.99 的付費相片 App 透過雲端模型執行濾鏡,並把專案同步到雲端儲存空間。你為一則廣告付了錢,這則廣告帶來了這位買家。
| 成本項目 | 在 Google Play 上是否退還 | 在 App Store 上是否退還 |
|---|---|---|
| 你在 $6.99 中的分潤 | 從你的收益中扣回 | 從你的收益中扣回 |
| 商店服務費或佣金 | 由 Google 退還給你 | 根據 RevenueCat 的報告,不收取 |
| 已用掉的雲端推論和 API 呼叫 | 否 | 否 |
| 已同步專案的儲存空間 | 否 | 否 |
| 取得該買家的廣告支出 | 否 | 否 |
| 買家繼續使用 App 時持續產生的伺服器成本 | 終止,App 已被解除安裝 | 持續,直到你的 App 進行檢查 |
最後一列正是 iOS 變得昂貴的地方。保留了 App 的退款買家會繼續呼叫你的後端,退款之後的每一次推論請求、同步和 API 呼叫,都是沒有收入支撐的成本。對於沒有伺服器成本的付費 App,退款只是少了一筆銷售。對於有後端的 App,它可能變成一張不斷累積的帳單。
如何在 App 內偵測付費 App 退款
既然伺服器什麼也收不到,檢查就必須從裝置上開始,再通知你的伺服器。
在 iOS 上,讀取 AppTransaction 的 revocationDate
AppTransaction 是 App Store 對顧客購買該 App 的簽署紀錄。Apple 的 StoreKit 文件現在在其上列出了 revocationDate 屬性,描述為 App 購買的撤銷日期。在啟動時讀取 AppTransaction.shared,驗證結果,並把非 nil 的 revocationDate 視為已退款的下載。把簽署值傳送到你的伺服器,讓它停止為該帳戶提供服務。
- Apple 表示,即使在退款或重新購買之後,同一個 Apple 帳號的 appTransactionID 也保持不變。所以用它作為紀錄的鍵,再次付費的買家就能被辨識出來。
- AppTransaction.refresh() 會從 App Store 取得一份新的紀錄,但會顯示登入提示。Apple 建議只在使用者明確操作之後呼叫它,例如點一下「回復」按鈕。
- 簽署值存放在裝置上。Apple 的文件沒有為它描述任何伺服器通知,所以你的伺服器只能知道 App 回報的內容。

在 Android 上,向 Play Integrity 請求授權判定
Google 的解除安裝能處理大多數情況,但某些副本可能在解除安裝後依然存在,例如從備份側載的副本。Play Integrity API 會為已登入的帳戶傳回 appLicensingVerdict。LICENSED 表示使用者擁有 App 授權。UNLICENSED 表示沒有,Google 建議顯示 GET_LICENSED 對話方塊。UNEVALUATED 表示 Google 無法檢查,例如使用者沒有登入 Google Play。Google 也指出,在一些較舊的裝置上,使用者解除安裝後仍保有授權,所以 LICENSED 並不能在每台裝置上都證明購買仍然有效。
讓伺服器擔任守門人
用戶端檢查可能被修補繞過。真正值得保護的是你的後端所做的付費工作,所以讓後端拒絕以下帳戶的呼叫:最近一次回報為退款、回報為 UNLICENSED 判定,或在你設定的寬限期過後仍沒有任何判定。這樣才能避免退款變成免費的運算資源。
付費 App 何時應該轉向 App 內購買
Apple 自己關於變更商業模式的指南,描述了如何從付費 App 轉為提供 App 內購買的免費 App,並使用 AppTransaction 上的 originalAppVersion,繼續為購買過付費版本的使用者提供進階功能。這項轉變在退款方面的好處很具體。一旦價格放在非消耗性項目或訂閱上,退款就會以 REFUND 通知和作廢購買的形式到達,你的伺服器可以據此採取行動,而 App Store 上的訂閱退款申請會觸發 CONSUMPTION_REQUEST。這些正是 RefundHalt 監聽的訊號,並且會在 12 小時和 24 小時的期限內回應。付費下載一個都不會給你。
常見問題解答
- 在 Google Play 上,買家有多長時間可以退掉付費 App?
- 根據 Google 的 Play Console 說明文件,購買後最多兩小時內可全額退款,而且每款 App 只能退一次。Google 的退款政策也指出,買家可能可以在 48 小時內取得退款,超過之後 Google 會請買家聯絡開發者。App 會在退款過程中被解除安裝。
- 有人為我的付費 App 退款時,Apple 會通知我的伺服器嗎?
- 沒有任何有文件記載的通知。Apple 的 App Store Server Notifications 涵蓋的是 App 內購買事件,REFUND 類型只列出消耗性項目、非消耗性項目、自動續訂型訂閱和非續訂型訂閱。App 可以在裝置上讀取 AppTransaction 的 revocationDate,並回報給你的伺服器。
- 退款後的買家還能繼續使用付費 iOS App 嗎?
- Apple 論壇上的開發者反映可以,而且 Apple 的文件沒有描述任何在退款後移除 App 的步驟。在啟動時檢查 AppTransaction 的 revocationDate,並讓你的伺服器停止為回報了已退款下載的帳戶提供服務。
- 我可以自己為付費 App 退款嗎?
- 在 Google Play 上可以。Play Console 允許你為付費 App 發出全額退款,但不能部分退款,而且 Google 會退還其服務費。在 App Store 上不行。只有 Apple 能為 App Store 購買退款。
- 我能用使用數據作為證據,對付費 App 退款提出申訴嗎?
- 不能。Apple 的 CONSUMPTION_REQUEST 記載適用於消耗性項目和自動續訂型訂閱,而 Google Play 透過 orders.reviewrefund 進行的退單審查,經由為 App 內產品和訂閱設計的通知到達。兩家商店都沒有為 App 購買本身記載任何證據流程。
資料來源與延伸閱讀
- Play Console Help: Issue refunds and cancellations
- Google Play Help: Apps, games and in-app purchases refund policies
- Google Play Developer API: Voided Purchases API
- Android Developers: Real-time developer notifications reference
- Android Developers: Play Integrity API integrity verdicts
- Apple Developer Documentation: notificationType (App Store Server Notifications V2)
- Apple Developer Documentation: AppTransaction
- Apple Developer Documentation: Supporting business model changes by using the app transaction
- Apple Developer Program License Agreement, Schedule 2 section 6.3
- Apple Support: Request a refund for apps or content that you bought from Apple
- Apple Developer Forums: How to detect refund for paid app? (March 2025)
- Apple Developer Forums: AppTransactionId support and app-level refunds (June 2025)
- RevenueCat: Does Apple keep its commission after you refund a purchase?
RefundHalt
App Store 與 Google Play 的退款自動駕駛
繼續閱讀
如果你的 App 仍在使用 App Store Server Notifications V1,Apple 永遠不會就訂閱退款徵詢你的意見
Apple 於 2023 年 6 月棄用了 App Store Server Notifications V1,而 V1 從未獲得訂閱的 CONSUMPTION_REQUEST、REFUND_DECLINED 或 REFUND_REVERSED。本文說明 V1 伺服器會錯過什麼、代價有多高,以及如何在不漏掉任何一筆退款的情況下遷移到 V2。
Apple 按月付款、承諾 12 個月的訂閱,一次退款可能終止整年,也可能只退一個月
Apple 按月付款、承諾 12 個月的訂閱把退款分成兩種情況。退還過去某個月,扣款照常繼續。退還當前月份,承諾期立即終止。本文說明每種情況如何送達你的伺服器、造成多少損失,以及該向 Apple 傳送什麼。