了解用户在应用内购买期间何时按下了取消按钮

Posted

技术标签:

【中文标题】了解用户在应用内购买期间何时按下了取消按钮【英文标题】:Knowing when user has pressed cancel buttons during In-App purchase 【发布时间】:2010-08-12 22:49:25 【问题描述】:

我正在为应用内购买编写代码,并使用带有活动指示器的“正在处理...”视图在购买开始后阻止“立即购买”按钮。但是,由于这些警报视图来自 AppStore.app,您如何判断用户何时点击“取消”按钮?

当这些取消按钮被按下时,是否有一个委托方法被调用?还是你的观点再次变成firstResponder?我在这里错过了什么?

如果您认为这不可能,请查看“I Am T-Pain”应用程序...他们会执行非常相似的操作,并在按下取消按钮后立即关闭他们的视图。

【问题讨论】:

【参考方案1】:

假设一切设置正确,您应该有一个实现SKPaymentTransactionObserver的对象,它将接收交易成功/失败/取消的回调。

在我的示例中,它是此调用中提到的 purchaseManager 对象

  [[SKPaymentQueue defaultQueue] addTransactionObserver:purchaseManager];

当用户取消支付时,您​​应该会收到交易状态为已取消的回调:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 

        switch (transaction.transactionState)
        
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;

            case SKPaymentTransactionStateFailed:
                // THIS IS THE STATE YOU SHOULD SEE
                [self failedTransaction:transaction];
                break;

                           ...

您可以使用此回调来关闭您的视图等...

【讨论】:

老实说,我不知道我是怎么错过的......我在failedTransaction: if 语句中检查取消,但从未意识到它从未进入该 if 语句。我想所需要的只是另一双眼睛注视情况。谢啦!我真的很感激 这如何解决问题?这里仍然没有明显的“已取消”状态,那么我们如何知道交易是失败还是在发出之前被取消? 一旦交易失败,检查 if (transaction.error.code == SKErrorPaymentCancelled) 。 . . 不幸的是,当我取消在调试器中看到的错误是错误代码 2:“无法连接到 iTunes 商店”。

以上是关于了解用户在应用内购买期间何时按下了取消按钮的主要内容,如果未能解决你的问题,请参考以下文章

IAP iOS UIAlertView 取消按钮

知道何时在 Apple Watch 模态界面控制器中单击取消按钮

确定是否按下了取消按钮,其中InputBox变量声明为Double

将 IAP 存储在 UserDefaults 中,这样用户就不需要在每次按下“可购买”按钮时恢复购买

Honouring应用内购买离线+删除已取消的购买

应用内购买恢复按钮