跳转到正文

创建 iOS 订阅推介优惠

GitHub

入门优惠(Introductory offers)允许您为符合条件的用户提供免费试用或折扣价,从而降低准入门槛并提高订阅转化率。

入门优惠是扩大订阅用户群最有效的工具之一。它们可以让用户:

  • 零风险试用高级功能
  • 在正式订阅前体验产品价值
  • 以更低的价格起步
  • 建立对您产品的信任感

iOS 支持三种类型的推介优惠:

用户可以在指定时间内免费使用。试用结束后,若未取消订阅,将按标准价格计费。

示例:

  • 免费 7 天
  • 免费 14 天
  • 免费 1 个月

适用场景:

  • 高价值订阅
  • 功能丰富的 App
  • 培养用户习惯

用户支付一次性折扣价,即可覆盖整个入门期。

示例:

  • $1.99 享 2 个月 (之后为 $9.99/月)
  • $9.99 享 3 个月 (之后为 $19.99/月)

适用场景:

  • 体现用户订阅意愿
  • 满足现金流需求
  • 测试价格敏感度

用户在多个计费周期内可以享受优惠价格。

示例:

  • $1.99/月,持续 3 个月(之后为 $9.99/月)
  • $4.99/月,持续 6 个月(之后为 $14.99/月)

适用场景:

  • 逐步增加用户投入
  • 展示长期价值
  • 降低用户的感知风险

用户仅在满足以下条件时才能获得入门优惠:

  • 此前未曾获得过该产品的入门优惠
  • 在同一订阅组内未收到过任何产品的推介优惠 (Introductory Offer)
  • 从未拥有过该产品的有效订阅

你必须首先 创建一个自动续期订阅 然后才能添加推介优惠。

  1. 导航至订阅

    在 App Store Connect 中,前往您应用的 盈利 > 订阅 部分,并选择要添加优惠的订阅。

  2. 添加订阅价格

    点击 + 点击“订阅价格”旁的图标以打开定价弹窗。

  3. 创建推介优惠

    选择 “创建推介优惠” 从选项中选择。

    创建推介优惠

  4. 配置国家/地区与开始日期

    国家与地区: 选择优惠生效的范围

    • 选择所有国家以获得最大覆盖面
    • 或限制在特定市场进行测试

    开始日期: 优惠开始生效的时间

    • 可以立即生效或预约未来时间
    • 便于与营销活动同步进行

    结束日期 (可选): 优惠到期的时间

    • 留空则表示长期有效
    • 设置限时促销日期
  5. 选择优惠类型

    请从以下三种优惠类型中选择一种:

    免费 (免费试用)

    • 选择时长 (天、周、月)
    • 示例:7 天、2 周、1 个月

    预付费

    • 设置单次付款价格
    • 设置该付款覆盖的时长
    • 示例:2 个月 $1.99

    随用随付

    • 设置每个周期的折扣价
    • 设置周期数量
    • 示例:$2.99/月,持续 3 个月
  6. 检查并确认

    查看以下摘要信息:

    • 优惠类型与持续时间
    • 价格详情
    • 优惠期后的常规价格
    • 生效日期与适用国家
  7. 保存

    点击 保存 以创建推介优惠 (introductory offer)。它将立即在 sandbox 模式下可用进行测试。

Type: Free
Duration: 7 days
Then: $9.99/month

用户旅程:

  • 第 1-7 天:免费使用
  • 第 8 天:首次扣费 $9.99
  • 随后按月持续扣费
Type: Pay Up Front
Price: $4.99
Duration: 3 months
Then: $9.99/month

用户旅程:

  • 第 1 天:扣费 $4.99
  • 90 天使用权限
  • 第 91 天:扣费 $9.99/月
Type: Pay As You Go
Price: $2.99/month
Periods: 6 months
Then: $9.99/month

用户旅程:

  • 第 1-6 个月:$2.99/月
  • 第 7 个月起:$9.99/月

native-purchases 插件会自动处理推介优惠 (introductory offer) 的展示与资格校验:

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Fetch products with intro offer information
const { products } = await NativePurchases.getProducts({
productIdentifiers: ['com.yourapp.premium_monthly'],
productType: PURCHASE_TYPE.SUBS,
});
const product = products[0];
// Display intro offer details (StoreKit sends localized metadata)
if (product.introductoryPrice) {
console.log('Intro price:', product.introductoryPriceString);
console.log('Intro period:', product.introductoryPricePeriod);
console.log('Intro cycles:', product.introductoryPriceCycles);
console.log('Regular price:', product.priceString);
} else {
console.log('No intro offer configured');
}
// Purchase (StoreKit automatically applies intro pricing if eligible)
try {
const transaction = await NativePurchases.purchaseProduct({
productIdentifier: 'com.yourapp.premium_monthly',
productType: PURCHASE_TYPE.SUBS,
});
console.log('Subscription active, receipt length:', transaction.receipt?.length);
await validateReceiptOnServer(transaction.receipt);
} catch (error) {
console.error('Purchase failed:', error);
}

向用户展示推介优惠

“向用户展示推介优惠”章节

清晰的价值主张:

Try Premium Free for 7 Days
Then $9.99/month. Cancel anytime.

