【问题标题】:restoreCompletedTransactions for Auto-Renewable subscriptions自动更新订阅的 restoreCompletedTransactions
【发布时间】:2011-10-07 16:03:11
【问题描述】:

我正在尝试在我的应用程序中实现自动更新订阅,但遇到了一个问题:看起来restoreCompletedTransactions 仅从上次调用restoreCompletedTransactions 到现在恢复事务。

例如,如果订阅从 6 月 1 日开始,我在 6 月 15 日调用 restoreCompletedTransactions,它会返回从 6 月 1 日到 6 月 15 日的所有交易。下次我在 6 月 16 日调用 restoreCompletedTransactions,它会返回从6 月 15 日至 6 月 16 日。如果自上次调用 restoreCompletedTransactions 以来没有自动更新交易,则不会返回任何内容。

这是正确的吗?如何检索有关以前交易的信息?

【问题讨论】:

  • 如果你用你的平台标记这个,你更有可能得到答案 - 这是 iPhone、Android 还是什么?

标签: ios in-app-purchase subscriptions


【解决方案1】:

不确定这是否是一个好的解决方案,但它是上述解决方案的扩展。 执行 restoreCompletedTransactions,并检查购买交易的日期。也许在恢复的交易中(也许有人可以让我们知道>

// 在你的主代码中的某个地方

#import <StoreKit/StoreKit.h>
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

// 然后,更新 StoreKit 回调函数。 kProductId 是应用商店订阅的productId

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchasing:
                NSLog(@"Purchasing");
                break;

            case SKPaymentTransactionStatePurchased:
                if ([transaction.payment.productIdentifier
                     isEqualToString:kProductID]) {
                    NSLog(@"Purchased ");
                    // update based on transaction.transactionDate
                }
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                break;

            case SKPaymentTransactionStateRestored:
                NSLog(@"Restored ");
                [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                if ([transaction.payment.productIdentifier
                     isEqualToString:kProductID]) {
                    // update based on transaction.transactionDate
                }
                break;

            case SKPaymentTransactionStateFailed:
//                NSLog(@"Purchase failed ");
            default:
                break;
        }
    }
}

【讨论】:

    【解决方案2】:

    这与我的经历相反。根据我的经验,当您致电 restoreCompletedTransactions 时,它会向您发送一大堆收据,每次您拨打该电话时,收据似乎都会增加。

    但要回答您的问题,Apple 建议您存储并验证来自您自己的服务器的所有收据。因此,每当应用程序收到收据时,您都应该将其发送到您的服务器进行验证和可能的存储。这样一来,restoreCompletedTransactions 是否真的只为您提供新交易并不重要。

    此外,当您向 Apple 验证自动更新收据时,他们会向您发送与该订阅相关的最新收据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-08
      • 2014-05-05
      • 2018-04-24
      • 2016-04-27
      • 2016-03-25
      • 2019-08-16
      • 1970-01-01
      相关资源
      最近更新 更多