2012-02-10 42 views
5

我在我的應用程序中實現了MKStoreKit,但應用程序的性質使得它需要支持對應用程序購買中可用(非消費品)產品列表的頻繁動態更改。因此,我需要能夠定期查詢我們的服務器以獲取當前可用產品ID,說明等的列表。使用MKStoreKit實現動態服務器產品列表?

據我所知,MKStoreKit僅支持可用產品的靜態plist,這意味着我們每次我們需要更改我們的IAP產品列表時,都必須發佈應用更新。正如我所提到的,這個服務是不可能的。

有誰知道更新我們的IAP產品列表的方式,無需使用MKStoreKit從服務器上下載它,而無需進行應用程序更新。

如果不是,我不得不想象有些人已經修改了代碼來支持這個。如果是這樣,獲得的任何提示和智慧將非常感激。

在此先感謝。

回答

4

據我所看到的,MKStoreKit檢索你的產品的清單是plist中的MKStoreManager.m下面的方法:

#pragma mark Internal MKStoreKit functions 
//line 201 of MKStoreManager.m 

- (NSDictionary*) storeKitItems 
{ 
    return [NSDictionary dictionaryWithContentsOfFile: 
      [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MKStoreKitConfigs.plist"]]; 
} 

所以,如果你只需要改變這種方法調用,例如,獲得來自服務器的新項目,您可以實現您需要的結果。

例如,你可能有一些預填充的.plist,然後移動它NUSU​​serDefaults,就像一個NSDictionary,並且,當來自服務器的新項目來了,你只需更新它。

所以,你的方法會是這個樣子:

- (NSDictionary*) storeKitItems 
    { 
    if(![[NSUserDefaults standardUserDefaults]valueForKey:@"NewConfigs"]) 
      [[NSUserDefaults standardUserDefaults]setValue:[NSDictionary dictionaryWithDictionary:[NSDictionary dictionaryWithContentsOfFile: 
                              [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MKStoreKitConfigs.plist"]]] forKey:@"NewConfigs"]; 
[[NSUserDefaults standardUserDefaults]synchronize]; 

return [[NSUserDefaults standardUserDefaults]valueForKey:@"NewConfigs"]; 
    } 
+0

感謝尼基塔,這基本上就是我所做的。你是對的,MKStoreKit獲取它自己的內部plist,所以我只是用我自己的一個查詢服務器的方法攔截這個方法(或者在服務器不可用的情況下返回一個緩存的內部列表)。 – Murdock 2012-07-14 01:17:53