首页 文章

针对iAP的Restore Purchase在应用启动时显示警报

提问于
浏览
1

当我为iAP添加恢复方法时,我有2个问题...

问题1:每次打开我的应用程序时,都会出现iTunes警报并询问我是否要登录iTunes Store . 发生这种情况,因为我添加了以下还原方法:

- (IBAction)Restore:(id)sender {
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}

现在,即使我删除了恢复方法,警报也会在启动时继续 . 苹果似乎已经在应用启动时与iTunes连接 . 我想只在用户点击购买或恢复按钮时才这样做 . 我在StackOverflow上读到了一些你必须在你的AppDelegate中添加一些内容的东西,以便应用程序不会自动连接但仍然没有运气 .

问题2:在手机上测试iAP并点击恢复按钮时,即使我之前没有购买过该项目,也可以恢复该项目 . 使用测试帐户测试恢复功能时这是正常的吗?您应该说Apple必须显示该物品从未被购买且无法恢复的警报吗?

有人可以一步一步地指导我使它工作吗?

提前致谢 .

代码:

- (IBAction)Restore:(id)sender {
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}

-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
    [self unlockFeature];
}

#pragma mark -
#pragma mark SKPaymentTransactionObserver

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                [self unlockFeature];
                [[SKPaymentQueue defaultQueue]
                 finishTransaction:transaction];
                break;

            case SKPaymentTransactionStateFailed:
                NSLog(@"Transaction Failed");
                [[SKPaymentQueue defaultQueue]
                 finishTransaction:transaction];
                break;

            default:
                break;
        }
    }
}

1 回答

  • 2

    当我将IAP添加到应用程序时,我遇到了与您的第一个问题类似的问题 . 事实证明,虽然我经历了测试和改变事情,但我已经积压了待处理的交易,因此每次打开应用程序时都会尝试完成这些操作 . 如果您登录,请让它做任何需要的事情,关闭,重新打开并重复我设法赶上并且它不再要求我每次登录 . 可能值得一试 . (我试图挖掘出我得到这个答案的问题) .

    它正在恢复IAP,因为当恢复事务队列完成时,即使它没有恢复任何东西,你也在调用[self unlockFeature]:

    -(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
        [self unlockFeature];
    }
    

    您应该删除unlockFeature调用并对其中的事务处理进行排序

    -paymentqueue:updatedtransactions:
    

    将其添加到交换机:

    case SKPaymentTransactionStateRestored:
            [self unlockFeature];
            [[SKPaymentQueue defaultQueue]
            finishTransaction:transaction];
            break;
    

相关问题