6

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

我的问题是,Apple 是否会发送所有已完成的交易?(仅与购买非消耗性产品和自动更新订阅有关)

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

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

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

编辑:好的,所以我已经有足够的测试说,的,Apple 发送所有已完成的交易,包括与过期订阅相关的交易,即使它之后还有另一个订阅。

4

2 回答 2

1

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

于 2013-07-30T17:08:04.450 回答
-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];
    }
  }
}
于 2015-02-03T22:48:00.437 回答