Ios 当事务在SKPaymentQueue上时,在每次打开时请求密码

Ios 当事务在SKPaymentQueue上时,在每次打开时请求密码,ios,objective-c,swift,in-app-purchase,storekit,Ios,Objective C,Swift,In App Purchase,Storekit,我有一个iOS应用程序,其中包含非消耗品IAP-Apple托管内容。下载量非常大(约500MB) 在下载内容时,我必须保持交易“打开”,并且只有在下载完成后才能完成交易 问题是,storekit在事务处于队列中时,每当我将应用程序从后台移动到前台(或打开应用程序)时,都会自动请求重新验证 因此,如果我开始下载,按主页按钮,返回应用程序,storekit将请求我登录 即使我重新登录或只是按“取消”,下载也会继续 是否有任何方法可以摆脱此重新身份验证请求?您可以使用SKPaymentTransact

我有一个
iOS
应用程序,其中包含非消耗品
IAP-Apple
托管内容。下载量非常大(约500MB)

在下载内容时,我必须保持交易“打开”,并且只有在下载完成后才能完成交易

问题是,
storekit
在事务处于队列中时,每当我将应用程序从后台移动到前台(或打开应用程序)时,都会自动请求重新验证

因此,如果我开始下载,按主页按钮,返回应用程序,
storekit
将请求我登录

即使我重新登录或只是按“取消”,下载也会继续


是否有任何方法可以摆脱此重新身份验证请求?

您可以使用
SKPaymentTransactionStateDeferred
来避免这种情况。启动时,尝试还原所有事务,但状态为
SKPaymentTransactionStateDeferred
的事务除外

目标-C:

NSArray *transactionsInQ = [[SKPaymentQueue defaultQueue] transactions];
for(SKPaymentTransaction *transaction in transactionsInQ) {
    if(transaction.transactionState != SKPaymentTransactionStateDeferred) {
        // your code
    }
}
let transactionsInQ = SKPaymentQueue.defaultQueue().transactions
for transaction in transactionsInQ {
    if (transaction.transactionState != .Deferred) {
         // your code
    }
}
Swift:

NSArray *transactionsInQ = [[SKPaymentQueue defaultQueue] transactions];
for(SKPaymentTransaction *transaction in transactionsInQ) {
    if(transaction.transactionState != SKPaymentTransactionStateDeferred) {
        // your code
    }
}
let transactionsInQ = SKPaymentQueue.defaultQueue().transactions
for transaction in transactionsInQ {
    if (transaction.transactionState != .Deferred) {
         // your code
    }
}

其实我并不是在忙什么。我只是收到一个通知,告知我的事务处于已还原或已购买状态,然后重新进行身份验证。没有一个事务处于延迟状态。