2012-02-10 44 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