如何在免费试用期内检测用户是否取消自动续订?

时间:2016-10-26 20:15:25

标签: ios in-app-purchase

Apple的文档似乎没有提到这一点。因此,如果用户取消在免费试用期内购买的自动续订订阅,我们如何检测?

在appstore收据JSON中有这个字段:is_trial_period。但我认为这是为了表明免费试用期是否结束。

我唯一能想到的就是这个NSBundle.mainBundle().appStoreReceiptURL?.path,如果这个没有那么表明用户在免费试用期内没有订阅或取消。但是对于沙盒测试,在免费试用期间无法取消测试此方案。

有没有人对此有充分的了解?

4 个答案:

答案 0 :(得分:10)

为了支持自动续订订阅,您的应用需要定期将从NSBundle.mainBundle().appStoreReceiptURL?.path获得的应用收据提交至Apple's receipt validation service

此服务的JSON响应中包含latest_receipt_info数组。

通过检查此数组,您将能够确定当前有效的订阅。

如果用户在免费试用期满前关闭了自动续订,则latest_receipt_info在免费试用结束日期之后不会包含expires_date的购买

这意味着,严格来说,您无法检测到取消"因为没有"取消&#34 ;;在免费试用期结束时,没有续约。

答案 1 :(得分:1)

使用iTunes Connect中的网络摘要功能可以实现这一点。

当您为应用的Subscription Status URL设置路径时,App Store服务器将在订阅状态更改时调用该URL。

目前,以下关键事件将触发呼叫:

  • INITIAL_BUY 首次购买订阅。
  • 取消 Apple客户支持取消订阅。
  • 续订订阅已过期自动续订成功。
  • INTERACTIVE_RENEWAL 客户通过使用应用程序界面或应用程序在交付后以交互方式续订订阅 存储在帐户设置中。
  • DID_CHANGE_RENEWAL_PREFERENCE 客户更改了在下次订阅续订时生效的计划。

可以找到更多herehere

答案 2 :(得分:0)

执行此操作的正确方法是检查收据上的自动续订首选项。如果即使用户没有打开(或删除)您的应用程序也要得到通知,则需要在服务器上存储并刷新收据。您应该关注3个字段来检测取消。

  1. 到期日期(让您知道订阅​​是否仍处于活动状态)
  2. 自动更新状态(让您知道用户是否“已取消”)
  3. 取消日期(告诉您为什么支持取消订阅)

您应检查未过期,未取消且自动更新状态为“ 0”的收据。这些将是处于免费试用中但已关闭自动续订的用户。不幸的是,App Store Connect订阅状态通知不会向您报告。

这是一篇很好的博客文章,其中详细介绍了一些细节:iOS Subscriptions are Hard

答案 3 :(得分:0)

这是我如何获取有关收据的json数据:

let sharedSecret = "..."   //you can find this string on AppStoreConnect-IAP

if let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
FileManager.default.fileExists(atPath: appStoreReceiptURL.path) {

do {
   let receiptData = try Data(contentsOf: appStoreReceiptURL, options: .alwaysMapped)

   let receiptString = receiptData.base64EncodedString(options: [])
   AF.request("https://sandbox.itunes.apple.com/verifyReceipt", method: .post, parameters: ["receipt-data":receiptString, "password": sharedSecret], encoding: JSONEncoding.default, headers: nil)
   .responseJSON(completionHandler: { (response) -> Void in
         print(response)
    })
 }
catch { 
print("Couldn't read receipt data with error: " + error.localizedDescription) }
}

如果要使用生产URL,而不是沙盒,请将URL更改为https://buy.itunes.apple.com/verifyReceipt
response中,您将找到所需的所有数据。
请注意,您需要将此内容包含在Podfile中:pod 'Alamofire', '~> 5.2'