【问题标题】:iPhone in-app purchase: How can I detect unfinished transactions using storekit?iPhone 应用内购买:如何使用 storekit 检测未完成的交易?
【发布时间】:2009-11-05 06:21:04
【问题描述】:

我正在一个允许下载大量数据的 iphone 应用程序中实现应用内购买。

现在,我正在尝试确定 Store Kit 是否可以告诉我是否有任何交易已完成购买,但已因应用程序关闭而中断。

据我所知,唯一的方法是向 SKPaymentQueue 添加观察者:

[[SKPaymentQueue defaultQueue] addTransactionObserver:someObject];

并等待 defaultQueue 调用

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

在某个对象上。当此方法为 SKPaymentTransactionStatePurchased 时,上述处于中断状态的项目在交易数组中显示为 SKPaymentTransactionStatePurchased

我第一次尝试解决这个问题是添加我的观察者,然后要求:

[SKPaymentQueue defaultQueue].transactions

并检查那些。据称这会返回一系列“待处理”交易,但根据我的经验,这不包括 SKPaymentTransactionStatePurchased 中的交易。

我希望使用 storekit 来保持这种状态,并且会喜欢任何想法。谢谢。

【问题讨论】:

    标签: iphone in-app-purchase


    【解决方案1】:

    我认为单独使用 store kit 是不可能的,所以我在 sqlite 中做了一个小表:

    create table purchased_products (
      product_identifier text primary key, -- apple store id string
      purchased integer not null           -- 1 if purchased
    );
    

    当我收到指示已购买产品的 SKPaymentQueue 回调时,我在此表中添加一行。

    一切正常。

    【讨论】:

    • 这绝对是正确的答案,因为 In App Purchase Programming Guide 明确指出,由应用程序将交易结果直接存储在设备或开发者的服务器上。但是,您可能需要考虑将数据存储在 NSUserDefaults 中,因为它比使用 sqlite 数据库要简单得多,并且会在用户同步他们的设备时进行备份。
    • Thomas Moore 上面所说的。 WWDC 2014 会议题为“优化应用内购买”,很好地解释了哪些部分取决于开发人员,哪些部分由 Apple 负责。他们还概述了过度缓存等的危险。如果您正在实施 IAP,这是一个必看的会议。
    猜你喜欢
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2017-07-14
    相关资源
    最近更新 更多