强调优惠力度:

Start at Just $1.99
Get 3 months of Premium for only $1.99
Then $9.99/month

透明的沟通机制:

Your Free Trial
• Access all premium features
• No charge for 7 days
• $9.99/month after trial
• Cancel anytime, even during trial
function formatIntroOffer(product: any): string {
if (!product.introductoryPrice) {
return `${product.priceString} per ${product.subscriptionPeriod}`;
}
const intro = product.introductoryPrice;
const regular = product.priceString;
if (intro.price === 0) {
// Free trial
return `Try free for ${intro.periodString}, then ${regular}`;
} else if (intro.cycles === 1) {
// Pay up front
return `${intro.priceString} for ${intro.periodString}, then ${regular}`;
} else {
// Enterprise
return `${intro.priceString} for ${intro.cycles} ${intro.periodString}s, then ${regular}`;
}
}
  • 3-7 天:适用于决策快速的应用或游戏
  • 7-14 天:大多数应用的标准配置
  • 14-30 天:工具复杂,专业应用
  • 30 天以上:高价值 B2B 或企业级
  • $0.99-$1.99:门槛极低,适合测试
  • 5 折优惠:感知价值高
  • 首月免费:常见且熟悉的模式
  • 试用期结束前: 提醒用户即将扣费
  • 强调价值: 展示使用统计、成就
  • 便捷取消: 通过透明流程建立信任

使用 sandbox 测试验证行为:

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// In sandbox mode, accelerated subscription durations apply:
// - 3 days free trial = 3 minutes
// - 1 week free trial = 3 minutes
// - 1 month free trial = 5 minutes
const { products } = await NativePurchases.getProducts({
productIdentifiers: ['premium_monthly'],
productType: PURCHASE_TYPE.SUBS,
});
// Purchase with intro offer
const transaction = await NativePurchases.purchaseProduct({
productIdentifier: 'premium_monthly',
productType: PURCHASE_TYPE.SUBS,
});
console.log('Intro purchase transaction:', transaction.transactionId);
// Wait for accelerated renewal
setTimeout(async () => {
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const premium = purchases.find((purchase) => purchase.productIdentifier === 'premium_monthly');
console.log('After trial state:', premium?.subscriptionState);
}, 180000); // 3 minutes for weekly trial
  • 每个订阅组每位用户限享一次推介优惠(终身)
  • 仅适用于新订阅用户
  • 取消订阅后无法再次使用
  • 不适用于订阅升级/交叉升级
  • introductoryPrice 显示推介优惠详情
  • eligibility 该方法检查用户是否符合资格
  • 购买时自动应用
  • 无需特殊的购买方式
  • 每个订阅同时只能激活一个推介优惠
  • 无法与其他折扣类型叠加使用
  • 无法更改资格判定规则
  • 资格检查由 Apple 控制

未显示推介优惠:

  • 检查 App Store Connect 中是否已激活该优惠
  • 确认用户此前未曾使用过推介优惠
  • 确保用户未订阅该订阅组内的任何项目
  • 使用新的 Sandbox 账号进行测试

资格检查失败:

  • 等待 App Store 同步(可能需要 2-3 小时)
  • 验证 Product ID 是否正确
  • 检查订阅组配置
  • 使用全新的测试账号在 Sandbox 环境测试

显示价格错误:

  • 检查区域定价设置
  • 验证货币转换是否正确
  • 确保优惠日期在有效期内
  • 刷新产品信息

Sandbox 测试问题:

  • 使用加速时长(3 分钟 = 1 周)
  • 每次测试请创建新的测试账号
  • 等待试用期自然结束
  • 检查续订次数(Sandbox 最多 6 次)
  • 入门优惠接受率
  • 试用转付费转化率
  • 试用期内取消率
  • 首次付费后的留存率
  • 营收影响
  • 免费试用 vs. 付费入门优惠
  • 试用时长变化
  • 折扣比例
  • 单次付费 vs. 周期性折扣
// Track offer performance
analytics.track('intro_offer_displayed', {
product_id: product.identifier,
offer_type: product.introductoryPriceType,
offer_duration: product.introductoryPricePeriod
});
analytics.track('intro_offer_accepted', {
product_id: product.identifier
});
// Monitor conversion
NativePurchases.addListener('transactionUpdated', (transaction) => {
if (transaction.productIdentifier === product.identifier && transaction.isActive) {
analytics.track('trial_converted', {
transactionId: transaction.transactionId,
productId: transaction.productIdentifier,
});
}
});
  • 配置沙盒测试 测试您的入门优惠
  • 为挽回流失用户设置促销优惠
  • 实现订阅数据分析
  • 创建精准营销活动

欲了解更多详情,请参阅 关于入门优惠的 Apple 官方文档.

如果你正在使用 创建 iOS 订阅推介优惠 要规划付款和购买,请将其与 使用 @capgo/native-purchases 关于“使用 @capgo/native-purchases”中的原生能力, Capgo 定价 关于 Capgo 定价中的产品工作流, 支付系统 了解支付系统的实现细节, @capgo/native-purchases 有关 @capgo/native-purchases 的实现细节,以及 快速入门 有关 Getting Started 中的实现细节,请参阅