App Store 退款:開發者看得到什麼
作者:Mehdi Azizi
發布於 ,8 分鐘
App Store 退款由 Apple 決定。開發者收到 CONSUMPTION_REQUEST,可在 12 小時內回應,再透過 REFUND 得知結果。
在 App Store 上,核准或拒絕退款的永遠是 Apple,從來不是開發者。客戶在 Apple 的網站上或從你的 app 裡提出申請。如果你接好了 Apple 的伺服器通知,申請送出時你會收到 CONSUMPTION_REQUEST 通知,做出決定時再收到 REFUND 或 REFUND_DECLINED。在這中間,你有 12 小時可以送出使用資料和你的偏好,前提是客戶同意。
退款一旦核准,該筆購買就會從客戶的有效權益中移除,並在你的銷售報告中以負數呈現。這篇指南會詳細說明每個步驟、你可以傳給 Apple 什麼,以及面對濫用的退款申請你可以做什麼。規則來自 2026 年 11 月 3 日重新查閱的 Apple 頁面。實際案例則來自我 10 月在自己的 app 上接好的一個提醒機制。
App Store 退款由誰決定?
Apple,而且只有 Apple。Apple 的支援頁面描述了客戶的流程:登入 reportaproblem.apple.com,選擇「Request a refund」,填寫原因,再選擇相關的購買項目。Apple 建議客戶等待 24 到 48 小時取得回覆。
客戶也可以從你的 app 裡申請退款。StoreKit 為此提供了一個申請表單,iOS 15 起可用。Apple 建議從帳號設定或說明選單呼叫它。表單會顯示購買項目和一份原因清單,Apple 最多花 48 小時做出決定。
無論哪種情況,你都不需要核准任何東西。你只能提供資訊和偏好,而這些只是 Apple 決策中的眾多依據之一。
每個步驟,雙方各看到什麼
| 步驟 | 客戶端 | 開發者端 |
|---|---|---|
| 申請 | Apple 的表單或 app 內的申請表單 | CONSUMPTION_REQUEST 通知 |
| 12 小時內 | 等待 | 可以送出使用資料 |
| 48 小時內 | Apple 回覆 | REFUND 或 REFUND_DECLINED 通知 |
| 核准之後 | 款項退回原付款方式 | 購買從有效權益中移除,單位數為負 |
| 客戶提出異議後 | Apple 撤銷退款 | REFUND_REVERSED 通知,需要恢復存取權 |
App Store Connect 只會在 Sales and Trends 裡顯示已經核准的退款。申請本身只會透過伺服器通知送達。沒有這些通知,你只能事後才發現退款。
退款相關的伺服器通知
App Store Server Notifications V2 有五種類型跟這裡有關。你會在 App Store Connect 中設定的 HTTPS 網址收到它們,正式環境一個、sandbox 一個。
| 通知 | 代表什麼 | 你要做什麼 |
|---|---|---|
CONSUMPTION_REQUEST | 客戶申請退款 | 在 12 小時內回應(若有同意) |
REFUND | Apple 已退款該筆交易 | 移除已退款的內容或存取權 |
REFUND_DECLINED | Apple 拒絕了申請 | 不用做什麼,存取權繼續有效 |
REFUND_REVERSED | 客戶提出異議後,Apple 撤銷了退款 | 恢復你先前移除的內容 |
REVOKE | 透過家人共享分享的購買項目已不再可用 | 移除該家庭成員的存取權 |
你的伺服器必須回傳 200 到 206 之間的 HTTP 狀態碼。根據通知回應的說明頁面,否則 Apple 會重試五次,分別在前一次嘗試後的 1、12、24、48 和 72 小時。在 sandbox 中只會送一次。
Consumption API:你可以告訴 Apple 什麼
申請送達時,你可以用 Send Consumption Information 回應。規則就是 Apple 的一句話:「Respond within 12 hours of receiving the CONSUMPTION_REQUEST notification.」API 第 2 版適用於所有產品類型,包括訂閱。
請求的欄位:
| 欄位 | 必填 | 告訴 Apple 什麼 |
|---|---|---|
customerConsented | 是 | 客戶同意分享他的資料 |
deliveryStatus | 是 | 購買項目已交付且正常運作,或者為什麼沒有交付 |
sampleContentProvided | 是 | 購買前是否提供了試用、片段或說明 |
consumptionPercentage | 否 | 已使用的比例,0 到 100,000 對應 0 到 100% |
refundPreference | 否 | 你的偏好:DECLINE、GRANT_FULL 或 GRANT_PRORATED |
有兩點很重要。如果 deliveryStatus 不是 DELIVERED,已使用比例必須是零。另外,訂閱按比例退款時,你要省略已使用比例:由 Apple 計算。
同意是一切的前提。Apple 寫道:「You must obtain valid consent from the customer before sharing their personal data with Apple in the Send Consumption Information API.」沒有同意,就不要回應。Apple 也禁止用廣告追蹤視窗來取得這個同意:「Don't use the AppTrackingTransparency prompt to obtain consent」。
如果你用 RevenueCat
用 RevenueCat 的話,接收 Apple 通知並回應申請的是它,功能叫 Refund Control。你可以從四種政策中選一種:偏好全額退款、偏好拒絕、只送出使用資料,或者不回應。
啟用資料分享,就等於確認你已經取得客戶的同意。RevenueCat 自己也說:「Enabling consumption data sharing confirms that you obtained consent from your Customers.」它也建議把「Prefer no refund」只用在特定族群,並在這個偏好影響到大部分客戶時提出警告。
如果你也想在自己的伺服器上收到通知,RevenueCat 在 app 設定中提供了「Apple Server Notification Forwarding URL」欄位。說明在它關於 Apple 通知的頁面。我就是這樣用的。用 RevenueCat 建置訂閱的方式,請看 RevenueCat 與 iOS app 內訂閱。
對你的收入和訂閱有什麼影響
對存取權。根據 currentEntitlements 的文件,「Products that the App Store has refunded or revoked don't appear in the current entitlements」。如果你的 app 用 currentEntitlements 檢查權益,已退款的存取權會自動消失。交易會在 revocationDate 和 revocationReason 中記錄撤銷的日期和原因。
對報告。根據銷售報告的說明,退款會以負數的單位數和客戶價格顯示。訂閱方面,訂閱資料的說明頁面會把全額和部分退款列入事件,並從每日單位數中扣除。
對你的信譽。Guideline 5.6.4 把過多的退款申請列為品質不足的跡象之一。高退款率不只是損失金錢:Apple 可能會把它納入評估你是否遵守行為準則。
我的案例:接在我 app 上的提醒
2026 年 10 月 12 日,我在自己的 app 上接了一個提醒。RevenueCat 把 Apple 的通知轉發到 devoria.fr 的一個路由。它會驗證 Apple 的簽章,然後發提醒給我,不含金額。我想在申請送達的當下就看到,而不只是看到結果。
10 月 18 日,第一筆真正的申請出現在 TradaZen,我的交易模擬器上。一個年訂閱,在 7 天免費試用結束時付款。填寫的原因:誤購。三個心得:
- 同一筆申請可能會送來好幾次。同一個晚上我收到三次一樣的提醒。之後每個提醒都會依通知類型和交易 ID 去除重複。
- 決定在不到一天內就出來了。Apple 在申請後大約 22 小時拒絕了。客戶保留了存取權。
- 被拒絕不代表結束。同一位客戶兩天後又針對同一筆交易再申請了一次。
試用結束時以「誤購」為由的申請,不是靠回應 Apple 就能贏的。要在付費牆上、在第一次付款之前就預防。
在不違反規則的前提下減少濫用申請
允許的做法:
- 在客戶同意的情況下,用正確的資料回應每一筆申請。
- 表達有針對性的偏好,例如對已經使用完的購買項目表示拒絕,而不是對所有人一律拒絕。
- 把每一筆
REFUND對應到一個客戶帳號。Apple 關於退款通知的頁面建議這麼做,用來找出重複退款。 - 在購買前清楚說明買的是什麼。Guideline 3.1.2(c) 要求在提供訂閱之前,說明使用者用這個價格能得到什麼。
禁止的做法:
- 送出不實資料讓申請被拒,或在沒有同意的情況下回應。
- 透過廣告追蹤視窗取得同意,Apple 明文排除了這種做法。
- 設計陷阱式購買。Guideline 5.6 禁止誘導客戶進行非自願的購買,或對沒有交付的東西收費。
- 對申請退款的客戶施壓。同一條規則要求客服要保持尊重,不得恐嚇。
最好的著力點還是在前端:付費牆要寫清楚價格、第一次付款的日期,以及取消的方式。要避免的錯誤請看付費牆的常見錯誤,試用期的規則請看 App Store 免費試用。
上線前先測試
根據退款申請測試的說明頁面,sandbox 和 Xcode 的 StoreKit 測試都支援退款申請。在 sandbox 中,任何原因都會自動核准。要模擬拒絕,選擇「Other」並輸入 DECLINE。要模擬按比例退款,輸入 GRANT_PRORATED。在 sandbox 中,你的使用資料回應必須在五分鐘內送出。
較少被退款的訂閱
iOS & Android Kit 以我自己 app 的程式碼為基礎,onboarding、付費牆和訂閱都已經寫好,並以四個步驟帶你一路上架 App Store,依你自己的步調進行。完整的建置方式詳見 iOS app 內訂閱頁面,Apple 的訂閱規則則在 guideline 3.1.2。
在推出你的付費牆之前,先做免費診斷:它會告訴你專案真正卡住的地方,並寄給你我的 Apple 防退件檢查清單。
常見問題
開發者可以拒絕 App Store 退款嗎?
不行。由 Apple 單獨決定。你可以送出使用資料和偏好,例如 DECLINE,這些只是眾多依據之一。最終決定權在 Apple。
開發者會收到退款申請的通知嗎?
會,前提是接好了 App Store Server Notifications V2。Apple 會在申請時送出 CONSUMPTION_REQUEST,做出決定時再送出 REFUND 或 REFUND_DECLINED。沒有通知的話,你只能在報告中看到已核准的退款。
Apple 處理退款申請要多久?
Apple 對客戶說是 24 到 48 小時。StoreKit 的文件則說最多 48 小時。在你這邊,你有 12 小時可以送出使用資料。
退款後存取權會怎樣?
已退款的購買項目會從客戶的有效權益中移除:StoreKit 2 不會再在 currentEntitlements 中回傳它。如果 Apple 之後撤銷退款,你會收到 REFUND_REVERSED,必須恢復存取權。
回應 Apple 需要客戶同意嗎?
需要。透過 Consumption API 分享任何資料之前,Apple 都要求有效的同意。沒有同意,就不要回應通知。也不能用廣告追蹤視窗來取得同意。
退款會對我的 app 不利嗎?
有可能。Guideline 5.6.4 把過多的退款申請列為品質不足的跡象之一,Apple 可能會把它納入評估是否遵守行為準則。

