# App Store Connect 优惠码：如何创建订阅优惠代码

> 2026 年 3 月起，App 内购买的促销代码由优惠代码取代：一次性代码或自定义代码，可通过链接、App Store 或 App 内兑换。

原始页面：[App Store Connect 优惠码：如何创建订阅优惠代码](https://devoria.fr/zh-hans/blog/app-store-connect-offer-codes)
作者：[Mehdi Azizi](https://devoria.fr/zh-hans/mehdi-azizi)
发布：2026-11-04
内容最后修订：2026-11-04


在 App Store Connect 里，订阅或 App 内购买的“促销码”现在叫优惠代码（offer code）。**从 2026 年 3 月 26 日起，Apple 不再允许为 App 内购买创建促销代码（promo code）**：促销代码只剩一个用途，就是免费送出付费 App 的下载。你先在产品上创建一个优惠，再生成一次性代码或自定义代码。对方可以通过链接、在 App Store 里，或者直接在你的 App 里兑换。

我的 App 都是免费下载、靠订阅赚钱，所以 App 促销代码对我没用。因此在 TradaZen 的代码里，邀请奖励用的是优惠代码，而且由 App 自己打开兑换流程。下面依次讲：变化了什么、Apple 各类优惠的对照表、怎么创建代码、怎么兑换，以及 3.1.1 条款禁止什么。

## 促销代码和优惠代码：2026 年有什么变化

Apple 在 2025 年 10 月 29 日的[开发者新闻](https://developer.apple.com/news/?id=gf6mgrs6)中宣布：优惠代码现在覆盖所有 App 内购买。除了自动续期订阅，消耗型、非消耗型和非续期订阅也都支持了。因此，从 2026 年 3 月 26 日起，你不能再为 App 内购买创建促销代码。之前创建的代码在过期前仍然可用。

App 促销代码本身还在。根据 [App Store Connect 帮助文档](https://developer.apple.com/help/app-store-connect/offer-promo-codes/request-and-manage-promo-codes/)，它用来免费送出一份付费 App。每个代码只能用一次，有效期四周。每个版本、每个平台最多可以申请 100 个，入口在 App 侧边栏的 Promo Codes。使用代码的人不能给 App 评分或写评论。

**对于靠订阅赚钱的免费 App，App 促销代码什么也送不出去**：你要送的是订阅，得用优惠代码。

## Apple 的各种优惠：面向谁，怎么获得

下面是 Apple 围绕订阅提供的各种优惠，外加 App 促销代码。这张表我一直放在手边，用来做选择：

| 优惠类型       | 面向谁             | 获得方式               |
| -------------- | ------------------ | ---------------------- |
| 推介促销优惠   | 订阅组的新订阅者   | 购买时自动生效         |
| 一次性优惠代码 | 某一个特定的人     | 链接、App Store 或 App |
| 自定义代码     | 一次活动、一类人群 | 链接或在 App 内输入    |
| 促销优惠       | 当前或以前的订阅者 | 由你的 App 展示        |
| 赢回优惠       | 以前的订阅者       | 设置、App Store、App   |
| App 促销代码   | 仅限付费 App       | 在 App Store 中输入    |

**优惠代码是让你自己在 App 之外分发的**：通过邮件、你的网站、线下活动、内容创作者。其他优惠大多是自动显示，或者按你设定的规则在 App 内显示。推介促销优惠，也就是免费试用，有单独的指南：[推介促销优惠和免费试用](https://devoria.fr/zh-hans/blog/introductory-offer-app-store-connect-ios-free-trial)。

## 为订阅创建优惠代码

[订阅优惠代码帮助文档](https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-up-subscription-offer-codes/)里的流程分两步：先建优惠，再生成代码。界面名称以 Apple 帮助文档为准。

**1. 优惠。** 在 Subscriptions 里打开订阅组，再打开订阅。在 Subscription Prices 中点加号按钮，然后点 Create Offer Codes。接着：

- 填一个参考名称，之后会在销售报告里看到它；
- 选择优惠结束后订阅是否续期；不续期的话，只能做免费优惠；
- 勾选符合条件的人：该订阅组的新订阅者、当前订阅者、以前的订阅者；
- 如果订阅有推介促销优惠，选择对方是先享受推介优惠再享受代码优惠，还是只享受代码优惠；
- 选择国家或地区，再选免费、预先支付或随用随付，以及时长和价格。

优惠一旦创建就不能再修改。想改资格条件，就新建一个优惠。

**2. 代码。** 有两种，在优惠页面里生成：

- **一次性代码**：一人一个，每批生成 500 到 25000 个。最迟在创建后六个月过期。你会下载到一个包含代码及其链接的文件。
- **自定义代码**：一个你自己选的词，最多 64 个字符，不能有特殊字符，比如 RENTREE（虚构示例）。你设定最多多少人能用，每批最多 25000 人，结束日期可选。

共同限制：每个 App 每季度最多一百万个代码，每个订阅最多十个生效中的优惠，每人每个优惠只能用一个代码。代码生成后最多可能要一小时才能使用。最重要的是，**你的 App 必须已上架销售，代码才能兑换**：App 发布前没法送订阅。

测试方面，Apple 提供沙盒代码，每批 10 到 10000 个，在 iOS 16.3 或更高版本上通过沙盒账户的设置兑换。

## 为一次性购买或点数创建优惠代码

[App 内购买优惠代码](https://developer.apple.com/help/app-store-connect/manage-in-app-purchases/create-offer-codes-for-in-app-purchases/)的页面逻辑相同。在 In-App Purchases 里打开该购买项目，然后在 Offer Codes 部分点 Create Offer。资格条件依据用户在你 App 里的购买记录：从未购买过、最近 30 天内购买过，或 30 天以前购买过。优惠可以是免费的，也可以是付费的。

要生成代码，App 必须已上架销售，且该购买项目已获批准。一个 App 同时最多有十个生效中的优惠。在 App 内兑换需要 iOS 16.3 或更高版本。

## 用户如何兑换代码

[StoreKit 文档](https://developer.apple.com/documentation/storekit/supporting-offer-codes-in-your-app)介绍了三种途径：

1. **兑换链接。** App Store Connect 在优惠页面上提供一个示例链接，你在后面加上代码即可。如果对方没装 App，会先被引导去下载。
2. **App Store。** 一次性代码可以在账户的 Redeem Gift Card or Code 页面输入。自定义代码则只能通过链接或你的 App 兑换。
3. **你的 App。** 用 Swift 的话，SwiftUI 用 `offerCodeRedemption`，UIKit 用 `presentOfferCodeRedeemSheet`。在 Expo App 里用 RevenueCat 的话，是 `presentCodeRedemptionSheet`。

[RevenueCat 文档](https://www.revenuecat.com/docs/subscription-guidance/subscription-offers/ios-subscription-offers)给出了链接格式：`https://apps.apple.com/redeem?ctx=offercodes&id={apple_app_id}&code={code}`。文档还提醒，Apple 的兑换表单自推出以来一直很不稳定，并建议用链接作为备用方案。下面是 TypeScript 的基本写法：

```ts
import { Linking } from "react-native";
import Purchases from "react-native-purchases";

const PAGE_ECHANGE = "https://apps.apple.com/redeem";

export async function echangerUnCode(): Promise<void> {
  try {
    await Purchases.presentCodeRedemptionSheet();
  } catch {
    await Linking.openURL(PAGE_ECHANGE); // 表单失败时的备用方案
  }
}
```

这个表单不返回任何结果。权益会像购买后一样，通过你 App 里已有的 `addCustomerInfoUpdateListener` 监听器到达。要让 RevenueCat 正确统计这些代码带来的收入，需要提供你的 In-App Purchase 密钥。

TradaZen 的代码里准备的就是这套方案。使用邀请奖励时，App 打开已经填好代码的链接：这比表单更可靠，因为用表单还得手动再输一遍代码。输入收到的代码时，App 打开原生表单，失败时打开 App Store 的兑换页面。**用户不知道在哪里输入的代码，等于没用**：App Store 账户页面藏得很深，也没有任何提示。在你的 App 里放一个“我有兑换码”按钮就解决了。

## 促销优惠和赢回优惠，简单说说

这两种优惠不靠你分发的代码，但解决的是同一个需求：留住订阅者，或者让他们回来。

**促销优惠**面向当前或以前的订阅者。由你在 App 里决定什么时候展示，比如给正准备退订的人。根据[促销优惠帮助文档](https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-up-promotional-offers-for-auto-renewable-subscriptions/)，每个订阅最多可以有十个生效中的促销优惠。它们适用于该订阅的所有国家或地区，而且即使用户已经享受过推介促销优惠，也仍然可以享受。签名优惠需要 In-App Purchase 密钥。

**赢回优惠**（win-back）面向以前的订阅者。[赢回优惠帮助文档](https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-up-win-back-offers/)详细列出了条件：最短付费订阅时长、订阅结束后经过的时间、两次优惠之间的间隔。Apple 会自动在订阅管理页面展示它，iOS 18 或更高版本上也会在你的 App 里展示。Apple 还会生成一个可分享的链接，只能发给符合条件的人。要让它出现在 App Store 上，需要用一张已获批准的订阅图片来推广，图片不能照搬你的图标或截图。这部分我在[订阅推广图片](https://devoria.fr/zh-hans/blog/guideline-2-3-2-subscription-promotional-image-rejected)的指南里讲过。

## 3.1.1 条款禁止什么

[3.1.1 条款](https://developer.apple.com/app-store/review/guidelines/#3.1.1)要求解锁功能或内容必须使用 App 内购买。它禁止自建机制，比如许可证密钥或二维码。**你自己编的代码，在 App 的输入框里输入就能解锁高级版，会面临 3.1.1 拒审风险**，即使是免费送的也一样。而 Apple 的优惠代码走的是 App 内购买。完整规则见我的 [3.1.1 条款](https://devoria.fr/zh-hans/blog/guideline-3-1-1-in-app-purchase-required)指南。

还有一点和邀请奖励有关：[5.1.2 条款](https://developer.apple.com/app-store/review/guidelines/#5.1.2)禁止把开启通知、定位或跟踪作为获得奖励的条件，代码也算在内。所以奖励不能依赖这些权限。详情见 [5.1.2 条款](https://devoria.fr/zh-hans/blog/guideline-5-1-2-third-party-ai-att-data-sharing)指南。

## 送出订阅，别用错工具

发布前想让人免费试用 App，用 [TestFlight](https://devoria.fr/zh-hans/blog/testflight-guide-test-iphone-app)：里面的购买走测试环境，不会扣费。发布后，用优惠代码。订阅本身怎么搭建，见 [用 RevenueCat 做 iOS 订阅](https://devoria.fr/zh-hans/blog/revenuecat-ios-in-app-subscription-setup)。

[iOS & Android Kit](https://devoria.fr/zh-hans/kits/ios) 基于我自己 App 的起步代码：引导页、付费墙和订阅都已经写好，第三步“接入收款”会带你完成配置。整条流程都在 [iOS App 内订阅](https://devoria.fr/zh-hans/expertise/ios-in-app-subscription)页面上。如果你在准备第一次发布，[来做免费诊断](https://devoria.fr/zh-hans/diagnostic)：它会帮你理清步骤顺序，并把我的 Apple 防拒审清单发给你。

## 常见问题

### 如何在 App Store Connect 中生成促销码？

付费 App 的话，打开 App 侧边栏的 Promo Codes：每个版本最多 100 个代码，有效期四周。订阅或 App 内购买的话，在产品上通过 Create Offer Codes 或 Create Offer 创建优惠，再生成一次性代码或自定义代码。

### 促销代码和优惠代码有什么区别？

促销代码送的是付费 App 的下载。优惠代码送的是订阅或 App 内购买，可以免费或打折，时长自选。从 2026 年 3 月 26 日起，App 内购买只能创建优惠代码。

### 能创建多少个优惠代码？

每个 App 每季度最多一百万个，所有产品合计。一次性代码每批 500 到 25000 个，自定义代码每批最多可使用 25000 次。一个订阅同时最多有十个生效中的优惠。

### App 发布前能用优惠代码吗？

不能：App 必须已上架销售，代码才能兑换。发布前，给测试人员用 TestFlight，在 App 里测试兑换用沙盒代码。

### 当前订阅者能用优惠代码吗？

能，前提是你在优惠的资格条件里勾选了当前订阅者。[Apple 的订阅页面](https://developer.apple.com/app-store/subscriptions/)说明，他只能兑换与当前订阅同级或更高级别的代码。

### 用户在哪里输入优惠代码？

可以通过兑换链接；一次性代码也可以在 App Store 账户的 Redeem Gift Card or Code 页面输入；如果你在 App 里放了兑换表单，也可以在 App 里输入。自定义代码只能通过链接或 App 兑换。


## 你的项目

[iOS & Android Kit](https://devoria.fr/zh-hans/kits/ios)：用 Claude Code 打造你的 iPhone 和 Android 应用：我自己应用的起步代码、上架商店的完整流程，以及全部工具包。¥739。

[诊断：你离自己的 iPhone 应用还差什么](https://devoria.fr/zh-hans/diagnostic)：7 个问题，60 秒：看清真正阻碍你发布 iPhone 应用的原因，拿到你的 4 步路线和适合你的套件。
