恢复过期的自动续订订阅

时间:2013-07-30 09:32:53

标签: ios in-app-purchase restore subscription auto-renewing

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

我的问题是,Apple是否发送所有已完成的交易? (仅与购买非消费品和汽车可再生订阅有关,ofc)

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

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

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

编辑:好的,所以我已经有足够的测试说,,Apple发送 所有已完成的交易 < / strong>,包括与过期订阅相关的交易,即使之后还有其他订阅。

2 个答案:

答案 0 :(得分:1)

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

来通知付款队列观察员。

答案 1 :(得分:-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];
    }
  }
}