版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.07.29 |
前言
大家都知道,ios虚拟商品如宝石、金币等都需要走内购,和苹果三七分成,如果这类商品不走内购那么上不去架或者上架以后被发现而被下架。最近有一个项目需要增加内购支付功能,所以最近又重新集成并整理了下,希望对大家有所帮助。感兴趣的可以参考上面几篇。
1. iOS内购IAP(一) —— 基础配置篇(一)
2. iOS内购IAP(二) —— 工程实践(一)
3. iOS内购IAP(三) —— 编程指南之关于内购(一)
4. iOS内购IAP(四) —— 编程指南之设计您的应用程序的产品(一)
5. iOS内购IAP(五) —— 编程指南之检索产品信息(一)
6. iOS内购IAP(六) —— 编程指南之请求支付(一)
7. iOS内购IAP(七) —— 编程指南之促进应用内购买(一)
8. iOS内购IAP(八) —— 编程指南之提供产品(一)
Working with Subscriptions - 处理订阅
提供订阅的应用程序具有一些其他行为和注意事项。 由于订阅涉及时间元素,因此您的应用必须能够确定订阅当前是否处于活动状态,并确定过去日期的订阅状态。 您的应用还必须对新的,续订的和已失效的订阅做出反应,并正确处理过期的订阅。 图6-1显示了一个示例订阅时间表,包括您的应用程序需要处理的一些复杂性。
Calculating a Subscription’s Active Period - 计算订阅的激活期
您的应用需要根据订阅处于活动状态的时间段来确定用户可以访问的内容。 例如,对于订阅每月杂志的用户,该杂志在每个月的第一天发布新内容,请考虑表6-1中显示的时间表。
Table 6-1 Timeline of a sample monthly subscription
要访问客户有权访问的所有内容,请记录每个内容的发布日期。 从每个收据条目中读取原始购买日期,购买日期和订阅到期日期字段,以确定每个订阅期间的开始和结束日期。 (有关收据的信息,请参阅Receipt Validation Programming Guide。)用户可以访问在每个订阅开始和结束日期之间发布的所有内容,以及购买订阅时最初解锁的内容。 如果订阅失效,则订阅处于活动状态的时间段将存在多个时间段,并且在订阅期开始时将解锁多个内容。
要识别订阅中的失误,请将每个收据条目的订阅到期日期字段Subscription Expiration Date
与收据中所有条目的先前收据条目的PurchaseDate
字段进行比较。
注意:请勿通过在购买日期添加订阅持续时间来计算订阅期。 该方法未考虑免费试用期,营销选择期以及用户购买订阅后立即提供的内容。例如,由于在购买订阅时内容始终处于解锁状态,因此在月中购买月度订阅的用户可以在每个月的第一天发布新内容的杂志在订阅的第一个月内获取两份杂志 :最近发布的杂志,在购买订阅时解锁,以及您在本月的第一天发布的杂志,该杂志在您发布时解锁。
继续表6-1中的示例,收据将显示以下开始和结束日期:
- 2月20日 - 3月20日
- 3月20日 - 4月20日
- (4月20日至6月17日的失效未在收据中明确记录。)
- 6月17日 - 7月17日
用户可以获取二月和六月的内容,因为他们最初在购买或重新启动订阅时已解锁。
用户可以获取3月,4月,6月和7月的内容,因为订阅在这些时间处于活动状态。
Upgrades and Plan Changes - 升级和计划变更
用户可以在App Store或您应用的界面中的帐户设置中管理他们的订阅。 对于每个订阅,App Store会显示订阅组提供的所有续订选项。 用户可以轻松更改其服务级别,并根据需要随时选择升级,降级或交叉级。 任何持续时间的降级或具有不同持续时间的交叉等级将在下一个续订日期生效。
您可以查看收据的Subscription Auto Renew Preference
字段,以了解用户选择的任何计划更改,这些更改将在下一个续订日期生效。 (有关收据的信息,请参阅 Receipt Validation Programming Guide。)
Expiration and Renewal - 到期和续订
订阅续订过程在到期日期前十天开始。 在这十天内,App Store会检查可能会延迟或阻止订阅自动续订的任何结算问题,例如:
- 客户的付款方式不再有效,
- 自用户购买订阅以来,产品价格上涨,
- 该产品已不再可用。
App Store可以通知用户任何问题,以便他们可以在订阅到期之前解决它,并避免其订阅服务中断。
在订阅到期之前的24小时内,App Store开始尝试自动续订。 App Store会多次尝试在一段时间内自动续订订阅,但如果尝试失败次数过多,最终会停止。
注意:对于与结算相关的问题,App Store可能会尝试续订最多60天的订阅。 您可以在收据中检查订阅重试标记
Subscription Retry Flag
,以确定App Store是否仍在尝试续订订阅。
App Store会在订阅到期之前稍微更新订阅,以防止订阅失效。但是,失误仍然存在。例如,如果用户的付款信息不再有效,则第一次续订尝试失败。如果用户在订阅到期后更新其支付信息,则在到期日期和后续自动续订尝试成功的日期之间订阅将会短暂失效。用户还可以禁用自动续订并有意让订阅到期,然后在以后续订,从而在订阅中创建更长的失效。确保您的应用程序的订阅逻辑可以正确处理各种持续时间的失误。您可以检查订阅自动续订状态字段以确定订阅的续订状态。
成功续订订阅后,StoreKit会将续订事务添加到事务队列中。您的应用程序在启动时检查事务队列,并以与任何其他事务相同的方式处理续订。请注意,如果您的应用在订阅续订时已在运行,则不会调用事务观察器;您的应用在下次启动应用时会发现有关续订的信息。
例如,下面的时间线显示了用户订阅应用程序的帐户,该应用程序每月提供服务。在该示例中,由于计费问题,订阅暂时失效。用户更正了问题,订阅将以新的每月续订日期续订
Table 6-2 Example of a timeline for a monthly subscription
Cancellation - 取消
续订在购买时全额支付。用户只能通过联系Apple客户服务获得退款。例如,如果用户意外购买了错误的产品,客户支持可以取消订阅并发出全部或部分退款。客户可以在订阅期间取消订阅,但订阅仍在同一时期结束时支付。
要检查Apple Customer Support
是否已取消购买,请在收据中查找Cancellation Date
字段。如果该字段包含日期,则无论订阅的到期日期如何,购买都会被取消。关于提供内容或服务,将取消的交易视为从未进行过购买。
根据您的应用提供的产品类型,您可能需要检查当前有效的订阅期,或者您可能需要检查所有过去的订阅期。例如,杂志应用程序需要检查所有过去的订阅期以确定用户应该访问哪些杂志。具有流服务的应用程序仅需要检查当前活动的订阅以确定用户是否应该访问其服务。
Status Update Notifications - 状态更新通知
statusUpdateNotification
是用于自动续订订阅的服务器到服务器通知服务。 通知指定发送通知时的订阅状态。
要在处理事件时获取最新信息,您的应用应通过App Store验证最新收据。 建议您使用状态更新通知服务以及收据验证来验证用户的当前订阅状态并为其提供服务。 有关收据验证的信息,请参阅Receipt Validation Programming Guide。
要接收状态更新通知,请在App Store Connect中为您的应用配置订阅状态URL。 App Store将通过HTTP POST将JSON对象传送到您的服务器,以获取表6-3中列出的key订阅事件。 您的服务器负责解析,解释和响应所有statusUpdateNotification
posts。
注意:使用服务器到服务器通知服务是可选的。 您可以随时选择加入。
statusUpdateNotification
是HTTP POST
。 POST的body包含表6-3中列出的数据元素。
Table 6-3 Status Update Notification Keys
App Store可以在表6-4中列出的任何条件下发布通知,表示通知类型和相应订阅事件的完整列表
Table 6-4 Status Update Notification Types
要通过statusUpdateNotification
post指示成功,您的服务器应发送HTTP状态代码200;您的服务器不需要返回数据值。 如果您的服务器发送50x或40x HTTP代码,App Store将重试该通知。 App Store会在一段时间内多次尝试重试通知,但如果尝试失败次数过多,最终会停止。
1. Security Requirements - 安全要求
在发送通知之前,App Store会尝试使用App Transport Security(ATS)
协议与您的服务器建立安全的网络连接。 要了解有关ATS要求的更多信息,请参阅Requirements for Connecting Using ATS。 如果无法建立安全连接,则不会将通知发送到您的服务器。 有关安全性的更多信息,请参阅https://developer.apple.com/security/
。
2. Status Update Notifications in the Test Environment - 测试环境中的状态更新通知
建议您在生产中实现此逻辑之前测试测试环境中交易的statusUpdateNotifications
。
要确定订阅事件的状态更新通知是否在测试环境中,请检查statusUpdateNotification
JSON对象中的environment
键值是否等于SANDBOX
。
Cross-Platform Considerations - 跨平台考虑因素
产品标识符与单个应用相关联。 具有iOS版本和macOS版本的应用程序具有单独的产品,每个平台上都有唯一的产品标识符。 您可以让在iOS应用程序中订阅的用户从macOS应用程序获取内容(反之亦然),但实现该功能是您的责任。 您需要一个系统来识别用户并跟踪他们订阅的内容,类似于您为使用不可续订订阅的应用程序实现的内容。
Enabling Users to Manage Subscriptions - 使用户能够管理订阅
您的应用可以打开以下网址,而不是实施自己的订阅管理用户界面:
https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/manageSubscriptions
打开此URL会启动iTunes
或iTunes Store
并显示Manage Subscription
页面。
The Test Environment - 测试环境
自动更新订阅的行为在测试环境和生产环境之间有所不同。
在测试环境中,订阅续订速度加快,自动续订订阅每天最多续订六次。 这使您可以测试应用程序如何处理订阅续订,订阅失效以及包含间隔的订阅历史记录。
由于加速到期和续订率,订阅可以在系统尝试续订订阅之前到期,在订阅期间留下一小段时间。 由于各种原因,这种失误也可能在生产中出现 - 确保您的应用正确处理它们。
后记
本篇主要讲述了处理订阅,感兴趣的给个赞或者关注~~~~