# Apple 挽留訊息 API：取消訂閱前顯示

> Apple 的 Retention Messaging API 會在訂閱者點「Cancel Subscription」時顯示你的訊息。格式、條件、申請與設定一次看。

原始頁面：[Apple 挽留訊息 API：取消訂閱前顯示](https://devoria.fr/zh-hant/blog/apple-retention-messaging-api-cancel-subscription)
作者：[Mehdi Azizi](https://devoria.fr/zh-hant/mehdi-azizi)
發布日期：2026-11-04
內容最後修訂：2026-11-04


Retention Messaging API 是 Apple 提供的伺服器對伺服器服務。訂閱者點下「Cancel Subscription」的那一刻，它會把你的訊息顯示給對方看。訊息出現在確認頁面上，這時取消還沒生效。**訊息可以提醒對方你的訂閱有什麼價值，也可以推薦另一個方案或促銷優惠，但取消按鈕永遠都在。** 這個 API 從 2025 年 7 月開始以預覽版提供，要先申請才能使用。Apple 也宣布會在 2026 年秋季於 App Store Connect 推出更簡單的版本。

這篇指南會說明這個 API 顯示什麼、從什麼時候開始有、誰可以用、要符合哪些條件，以及怎麼設定。內容全部來自 Apple 的文件和 WWDC26 的專題場次，最後一次核對是 2026 年 11 月 3 日。

我自己的 iOS App 都有賣訂閱：Solys 是社群網路封鎖工具，TradaZen 是交易模擬器，Nolera 是 AI 試穿 App，另外還有 Vigie。我在 2026 年 10 月 25 日幫這四個 App 申請了 API 使用權，也把每個語言的訊息都準備好了。到 10 月 28 日，Apple 還沒核准。所以這篇寫的是規則和我的準備過程，還沒有實際成效。

## Retention Messaging API 能做什麼

根據 [Apple 的文件](https://developer.apple.com/documentation/retentionmessaging)，當顧客打開某個訂閱的詳細資料頁、可能準備取消時，這個 API 讓你決定系統要顯示哪一則訊息。訊息要事先準備好，每個產品、每個語言各一份。

流程永遠是這樣：

1. 訂閱者打開自己的訂閱，例如從 Apple Account 的 Subscriptions，或從 App Store 進去。
2. 點下「Cancel Subscription」。
3. 系統顯示確認頁面（Confirm Cancellation），上面有你的訊息。
4. 對方可以照樣取消、保留訂閱，或接受你訊息裡提供的方案。

訊息會出現在 iOS 15.1 和 iPadOS 15.1 以上、visionOS 1，以及 macOS 14 以上。

## 從什麼時候開始，給誰用

| 日期               | 依 Apple 的說法，有什麼改變               |
| ------------------ | ----------------------------------------- |
| 2025 年 7 月 16 日 | 1.0 版：API 第一個預覽版                  |
| 2025 年 12 月 9 日 | 即時模式的伺服器效能測試                  |
| 2026 年 3 月 31 日 | 訊息支援項目符號，可透過 API 設定即時網址 |
| 2026 年 4 月 27 日 | 支援綁約 12 個月的月訂閱                  |
| 2026 年 6 月       | WWDC26：宣布 App Store Connect 內的新模組 |

日期來自 [API 的版本紀錄](https://developer.apple.com/documentation/retentionmessaging/retention-messaging-changelog)，只有最後一項取自 WWDC26 的場次。這個 API 目前還是預覽版：文件會導向一份[使用權申請表](https://developer.apple.com/contact/request/retention-messaging-api/)，要先登入你的開發者帳號。

在 WWDC26，[Explore Retention Messaging in App Store Connect](https://developer.apple.com/videos/play/wwdc2026/309/) 這個場次介紹了一個在 App Store Connect 裡、不用寫程式就能設定的模組。Apple 說它「開放給所有人」。即時版本則仍需申請。[App Store 新功能頁面](https://developer.apple.com/app-store/whats-new/)寫說模組會在「今年秋季」推出。**截至 2026 年 11 月 3 日，App Store Connect 說明文件還沒有任何介紹它的頁面，10 月 28 日我的帳號裡也還沒看到這個模組。**

這個 API 適用於有賣自動續訂型訂閱的 App。不是只有大廠才能用：RevenueCat 在一份[分析 2,200 萬則訊息的研究](https://www.revenuecat.com/blog/growth/apple-retention-messaging-benchmarks)裡提到，小型 App 也可以申請。

## 4 種訊息類型

| 類型       | 訂閱者看到什麼                       | 預設訊息 | 即時 |
| ---------- | ------------------------------------ | -------- | ---- |
| 文字       | 一個標題、一段文字、最多五個項目符號 | 可以     | 可以 |
| 文字加圖片 | 同上，再加一張圖片                   | 可以     | 可以 |
| 變更方案   | 一段文字，加上同一群組的另一個訂閱   | 不行     | 可以 |
| 促銷優惠   | 一段文字，加上以折扣價繼續訂閱的優惠 | 不行     | 可以 |

根據[訊息準備](https://developer.apple.com/documentation/retentionmessaging/setting-up-retention-messages)那一頁，預設訊息只能是文字，可以加或不加圖片。**用 API 的話，要提供優惠或其他方案，就必須即時回應。** 至於 App Store Connect 預告的模組，則可以不用伺服器就顯示附帶優惠的訊息。

促銷優惠就是你在 App Store Connect 建立的那種。根據[促銷優惠的說明文件](https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-up-promotional-offers-for-auto-renewable-subscriptions)，它針對的是現有和過去的訂閱者。根據訊息準備那一頁，在挽留訊息裡，優惠是由你的伺服器簽署。變更方案則是推薦同一群組的訂閱。如果你對這些優惠還不熟，先看我寫的[優惠代碼與促銷優惠](https://devoria.fr/zh-hant/blog/app-store-connect-offer-codes-promo-code)指南。

## 能顯示什麼：精確的限制

| 項目            | Apple 的限制                               |
| --------------- | ------------------------------------------ |
| 標題            | 最多 66 個字元                             |
| 文字            | 最多 144 個字元                            |
| 項目符號        | 最多 5 個                                  |
| 全寬圖片        | 不透明的 PNG，寬 3,840 px，高 160 到 2,160 |
| 項目符號圖片    | 1,024 × 1,024 px                           |
| 每個 App 的圖片 | 最多 2,000 張                              |

長度限制來自[上傳訊息的請求內容](https://developer.apple.com/documentation/retentionmessaging/uploadmessagerequestbody)說明，格式則來自[上傳圖片](https://developer.apple.com/documentation/retentionmessaging/upload-image)那一頁。Apple 也要求圖片在淺色和深色模式下都要好看。

每則訊息和每張圖片都會經過 Apple 審核。狀態會從 `PENDING` 變成 `APPROVED`，系統只會顯示已核准的內容。在 sandbox 裡會自動核准。文件訂了一條很明確的內容規則：不能放任何誤導或不正確的內容。

## 要符合的條件

- **每個產品、每個語言都要有一則預設訊息。** 沒有的話，那個語言就什麼都不會顯示。你的伺服器沒回應時，它也是備援。
- **訊息和圖片都要先核准**，才能上線。
- **即時模式需要夠快的伺服器。** [設定即時網址](https://developer.apple.com/documentation/retentionmessaging/setting-up-retention-messaging-endpoint)那一頁要求有效的 SSL 憑證、TLS 1.2，正式環境要在 700 ms 內回應。超過就算請求失敗，改顯示預設訊息。
- **在 sandbox 通過效能測試**，才能登記正式環境的網址。
- **檢查 App。** Apple 的每個請求都帶有 App 的識別碼 `appAppleId`。如果跟你的不符，Apple 要求你不要回應。

即時請求會給你原始交易的識別碼、產品，以及裝置的語言。要顯示哪則訊息，由你依自己的規則決定。

## 設定 Retention Messaging：三種做法

| 做法                   | 適合誰                     | 需要什麼                         |
| ---------------------- | -------------------------- | -------------------------------- |
| App Store Connect 模組 | 所有人（推出之後）         | 不用寫程式；文字、圖片或優惠     |
| API，搭配自己的伺服器  | 有後端的人                 | Apple 核准、HTTPS 網址、效能測試 |
| API，透過 RevenueCat   | 已經在用 RevenueCat 的 App | Apple 核准、在後台設定           |

如果同時有好幾種設定，Apple 在 WWDC26 場次裡說明了優先順序：先用即時回應。沒有回應或格式錯誤，就用 App Store Connect 的設定。沒有這個設定，再用透過 API 設定的預設訊息。

### 用自己的伺服器

1. 用 Apple 的表單申請使用權。
2. 先上傳圖片，再上傳訊息，每則都要有標題和文字。
3. 等它們核准後，為每個訂閱、每個語言登記一則預設訊息。
4. 要用即時模式，就在你的伺服器上建立 `Get Retention Message` 網址，並在 sandbox 登記。
5. 在 sandbox 用測試交易執行[效能測試](https://developer.apple.com/documentation/retentionmessaging/initiate-performance-test)。
6. 測試通過後，登記正式環境的網址。

### 用 RevenueCat

這是我選的做法：不用自己寫伺服器，而且我的 App 本來就透過 RevenueCat，這部分我在 [RevenueCat 與 iOS App 內訂閱](https://devoria.fr/zh-hant/blog/revenuecat-ios-in-app-subscription-setup)裡有寫。根據 [RevenueCat 的文件](https://www.revenuecat.com/docs/platform-resources/apple-platform-resources/apple-retention-messaging-api)：

1. 在 Apple 的表單裡，要填的網址是 RevenueCat 在你 App Store App 設定裡顯示的那一個。
2. 核准後，打開 Lifecycle，再進 Retention，接上 sandbox 網址。
3. 用一個有效的 sandbox 或 TestFlight 訂閱執行效能測試。最多可能要一個小時。
4. 先建立預設訊息，一個語言一個語言來。
5. 接著加上即時訊息和規則。其中一條「Is in free trial」是針對正在免費試用的人。
6. 切到正式環境：sandbox 的設定不會帶過去，訊息要重新建立。

## 寫一則能留住人、但不設陷阱的訊息

文字是固定的，而且顯示前要經過 Apple 審核。所以它不能提到正在看的人是誰，也不能提到是哪一天看的。下面是我幫 TradaZen 準備的預設訊息（原文是法文，字元數也是法文版的）：

```text
標題（57 個字元）：
你想學會交易，現在卻要摸黑上路？

文字（127 個字元）：
沒有練習，每個錯誤都由你的真錢買單。在這裡，犯錯不用花一毛錢。你的連續紀錄、聯賽和課程都會停止。
```

我替四個 App 訂下的規則：

- **標題把對方帶回自己的目標**，用問句的方式。不讓對方覺得丟臉。
- **文字精確說出什麼會停止。** 資料還在的時候，我寫的是存取權會「鎖住」，絕不說資料會被「刪除」。
- **不用任何時間用語**，像是「明天」或「今天」：同一段文字可能在訂閱期間的任何時候出現。
- **不承諾任何收益**，也不製造假的急迫感。有一版標題承諾靠交易改變人生，送出前就被我刪掉了。[Guideline 5.6](https://developer.apple.com/app-store/review/guidelines/#5.6) 禁止任何操弄性的做法，TradaZen 的付費牆就曾因此被拒，我在 [Guideline 5.6 與付費牆](https://devoria.fr/zh-hant/blog/guideline-5-6-paywall-app-store-rejection)裡寫過這件事。
- **每個語言都有自己的文字**，用翻譯後 App 的用詞，字元數一個一個算清楚。

TradaZen 我還打算做一則即時訊息，給正在試用年訂閱的人。它會推薦同一群組裡比較便宜的年訂閱方案，因為我的數據顯示這些人用 App 的程度跟付費用戶差不多：他們拒絕的是價格。這個設定還在等 Apple 核准。

## 可以期待什麼效果

別指望奇蹟。Apple 把到了確認頁面後仍保留訂閱的人所占的比例，稱為挽回率。在 WWDC26 場次裡，Apple 說採用 Retention Messaging 的訂閱，挽回率平均提升 1.4 個百分點。附帶促銷優惠的訊息效果最好，提升了 5.5 個百分點，而且每個開發者的結果都不一樣。另一方面，RevenueCat 的研究發現，訂閱者只接受了大約 1.1% 的促銷優惠和 0.6% 的方案變更。

所以這則訊息取代不了前面的功夫。一分鐘內就被取消的免費試用，關鍵在付費牆和頭幾次使用：原因和可以下手的地方都寫在我的[免費試用被取消](https://devoria.fr/zh-hant/blog/free-trial-cancelled-immediately-ios)指南裡，建立試用的方式則在[推出優惠](https://devoria.fr/zh-hant/blog/ios-free-trial-introductory-offer-app-store-connect)那篇。

## 先把訂閱準備好，再來寫訊息

[iOS & Android Kit](https://devoria.fr/zh-hant/kits/ios) 以我自己 App 的起始程式碼為基礎：新手引導、付費牆和訂閱都已經寫好，四個步驟的流程會帶你一路走到 App Store，速度由你決定。從 App Store Connect 的產品到付費牆，整條流程都寫在 [iOS App 內訂閱](https://devoria.fr/zh-hant/expertise/ios-in-app-subscription)這一頁。

如果你正在準備第一次上架，[來做免費的診斷](https://devoria.fr/zh-hant/diagnostic)：它會告訴你專案真正卡在哪裡，還會寄給你我的 Apple 防退件檢查清單。

## 常見問題

### Apple 的 Retention Messaging API 是什麼？

它是一個伺服器對伺服器的服務，負責決定訂閱者點下「Cancel Subscription」時要顯示哪則訊息。訊息出現在確認頁面上，在取消之前。它可以提醒對方訂閱的價值，或推薦另一個方案或促銷優惠。

### 所有開發者都能用 Retention Messaging 嗎？

API 是預覽版，要向 Apple 申請使用權。在 WWDC26，Apple 宣布 App Store Connect 會有一個開放給所有人的模組，預計 2026 年秋季推出。截至 2026 年 11 月 3 日，App Store Connect 說明文件還沒有介紹它。

### 訊息會在哪些 iOS 版本上顯示？

iOS 15.1 和 iPadOS 15.1 以上、visionOS 1，以及 macOS 14 以上。在比較舊的裝置上，取消時不會出現訊息。

### 訊息會阻止訂閱者取消嗎？

不會。確認頁面一定保留取消按鈕。訂閱者也可以保留訂閱，或接受你提供的優惠或方案。

### 可以在取消的時候提供折扣嗎？

可以。用 API 的話，這是促銷優惠訊息，而且只能用即時模式：優惠在 App Store Connect 建立，由你的伺服器簽署。App Store Connect 預告的模組也能顯示附帶優惠的訊息。變更方案則是推薦同一群組的另一個訂閱。

### 挽留訊息可以有幾個字元？

標題最多 66 個字元，文字最多 144 個。你可以加最多五個項目符號，以及一張不透明的 PNG 圖片。每個語言都需要自己的預設訊息。

### 用 Retention Messaging 一定要有伺服器嗎？

預設訊息不需要架設任何網址：只要呼叫 API 上傳並登記就好。用 RevenueCat 的話，它就扮演伺服器的角色。即時模式則需要一個能在 700 ms 內回應的 HTTPS 網址。App Store Connect 預告的模組不用寫程式就能設定。


## 你的專案

[iOS & Android Kit](https://devoria.fr/zh-hant/kits/ios)：用 Claude Code 打造你的 iPhone 和 Android App：我自己 App 的起始程式碼、上架商店的完整流程，以及所有套件。$3,599。

[診斷：你離自己的 iPhone App 還差什麼](https://devoria.fr/zh-hant/diagnostic)：7 個問題，60 秒：找出真正卡住你發布 iPhone App 的原因，拿到你的 4 步驟路線，以及最適合你的套件。
