2009-11-03 67 views
1

我正在iPhone应用程序中实现应用程序内购买,允许下载不重要的数据量。iPhone应用内购买:如何使用storekit检测未完成的交易?

现在,我试图弄清楚商店套件是否可以告诉我是否有任何交易在购买完成但已被应用程序关闭中断。

据我可以告诉做到这一点的唯一方法是观察者添加到SKPaymentQueue:

[[SKPaymentQueue defaultQueue] addTransactionObserver:someObject]; 

,等待defaultQueue对someObject调用

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

。这是在中断状态物品交易阵列SKPaymentTransactionStatePurchased在上面显示出来时,这种方法是

我在解决这一问题的首次尝试是增加我的观察,然后问:

[SKPaymentQueue defaultQueue].transactions 

和检查那些。据称这返回了一系列“未决”交易,但根据我的经验,这不包括SKPaymentTransactionStatePurchased中的交易。

我一直希望使用storekit来维护这个状态,并且会喜欢任何想法。谢谢。

回答

0

我决定,这是不可能单独做到这一点使用商店套件,所以我SQLite中做了一个小桌子:

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

,当我拿到SKPaymentQueue回调,表明产品已购买我添加排到这张桌子。

它工作得很好。

+1

这绝对是一个正确的答案,因为In App Purchase Programming Guide明确指出,交易结果直接存储在设备或开发人员的服务器上取决于应用程序。但是,您可能需要考虑将数据存储在NSUserDefaults中,因为它比使用sqlite数据库简单得多,并在用户同步其设备时进行备份。 – 2011-02-22 04:31:00

+0

托马斯摩尔上面说的。 WWDC 2014会议题为“优化应用内购买”很好地解释了哪些部分取决于开发人员以及Apple负责的部分。他们还概述了过度缓存的危险性等。如果您正在实施IAP,则必须参加会议。 – 2014-11-02 23:25:47