【问题标题】:Restore Purchase for iAP shows alert on app startup为 iAP 恢复购买在应用启动时显示警报
【发布时间】:2014-03-18 12:52:46
【问题描述】:

我在为 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;
        }
    }
}

【问题讨论】:

  • 首先不要发布重复的stackoverflow.com/questions/22474139/… 其次,你的viewDidLoad viewDidAppear/viewWillAppear 方法中有什么。
  • 对不起,我的 viewDidLoad:- (void)viewDidLoad { [super viewDidLoad]; _buyButton.enabled = 否; }
  • @sbarow,您提供的链接已被版主删除。仅供参考

标签: ios iphone objective-c in-app-purchase


【解决方案1】:

在将 IAP 添加到应用程序时,我遇到了与您的第一个问题类似的问题。事实证明,虽然我一直在对其进行测试和更改,但我积压了待处理的事务,所以每次我打开应用程序时,它都试图完成这些事务。如果您登录,让它做它需要的任何事情,关闭,重新打开并重复我设法赶上并且它不再要求我每次登录。可能值得一试。 (我试图找出我得到这个答案的问题)。

它正在恢复 IAP,因为您在恢复事务队列完成时调用 [self unlockFeature],即使它没有恢复任何内容:

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

您应该删除 unlockFeature 调用并在

中对事务处理进行排序
-paymentqueue:updatedtransactions:

将此添加到开关:

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

【讨论】:

  • 感谢您的回答,警报也突然停止显示...我现在将尝试创建一个新的测试用户并希望它有效。
  • 我已经更新了我的回答,为什么您可能会在尚未购买的用户身上恢复该功能。
  • 你的回答也解决了我的第一个问题 :) 在 restoreCompletedTransactions 请求后调用 updatedTransactions 时,我没有调用 finishTransactions。这会在队列中生成大量事务。非常感谢您!
  • 很高兴我能帮上忙 :) 这通常是被忽视的最小的事情!
  • 呵呵是的,确实:) 我想我看了太久了,尝试了许多不同的事情但没有成功。再次感谢:)
猜你喜欢
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多