續訂失敗的頻率高於使用者主動取消,而這種非自願流失是你仍然可以贏回的收入
讓大量訂閱終結的,是一張被拒付的銀行卡,而不是使用者點擊取消,而且商店會持續嘗試收款數週。本文說明 App Store 和 Google Play 上的帳單寬限期、帳單重試和帳戶保留是如何運作的,以及非自願流失究竟讓你損失了多少。

重點摘要
- 非自願流失指的是訂閱因續訂扣款失敗而終結,通常是銀行卡過期或被拒付,而不是使用者主動選擇取消。這是一個支付問題,兩家商店都在設計上幫你把它挽回。
- 當續訂失敗時,兩家商店都不會立即終止訂閱。Apple 會對銀行卡重試最多 60 天,Google Play 則保留一個 60 天的挽回視窗,分為寬限期和帳戶保留兩個階段。
- 在帳單寬限期內,訂閱者保留完整存取權限,同時商店進行重試。在任一商店的寬限期內挽回成功,都不會有任何中斷,不會損失任何天數,帳單日期也不會變動。
- 寬限期結束後,訂閱者會失去存取權限,但重試仍在繼續。此時挽回成功,Apple 會從挽回當天開始一個新的帳單週期,Google 則重置帳單日期,因此你會以全新的計時重新獲得該訂閱者。
- 這個挽回過程在背景執行,對你不收取任何費用。你無需支付處理商來重試,Apple 甚至會承擔寬限期內免費提供的天數成本。你損失的收入,通常是你自己讓它溜走的:關掉寬限期,或把一個本可挽回的訂閱者誤判為已流失。
- 這些訊號會透過你已經在用於退款的同一批 App Store Server Notifications 和 Google Play RTDN 資料流送達:DID_FAIL_TO_RENEW 和 SUBSCRIPTION_IN_GRACE_PERIOD、SUBSCRIPTION_ON_HOLD,然後在銀行卡扣款成功時收到 BILLING_RECOVERY 或 SUBSCRIPTION_RECOVERED。
- 處於寬限期或保留期的訂閱者還沒有流失。只有當 60 天視窗在沒有挽回的情況下關閉時,才把他們算作損失,否則你的流失率會顯得比實際更糟,而你的挽回率會看起來像零。
一張卡過期了,一家銀行拒付了一次續訂,一個你從未失去的訂閱者停止了付款。他們並沒有打開你的應用程式點擊取消。只是他們的付款方式失敗了,而除非你了解接下來會發生什麼,否則他們會悄無聲息地從你的收入中消失。這就是非自願流失,而在 App Store 和 Google Play 上,商店都不會在這筆付款失敗時就放棄。它會保留這個訂閱者,繼續對銀行卡重試,並且在大多數情況下會保持一個持續數週的視窗,錢仍然可能到帳。這種挽回大部分無論你是否行動都會發生。正確解讀它,決定了你是在統計一次真正的取消,還是把一筆商店即將替你收到的款項一筆勾銷。
這不是退款,也不是拒付。沒有任何東西被逆轉,沒有錢離開你的帳戶。收入只是從未到帳,而在你的報表裡,它看起來就像一次普通的到期。這正是它悄悄流失的原因。一個取消的使用者會告訴你他們要走了。一個卡失敗的使用者什麼都不會告訴你,而如果你對他們一視同仁,你就會失去那些商店本要替你贏回的人。
非自願流失究竟是什麼
流失有兩種形態,它們不是同一個問題。自願流失是一個決定:使用者取消,因為他們不再想要這個訂閱。非自願流失是一次意外:續訂扣款失敗,通常是因為卡過期、達到額度上限,或被銀行以定期扣款或跨境扣款為由標記。前者是一個產品問題,你用產品去解決。後者是一個支付問題,也正是商店在設計上替你解決的那一個。
為什麼它比看起來更嚴重
續訂失敗很常見,而且與你的應用程式有多好毫無關係。卡按計劃過期,餘額耗盡,銀行拒付它們認定看起來有風險的定期扣款。每一個續訂週期,都有一部分扣款會因訂閱者從未選擇的原因而失敗。因為這些訂閱者從未宣布他們要離開,所以很容易被誤讀為普通的到期,也很容易被跟丟,可挽回的收入就是這樣被記為呆帳的。
App Store 會持續嘗試 60 天
當一個自動續訂訂閱扣款失敗時,Apple 不會終止它。它會進入一個帳單重試期,持續最多 60 天,Apple 會在這個視窗內不斷嘗試銀行卡。在這 60 天裡訂閱者的體驗,取決於一個由你控制的設定:帳單寬限期。
帳單寬限期在 Apple 重試期間保留存取權限
開啟帳單寬限期,訂閱者會在寬限期長度內保留對你付費內容的完整存取權限,月度和年度方案最長可達 16 天,同時 Apple 對銀行卡進行重試。在寬限期內挽回成功,就完全沒有任何中斷:帳單日期不變,服務沒有損失任何天數,你的收入也沒有缺口。Apple 甚至會承擔它在寬限期內免費提供的那些天數的成本。這是那種幾乎純粹有利的罕見設定,因為一個被挽回的訂閱者甚至不會注意到扣款失敗過。
寬限期之後,存取權限停止,但重試不會停
一旦寬限期結束仍未成功扣款,訂閱者會失去存取權限,但 Apple 會在這 60 天視窗剩餘的時間裡繼續重試銀行卡。在這段時間裡挽回成功,訂閱者會在挽回當天續訂,開始一個新的帳單週期,而 Apple 不會對已經免費給出的寬限天數收費。只有當整整 60 天過去仍無成功付款時,訂閱才會徹底到期。關掉寬限期,訂閱者會在續訂失敗的那一刻立即失去存取權限,而那正是把一扇上鎖的門遞給一個付費使用者的最糟時機。
標記每一步的通知
你的 App Store Server Notifications 資料流會講述整個過程。DID_FAIL_TO_RENEW 告訴你一次續訂失敗了,當訂閱者仍在寬限期內並應保留存取權限時,它會帶有 GRACE_PERIOD 子類型。GRACE_PERIOD_EXPIRED 標記寬限期結束,也就是撤銷存取權限的時點。帶有 BILLING_RECOVERY 子類型的 DID_RENEW 意味著銀行卡終於扣款成功,訂閱者回來了。帶有 BILLING_RETRY 子類型的 EXPIRED 意味著 60 天用盡,訂閱者真正流失了。處理好這四個,你的存取權限就始終與真實狀態一致。

