提供订阅功能的应用有一些独特的行为和注意事项。由于订阅涉及时间因素,您的应用必须能够确定订阅当前是否有效,并确定过去日期的订阅状态。您的应用还必须对新的、续订的和已失效的订阅做出响应,并妥善处理可能处于账单重试状态的已过期自动续订订阅。
要验证订阅的变更并识别其状态,您可以使用收据中的不同值,该收据提供有关应用购买和应用内购买的详细信息。有关服务器端收据验证的信息,请参阅使用 App Store 验证收据。
笔记
每个订阅都有一个与单个应用关联的唯一产品标识符。iOS 和 macOS 版本的应用拥有独立的产品,每个平台上都有唯一的产品标识符。您可以让在 iOS 应用中订阅的用户访问 macOS 应用的内容,反之亦然,但实现该功能是您的责任。为了支持跨平台订阅产品,您需要一个系统来识别用户并跟踪他们订阅的内容。更多信息,请参阅跨多个应用提供订阅。
您可以在应用中提供两种类型的订阅:非续订和自动续订。非续订订阅与自动续订订阅在几个关键方面有所不同。这些差异使您的应用能够灵活地实现非续订订阅的正确行为,如下所示:
- 您的应用负责计算订阅的有效时间段并确定需要向用户提供哪些内容。
- 您的应用负责检测非续订订阅是否即将到期,并提示用户通过再次购买同一产品来续订订阅。
- 您的应用负责让用户在所有设备上都能使用已购买的订阅,并允许用户恢复之前的购买记录。例如,大多数订阅都是由服务器提供的;您的服务器需要某种机制来识别用户,并将订阅购买信息与购买者关联起来。
以下部分提供了处理自动续订订阅的指南。为了快速响应用户自动续订订阅的变化,您可以选择在服务器上接收状态更新通知。状态更新通知会告知您用户订阅状态的实时变化,并且仅支持自动续订订阅。有关设置和处理服务器通知的更多信息,请参阅启用 App Store 服务器通知。
计算订阅的促销优惠状态
您可以在 App Store Connect 中设置促销优惠,为用户提供免费或折扣订阅服务。所有符合条件的新订阅用户均可兑换推介优惠,所有已失效和现有订阅用户均可兑换订阅优惠。推介优惠和订阅优惠有多种类型,每种都有不同的结算周期。兑换免费试用推介优惠或降级订阅优惠的用户在免费试用期结束前无需支付订阅费用。有关更多信息,请参阅在您的 app 中实施推介优惠和在您的 app 中实施促销优惠。
检查每条收据条目中的或字段,以验证用户是否在订阅开始时兑换了推介优惠。您可以使用此信息,在推介优惠期结束时向该用户准确呈现同一订阅组中的订阅产品。检查每条收据条目中的 字段,以验证用户是否兑换了订阅优惠。您可以使用此信息来确定此用户将来是否有资格兑换订阅优惠。is
is
promotional
计算订阅的有效期
您的应用需要根据用户的自动续订订阅的有效期来确定用户可以访问哪些内容。为了让客户能够访问他们有权访问的内容,请记录每条内容的发布日期。读取每条收据条目中的、和字段,以确定每个订阅期的开始和结束日期。除了购买订阅时最初解锁的内容外,用户还可以访问每个订阅开始和结束日期之间发布的所有内容。original
purchase
expires
例如,由于购买订阅总是会解锁内容,因此,如果用户在月中购买每月第一天出版新一期的杂志的月度订阅,则在订阅的第一个月可以访问两期杂志:最新出版的一期,在购买订阅时解锁;以及您在随后的每月第一天出版的一期,在您出版该期杂志时解锁。
重要的
不要通过在购买日期上添加订阅时长来计算订阅期。这种方法没有考虑到免费试用期、营销选择加入期以及用户购买订阅后立即可用的内容。
如果订阅已失效,则订阅有效期将有多个,并且会在订阅期开始时解锁部分内容。要识别订阅是否失效,请将收据中所有条目中每条收据条目的字段与上一条收据条目的字段进行比较。expires
purchase
检测到期或续订
订阅续订流程在到期日前的 10 天内开始。在这 10 天内,App Store 会检查是否存在任何可能延迟或阻止订阅自动续订的账单问题,例如:
- 客户的付款方式处于活动状态。
- 自用户购买订阅以来,产品价格上涨。
- 该产品已不再可用。
App Store 会将任何问题通知用户,以便他们在订阅到期之前解决问题并避免服务中断。
在订阅到期前的 24 小时内,App Store 会开始尝试自动续订。App Store 会在一段时间内多次尝试自动续订,但如果尝试失败次数过多,最终会停止。
处理失效订阅
App Store 会在订阅到期前不久进行续订,以防止订阅出现任何失效。但是,失效仍然可能发生。例如,如果用户的付款信息不再有效,则第一次续订尝试会失败。与账单相关的问题会触发订阅进入账单重试状态,App Store 会尝试续订最多 60 天。您可以检查和值来监控订阅的重试状态。在此期间,您的应用可以选择为用户提供宽限期,并在应用中显示一条消息,要求他们更新付款信息。此外,您的应用可以通过打开此 URL,将用户深度链接到其设备上的 App Store 付款详情页面expiration
is
https://apps.apple.com/account/billing
用户还可以通过禁用自动续订并故意让订阅失效来取消订阅。此操作会触发 App Store 向您的服务器发送类型为 的状态更新通知。您的服务器可以解析和 来确定订阅的当前续订状态。DID
auto
auto
您还可以检查收据中的字段,进一步验证订阅失效的原因。确保您应用的订阅逻辑能够处理不同的值,以便向用户显示相应的消息。expiration
expiration
expires
检测退款
用户购买订阅时已付款,可以通过联系 Apple 客服获得退款。例如,如果用户不小心购买了错误的产品并申请退款,客服可以取消订阅并全额或部分退款。用户可以在订阅期内取消订阅,但订阅费用仍会保留到订阅期结束。此外,用户将订阅升级到同一订阅组中更高级别的其他订阅产品时,也可以获得退款。
要确定订阅是否已退款,请查看收据中的相应字段。App Store 会通过 类型的状态更新通知通知您的服务器退款事宜,届时您可以处理退款。例如,如果用户升级了订阅,则立即解锁所购买更高级别订阅产品的服务。cancellation
CANCEL
识别失效后的续订订阅
用户在账单重试期内发起的自动续订订阅的付款信息更新将触发自动续订尝试并成功完成。对于此事件,App Store 会向您的服务器发送一个 类型的通知RENEWAL
,并会为成功的交易生成一张新的收据。您可以查看该字段的新值,以了解订阅的下次续订日期。expires
StoreKit 会将新的续订交易添加到设备上的交易队列中。您的应用可以在启动时检查交易队列,并以与其他交易相同的方式处理续订。如果您的应用在订阅续订时已在运行,则不会调用交易观察器;您的应用会在下次启动时发现续订信息。
检测升级或计划变更
用户可以在设备上的 App Store 设置中或您的 app 界面中管理自动续订订阅。对于用户购买的每个订阅,App Store 都会显示该订阅组提供的所有续订选项。用户可以轻松更改服务级别,并根据需要选择升级、降级或跨级。任何时长的升级或相同时长的跨级升级均立即生效。任何时长的降级或不同时长的跨级升级均在下一个续订日期生效。
您可以查看收据字段,了解用户选择的将在下一个续订日期生效的任何计划变更。此外,您还可以使用通知类型来接收用户发起的将在下一个续订日期生效的任何计划变更的通知。auto
DID
管理订阅价格同意
当您提高订阅价格时,App Store 会通过电子邮件、推送通知和应用内价格同意表通知受影响的订阅者,并要求订阅者同意新价格。在应用中,系统会询问您的委托函数是立即显示价格同意表,还是延迟显示。例如,如果延迟显示价格同意表会中断多步骤的用户交互(例如设置用户帐户),您可能希望延迟显示该表。返回以阻止对话框立即显示。payment
false
payment
要在延迟后显示价格同意表,请调用,仅当用户尚未回应价格上涨通知时才显示该表。show
如果用户不同意订阅价格上涨或未采取任何行动,其订阅将在当前计费周期结束时到期。App Store 将尝试在应用中通知用户两次。有关通知时间表,请参阅提高自动续订订阅的价格。
笔记
价格同意表仅显示在运行 iOS 的设备上。所有受影响的订阅者都会收到电子邮件和推送通知。
允许用户管理订阅
考虑在应用中构建自动续订的订阅管理界面,以便订阅者能够在其订阅组中的不同订阅级别之间轻松切换。使用属性来确定在界面中显示哪些产品。对于希望取消订阅的用户,您的应用可以打开以下网址:subscription
SKProduct
https://apps.apple.com/account/subscriptions
打开此 URL 会启动 iTunes 或 iTunes Store,并显示“管理订阅”页面,用户可以在该页面升级、降级或通过禁用自动续订来取消订阅。如果您将后端服务器配置为接收状态更新通知,则当用户取消订阅时,您的服务器会收到通知。DID