【问题标题】:IAP restore state firing incorrectlyIAP 恢复状态触发不正确
【发布时间】:2014-10-19 21:37:56
【问题描述】:

我目前在我的 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");

}

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

我是否认为当我调用 restoreCompletedTransactions 时,苹果应该只确认并运行:

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

如果已经购买了 IAP,或者我应该在某处检查包裹的方法?

【问题讨论】:

    标签: ios in-app-purchase restore


    【解决方案1】:

    各州的documentation paymentQueueRestoreCompletedTransactionsFinished

    告诉观察者支付队列已经完成发送 恢复交易。

    讨论

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

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

    您无法在此方法中确定有关购买状态的任何信息,因此基于其调用来解锁功能是无效的。您应该在 updatedTransactions: 中为状态 SKPaymentTransactionStatePurchasedSKPaymentTransactionStateRestored 解锁功能

    【讨论】:

    • 嗨,Paul,感谢您的帮助,我已经做出了更改,并且看起来确实有效。
    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2016-01-12
    • 2019-07-21
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多