Google Play 把同樣的 60 天一分為二
Google Play 以不同的形態和自己的一套術語運行同樣的思路。一次失敗的續訂會讓訂閱先後經過寬限期和帳戶保留,兩者合起來構成一個 60 天的挽回視窗。
寬限期保留存取權限,帳戶保留則收回它
在寬限期內,訂閱者保留存取權限,同時 Google 對銀行卡進行重試,到期時間會隨著重試的進行而順延。如果銀行卡扣款成功,訂閱會挽回,原有的續訂日期完好無損,就好像失敗從未發生過。如果寬限期用盡,訂閱會進入帳戶保留。這時存取權限停止,並一直關閉直到付款問題被修復。從帳戶保留中挽回成功,存取權限會恢復,但帳單日期會重置為挽回當天,而不是原來的日期。
這 60 天的算法在 2025 年底發生了變化
自 2025 年 12 月 1 日起,Google 將帳戶保留時長計算為 60 天減去你的寬限期。16 天的寬限期留下 44 天的保留,而合併後的挽回視窗仍保持 60 天。選擇更長的寬限期,你就是在用保留時間換取存取時間,但總視窗不會改變。Google 建議透過其 API 讀取即時訂閱狀態,而不是假定一個固定的保留時長,因為這個劃分現在是推算出來的,而不是固定的。
你需要處理的 RTDN 類型
Google Play 的 Real-time Developer Notifications 會點明每個階段。SUBSCRIPTION_IN_GRACE_PERIOD 意味著保留存取權限並提示使用者修復銀行卡。SUBSCRIPTION_ON_HOLD 意味著立即撤銷存取權限。SUBSCRIPTION_RECOVERED 意味著付款扣款成功,存取權限恢復。SUBSCRIPTION_CANCELED 然後 SUBSCRIPTION_EXPIRED 意味著視窗在未修復的情況下關閉,訂閱者已經流失。這些會落在你已經在用於作廢購買和退款的同一條 RTDN 管道上。
| 階段 | App Store | Google Play |
|---|---|---|
| 續訂失敗,保留存取 | 帳單寬限期,最長 16 天 | 寬限期,長度由你設定 |
| 續訂失敗,失去存取 | 寬限期之後,直到 60 天餘下的時間 | 帳戶保留 |
| 總挽回視窗 | 最長 60 天 | 60 天,寬限期加保留 |
| 寬限期內挽回 | 帳單日期不變,不損失天數 | 續訂日期不變,無中斷 |
| 寬限期後挽回 | 從挽回當天開始新的帳單週期 | 帳單日期重置為挽回當天 |
| 徹底終結 | EXPIRED,子類型 BILLING_RETRY | SUBSCRIPTION_EXPIRED |
非自願流失讓你損失了什麼
這裡的成本不是退款那種,把你已入帳的錢追回去。它是從未出現的收入,藏在你的數字裡,看起來像一次普通的到期。
一次你早已付出代價去贏得的續訂
每一個定期訂閱者都花了你真金白銀去贏得:獲取他們的廣告投放和創意,引導流程,以及此後每個週期你為他們運行的運算資源、儲存和 API 呼叫。一個因死卡而失去的訂閱者,會帶著所有這些沉沒成本無法收回地離開,而為了補上這筆收入,你要為一個新使用者重新支付一遍獲客成本。一個被商店挽回的訂閱者,重新獲取的成本為零。這兩者之間的差距,完整的重新獲客對零,正是非自願流失真正撬動的那筆錢。
這個挽回過程在免費運行,只要你允許它
這裡就是那個被忽略的部分。在寬限期和重試期間,商店在替你收款,對你不收取任何費用。你不用運行催繳,你不用為每次重試向處理商付費,你也不用發送哪怕一封電子郵件。挽回在背景跨越一個 60 天的視窗進行。當這筆收入終究還是損失了,通常可以追溯到兩個自己造成的錯誤之一:關掉寬限期,讓訂閱者在卡失敗的那一刻被鎖在門外;或者把一個仍在挽回視窗內的訂閱者當作硬性取消,放棄了商店尚未放棄的收入。
如何真正把非自願流失保持在低位
把你的精力花在少數幾個能推動挽回的設定和訊號上,讓商店去做它本就做得很好的重試。
開啟帳單寬限期
在兩家商店上,都啟用寬限期。它會在商店重試期間把付費訂閱者留在你的應用程式裡,因此一個被挽回的訂閱者不會損失一天,這也是這裡槓桿最高的單一控制項。在 App Store 上,它是 App Store Connect 裡的一個開關。在 Google Play 上,自動續訂的基礎方案預設開啟寬限期,所以你要做的就是保持它開啟,並設定一個你願意免費提供的長度。
讓存取權限在寬限期和保留期與真實狀態一致
在寬限期內保留存取權限,對應 Apple 帶 GRACE_PERIOD 子類型的 DID_FAIL_TO_RENEW 和 Google 的 SUBSCRIPTION_IN_GRACE_PERIOD。在 Apple 的寬限期到期時以及 Google 發送 SUBSCRIPTION_ON_HOLD 時撤銷存取權限。在挽回到來的那一刻恢復它,對應 BILLING_RECOVERY 或 SUBSCRIPTION_RECOVERED。在一個方向上弄錯,你會白送數週的免費存取。在另一個方向上弄錯,你會鎖住一個只差一次重試就會再次付款給你的訂閱者。
把挽回與流失分開統計
一個處於寬限期或帳戶保留的訂閱者還沒有流失。在挽回視窗未經成功扣款而關閉之前,不要把他們記為損失。如果你的分析把續訂失敗和使用者取消揉進一個數字,你的流失率讀起來會比實際更糟,你的挽回率讀起來會像什麼都沒發生。把非自願流失單獨分出來,並追蹤它的挽回率,因為這個比率是一個你真的可以用一個設定和一次提示去改變的數字。
提示修復,然後讓開路
你能加上的唯一有用的東西,就是一次輕推。兩家商店都允許你提示訂閱者更新他們的付款方式,Apple 在應用程式內進行,Google 透過其 In-App Messaging API 和 Play 通知進行。寬限期內一次時機得當的提示會提升挽回,因為這些使用者大多仍然想要訂閱,只是需要修復一張卡。除了這次輕推之外,就讓商店去重試。它已經在替你做那個昂貴的部分,免費,持續數週。
RefundHalt 已經在為退款監聽的那同一批 App Store Server Notifications 和 RTDN 資料流,也承載了每一個這些帳單訊號。寬限期、保留、挽回和非自願流失會落在你的儀表板裡,緊挨著你的退款,因此你可以看著挽回視窗發揮作用,而不是去猜測哪些失敗的續訂已經走了,哪些正在回來。
簡短版本
一次失敗的續訂不是一次取消,而商店會在數週內都這樣對待它。Apple 會對銀行卡重試最多 60 天,並且在寬限期開啟時,在重試的同時把訂閱者留在你的應用程式裡。Google Play 把同樣的 60 天分成一個保留存取的寬限期和一個收回存取的帳戶保留。開啟寬限期,處理好寬限期和保留期的通知讓存取權限與現實一致,提示使用者修復他們的卡,並且只有在視窗空手關閉之後才把訂閱者算作流失。非自願流失是商店正在主動替你堵上的那一個收入漏洞。你的工作大多是別擋路,並把你的數字讀得足夠好,以便知道損失什麼時候是真的。
常見問題解答
- 自願流失和非自願流失有什麼區別?
- 自願流失是使用者選擇取消一個訂閱。非自願流失是訂閱因續訂扣款失敗而終結,通常是卡過期或被拒付,而使用者並沒有決定離開。非自願流失是一個支付問題,商店會嘗試替你挽回,所以不應該像對待一次真正的取消那樣去統計或處理它。
- 當續訂付款失敗時,訂閱者還能保留存取權限嗎?
- 這取決於所處階段。在帳單寬限期內,訂閱者保留完整存取權限,同時商店對銀行卡進行重試,App Store 和 Google Play 都是如此。寬限期結束後,存取權限停止:Apple 會在 60 天視窗剩餘的時間裡繼續重試,此時存取關閉,而 Google 會把訂閱移入帳戶保留,在付款修復之前存取權限被收回。
- 商店會對一個失敗的訂閱持續嘗試扣款多久?
- 兩家商店都最長 60 天。Apple 運行一個最長 60 天的帳單重試期,帳單寬限期就坐落在其中。Google Play 保留一個 60 天的挽回視窗,分為寬限期和帳戶保留,其中自 2025 年 12 月 1 日起,帳戶保留被計算為 60 天減去你的寬限期長度。
- 我應該開啟帳單寬限期嗎?
- 對大多數應用程式來說,應該。寬限期會在商店重試一張失敗的卡時把付費訂閱者留在你的應用程式裡,因此任何在其中挽回成功的人都不會損失一天,也不會注意到這次失敗。代價是給那些永遠不會挽回的訂閱者幾天的免費存取。好處是留住那些本會因突然被鎖定而離開的人。
- 一個處於寬限期或帳戶保留的訂閱者是不是已經流失了?
- 不是。他們在挽回視窗之內,商店仍在嘗試收款。把他們算作流失會誇大你的流失率,並掩蓋你的挽回率。只有當 60 天視窗在沒有成功付款的情況下關閉時,才把一個訂閱者記為損失,兩家商店會透過 Apple 上的 EXPIRED(帳單重試)通知和 Google Play 上的 SUBSCRIPTION_EXPIRED 來發出這個訊號。
- 非自願流失會產生退款或拒付嗎?
- 不會。沒有任何東西被逆轉,沒有錢離開你的帳戶。一次失敗的續訂是從未到帳的收入,而不是一筆被拉回的付款。這與退款或拒付恰好相反,也正是它為什麼會在你的報表裡藏成一次普通的到期,而不是顯示為一筆支出。
資料來源與延伸閱讀
- Apple Developer: Reducing Involuntary Subscriber Churn (billing retry and billing grace period for auto-renewable subscriptions)
- Apple: App Store Connect Help, Enable Billing Grace Period for auto-renewable subscriptions (grace keeps access; up to 16 days on monthly and yearly plans)
- Apple Developer: App Store Server Notifications notificationType and subtype (DID_FAIL_TO_RENEW with GRACE_PERIOD, GRACE_PERIOD_EXPIRED, DID_RENEW with BILLING_RECOVERY, EXPIRED with BILLING_RETRY)
- Android Developers: Subscription lifecycle (grace period keeps access, account hold removes it, and the recovery RTDN types)
- Google Play Console Help: Changes to Google Play subscription payment recovery periods (from December 1, 2025, account hold is 60 days minus grace period)
- Android Developers: Real-time developer notifications reference (SubscriptionNotification types including SUBSCRIPTION_IN_GRACE_PERIOD, SUBSCRIPTION_ON_HOLD, SUBSCRIPTION_RECOVERED, SUBSCRIPTION_EXPIRED)
RefundHalt
App Store 與 Google Play 的退款自動駕駛
繼續閱讀
過多的退款申請,代價可能遠超退款本身,因為兩大 App 商店都把它視為品質訊號
Apple 審查準則 5.6.4 把過多的退款申請列為 App 未達品質標準的跡象,Google 的開發人員發布協議也允許它依退款率下架新開發人員的 App。本文整理兩家商店的原文、下架的實際成本,以及如何避開風險。
在處理退款之前先驗證 App Store 伺服器通知,因為任何人都能向你的 webhook URL 發送請求
在檢查簽章之前,一則退款通知只不過是一個 HTTPS 請求。本文說明如何驗證 App Store 伺服器通知和 Google Play RTDN 訊息、各商店簽署的內容,以及偽造的退款或遭錯誤拒絕的退款會讓你付出什麼代價。