使用MKStoreKit实现动态服务器产品列表?

Mur*_*ock 5 iphone in-app-purchase ios mkstorekit

我正在我的应用程序中实现MKStoreKit,但应用程序的性质使得它需要支持频繁,动态地更改可用(非消耗性)产品列表以供应用程序购买.因此,我需要能够定期向我们的服务器查询可用产品ID,描述等的当前列表.

据我所知,MKStoreKit仅支持可用产品的静态plist,这意味着我们每次需要更改IAP产品列表时都必须发布应用更新.正如我所提到的,这项服务无法实现.

有没有人知道通过使用MKStoreKit从服务器下载IAP产品列表来更新我们的IAP产品列表的方法,而无需更新应用程序.

如果没有,我必须想象那里有人修改了代码以支持这一点.如果是这样,任何提示和智慧将获得很多赞赏.

提前致谢.

Nik*_*rov 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"]];
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您只需更改此方法调用,例如,从服务器获取新项目,您就可以获得所需的结果。

例如,您可以有一些预先填充的 .plist,然后将其移动到 NUSUserDefaults,就像 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"];
    }
Run Code Online (Sandbox Code Playgroud)