首页 文章

恢复过期的自动续订订阅

提问于
浏览
3

遵循Apple指南,自动续订订阅可以恢复 - >设备可以将 restoreCompletedTransactions 发送到Apple服务器,Apple将响应所有已完成交易的列表 .

我的问题是,Apple发送 all completed transactions ever 吗? (仅与购买非消费品和自动再生订阅有关,ofc)

例如:我的应用中有每月自动续订订阅 . 用户在2012年1月安装我的应用程序 . 2012年5月,他禁用订阅自动续订 . 一年后,在2013年1月,他再次订阅 . 2013年3月,他再次禁用订阅自动续订 . 最后,在2013年6月,他再次订阅 . 在2013年7月,他尝试使用"Restore purchases"功能,Apple将发送哪些信息?

Apple会向该设备发送哪些信息? Apple会发送有关所有订阅的信息,甚至是那些过期的订阅吗?

附:问题的意义在于获得使用自动续订订阅和恢复有关它们的信息的真实体验 . 在沙箱中测试有时会返回非常奇怪的结果 .

Edit: 好的,所以我已经有足够的测试说, yes ,Apple发送 all completed transactions ever ,包括与过期订阅相关的交易,即使之后还有其他订阅 .

2 回答

  • -1

    “Store Kit提供内置功能来恢复非消费产品,自动续订订阅和免费订阅的交易 . 为了恢复交易,您的应用程序调用支付队列的restoreCompletedTransactions方法 . 支付队列向App Store发送请求以恢复作为回报,App Store为之前完成的每个事务生成一个新的恢复事务 . 恢复事务对象的originalTransaction属性保存原始事务的副本 . 您的应用程序通过检索原始事务并使用它来处理恢复事务 . 解锁所购买的内容 . 在Store Kit恢复所有先前的交易后,它会通过调用他们的paymentQueueRestoreCompletedTransactionsFinished:方法通知付款队列观察员“ - Apple Docs

  • 1

    是的,您将获得与该苹果ID相关的所有购买(包括过期的) . 您可以在委托回调中过滤掉它们,并仅将最新的一个发送到您的服务器 .

    - (void)handleRestoredTransaction:(SKPaymentTransaction *)transaction
    {
    
    NSLog(@"Somehow a transaction was restored.");
    
    NSDate* receiptPurchaseDate = transaction.transactionDate;
    NSDate* currentDate = [NSDate date];
    
    NSTimeInterval daysPassedSincePurchase = [currentDate timeIntervalSinceDate: receiptPurchaseDate] / SECONDS_PER_DAY;
    
    if ([transaction.originalTransaction.payment.productIdentifier isEqualToString: monthlySubscriptionProductIdentifier])
    {
        if (daysPassedSincePurchase <= DAYS_PER_MONTH)
        {
            // send the transaction receipt to your servers.
            [self handlePurchasedTransaction: transaction];
        }
    }
    else if ([transaction.originalTransaction.payment.productIdentifier isEqualToString: yearlySubscriptionProductIdentifier])
    {
        if (daysPassedSincePurchase <= DAYS_PER_YEAR)
        {
            [self handlePurchasedTransaction: transaction];
        }
      }
    }
    

相关问题