ios - 应用内购买恢复功能

标签 ios in-app-purchase

任何人都知道如何使用 IAP 进行恢复选项。

我使用非消耗品进行购买。

我知道我必须实现这个委托(delegate)方法:

- (void)restoreTransaction:(SKPaymentTransaction *)transaction
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

但我仍然无法弄清楚如何通过进程调用此方法。

我假设我需要在调用回调方法之前调用此方法[[SKPaymentQueue defaultQueue] RestoreCompletedTransactions];

您能逐步解释一下它是如何工作的吗?

最佳答案

你猜对了!您唯一需要调用的是:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

这将恢复用户已完成的所有交易。对于每笔交易,都会调用此 SKPaymentTransactionObserver 方法(每次用户购买时也会调用相同的方法):

    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
        for (SKPaymentTransaction *transaction in transactions) {
            switch (transaction.transactionState) {
                case SKPaymentTransactionStatePurchased:
                    [self completeTransaction:transaction];
                    break;
                case SKPaymentTransactionStateFailed:
                    [self failedTransaction:transaction];
                    break;
                case SKPaymentTransactionStateRestored:
                    [self restoreTransaction:transaction];
                    break;              
                default:
                    break;
            }
        }

    }

如果需要,您可以使用 transactionState 区分交易是原始购买 (SKPaymentTransactionStatePurchased) 还是恢复 (SKPaymentTransactionStateRestored)。

如果您需要知道恢复何时完成,您可以使用:

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
   NSLog(@"%d items restored", queue.transactions.count);
}

关于ios - 应用内购买恢复功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11396642/

相关文章:

ruby - 在服务器端验证应用内购买 Android/Google

java - Android应用内计费如何实现

ios - taskWillPerformHTTPRedirection 从未在 Alamofire 5 中调用

ios - 适用于 iOS 的 Facebook SDK 3.1 - 在 iOS6 上运行,但在 iOS 5.x 上崩溃

ios - 如何使用CAKeyFrameAnimation向后制作图像动画

ios - In App Purchase 内容 iOS 的应用程序 uploader 错误

iphone - StoreKit SKProducts请求崩溃

ios - 以 UIView 作为委托(delegate)和数据源的 UICollectionView

iphone - 如何删除一个部分中的一行并隐藏该部分?

ios - JSON 解码器返回没有与 key CodingKeys 关联的值,例如 IAP 收据中的 "expires_date"