应用程序如何响应延迟的SKPaymentTransaction?

16

我的应用程序中有应用内购买,而新版iOS 8中引入了“延迟”交易,部分在技术说明中有描述。

我理解它的作用,并且知道我不需要阻塞UI,需要更新UI以反映交易状态为延迟。但是,在方法-(void)transactionDeferred:(SKPaymentTransaction*)transaction中,我应该放置什么来暂时忽略交易呢?

我只需要更新UI吗?还应该包含什么信息?我需要将价格标签替换为“您的购买已被延迟”之类的内容吗?我认为没有办法进行测试,至少我在沙盒测试账户中没有看到任何相关信息。如果有一种方法可以经历整个过程并了解它的工作原理,那就更有意义了。

2个回答

31

我正在做的是:

  1. 停止指示器动画
  2. 激活 购买恢复 按钮
  3. 显示警报:

等待批准
谢谢! 在您的购买正在等待家长批准期间,您可以继续使用 Altershot。

我观看了WWDC 14视频。苹果表示不应阻止UI并允许再次点击购买按钮。 我认为我们需要这个功能,以防父母错过警报,因此孩子可以再次发送警报。

根据我的了解,我们不应该对延迟交易调用以下方法:

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];


10
文档中说:“当应用程序成功处理交易并解锁用户购买的功能后,您的应用程序应仅在此时调用finishTransaction:。” 这表明在状态为SKPaymentTransactionStateDeferred时无需调用finishTransaction。 - JulianSymes
你应该等待FAIL或者PURCHASED。现在你应该在deferred中调用finishTransaction。 - Pichirichi
在 Xcode 测试期间,按下 Ask 或 Cancel 是否会将交易状态设置为延迟是正常的吗? - SleepNot
@SleepNot “取消”不应该是延迟,而应该是取消。我不确定这是否正常。 - Boris Y.

3
下面的代码将允许您检查要销售的产品ID是否处于延迟模式。使用它来相应地更新用户界面。
if ([[SKPaymentQueue defaultQueue].transactions count] > 0) {
    for (SKPaymentTransaction *transaction in [SKPaymentQueue defaultQueue].transactions) {
        if ([@"your.product.id"  isEqualToString:transaction.payment.productIdentifier]) {
            if (transaction.transactionState ==  SKPaymentTransactionStateDeferred) {
                // update UI that you are still waiting for parent approval. You'll get "PURCHASED" if parent approved or "FAILD" if parent declined or 24 hours passed since request.
            }
            break;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接