IAP恢复状态未正确触发

时间:2014-10-19 21:37:56

标签: ios in-app-purchase restore

我目前在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 :(得分:0)

状态的documentation paymentQueueRestoreCompletedTransactionsFinished

  

告诉观察员付款队列已完成发送   恢复了交易。

     

<强>讨论

     

在支付队列处理完所有可恢复交易后调用此方法。您的申请不需要在此方法中执行任何操作。

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

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

SKPaymentTransactionStateRestored中解锁功能