如何在iOS应用程序中添加对宽限期(计费宽限期)的支持?

图片


9月,Apple增加了对可续订订阅的宽限期(或宽限期)的支持。 它允许已订阅的用户保留对付费服务的访问权限,即使由于付款问题而无法按时续订也是如此。 用户更新付款方式后,订阅将恢复。


宽限期的持续时间取决于订阅的持续时间。 每周订阅为6天,其他为16天。


您可以在配置了应用内购买的App Store Connect中激活Grace。 但是,还必须在应用程序本身中实现对宽限期的支持。


我如何知道用户是否处于宽限期内?


这将需要对App Store检查进行验证才能接收JSON数据。 当然,最好使用服务器来验证检查,以避免Apple推荐的中间人攻击。


验证App Store检查我们是否另外撰写了一篇文章

如果宽限期打开时付款出现问题,则新字段将在grace_period_expires_date JSON中出现: grace_period_expires_date 。 该日期是通过在上次交易的到期日前加上6或16天而获得的。


如果当前日期在上次交易的到期日期与宽限期的到期日期之间,则用户处于宽限期。 expiration_intent也应该为2


如果用户更新付款数据,则新交易将出现在latest_receipt_info数组中,并且grace_period_expires_date字段将从pending_renewal_info消失。


并且,如果用户不能解决问题,则宽限期结束后,应将订阅视为已过期,并且您必须阻止用户访问高级功能。


宽限期与is_in_billing_retry_period之间的is_in_billing_retry_period


除了宽限期字段外, is_in_billing_retry_period仍保留在pending_renewal_info 。 如果值为1 ,则用户在付款方面存在问题,并且他不在宽限期内。 在这里您可以决定是否提供付费功能。 事实证明,直到现在,每个开发人员自己都选择要做什么。


随着宽限期的启用,苹果公司有义务向所有开发者提供溢价服务。


通知用户有关应用程序中付款的问题


在这两种情况下,我们建议您直接在应用程序中将问题告知用户,并为他提供更新付款信息的方法。


您可以向用户显示横幅或全屏,并请求更新付款信息和转换按钮:


 // example of navigating user to account billing func handleOpenBilling(){ let urlString = "https://apps.apple.com/account/billing" if let url = URL(string: urlString), UIApplication.shared.canOpenURL(url){ UIApplication.shared.open(url) } 

Apphud已经为您完成了此操作。


如果付款有问题,则用户将收到推送通知,要求他们更新其付款信息。 并且,如果已禁用通知,则下次启动该应用程序时将显示该屏幕。


图片
帐单更新屏幕


Apphud还考虑了宽限期,并将订阅状态返回为活动状态。 如果您没有时间自己实现此功能,请在此处尝试我们的服务。


使用户像以往一样重要


减少退订的数量并留住用户比以往任何时候都变得更加重要。 随着iOS 13的发布,Apple简化了取消订阅的机制:卸载该应用程序后,将显示取消订阅的提议,并且设置屏幕的访问性变得更高:


图片
iOS 13中的订阅设置


这意味着向付费订阅的转换将减少,因为用户不太可能忘记取消其订阅。 而且您一定会在寻找一种解决方案来增加当前用户的利润。


规则


解决支付问题的机制称为“规则” 。 我们仅检查了其中一项规则。 我们还有其他规则,可以帮助您增加利润并留住用户。 在我们的博客中阅读更多内容。

Source: https://habr.com/ru/post/zh-CN472452/


All Articles