首页 文章

IAP恢复状态未正确触发

提问于
浏览
0

我目前在IAP屏幕上有一个恢复按钮,但是在通过苹果提交并上线后,我的朋友在他的设备上进行了测试,当他这样做时,他能够恢复购买而无需首先进行购买,现在,当我调试代码时,我注意到命中恢复运行此完成委托方法,后者又运行我的方法来解锁某些功能 .

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue

我的代码如下:

#pragma mark Restore Purchases
#pragma mark -
-(void)restorePurchaseIAP{

    // ask to restore
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

}

#pragma mark SKPaymentTransactionObserver
#pragma mark -
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                [[SKPaymentQueue defaultQueue]
                 finishTransaction:transaction];
                [delegate itemPurchased];
                break;

            case SKPaymentTransactionStateFailed:
                [delegate itemPurchasedFailed];
                [[SKPaymentQueue defaultQueue]finishTransaction:transaction];
                break;
                case SKPaymentTransactionStateRestored:
                NSLog(@"restored state");
                [[SKPaymentQueue defaultQueue]finishTransaction:transaction];
                break;
            default:
                break;
        }
    }
}

#pragma mark SKPaymentTransactionObserver
#pragma mark -
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue{
        NSLog(@"restored state Completed");
    [delegate purchaseRestored];

}

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error{
    NSLog(@"restore has FAILED");

}

即使我没有使用Apple的用户帐户登录,也会发生这种情况 . 我还注意到,如果我第一次在我的朋友设备上调试这个,如果我尝试进行购买,那么在我提示IAP价格和确认时取消,恢复按钮将恢复购买 .

我正确地认为当我调用restoreCompletedTransactions时,apple应该只确认并运行:

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue{

方法是否已经购买了IAP,或者我应该在某处检查包装?

1 回答

  • 0

    国家的documentation paymentQueueRestoreCompletedTransactionsFinished

    告诉观察者付款队列已完成发送已恢复的交易 . 讨论在支付队列处理完所有可恢复的事务之后调用此方法 . 您的申请不需要在此方法中执行任何操作 .

    因此,此方法表示不再发送恢复事务(这可能是在没有要恢复或未登录的事务的情况下发送0恢复事务之后) .

    您无法确定此方法中的购买状态,因此根据其调用解锁功能无效 . 您应该在 updatedTransactions: 中解锁状态 SKPaymentTransactionStatePurchasedSKPaymentTransactionStateRestored 的功能

相关问题