2009-11-03 57 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