2012-02-10 3 views
5

Я использую MKStoreKit в своем приложении, но характер приложения таков, что ему нужно будет поддерживать частые динамические изменения в списке доступных (не потребляемых) продуктов для покупки приложения. Таким образом, мне нужно иметь возможность регулярно запрашивать наш сервер для текущего списка доступных идентификаторов продуктов, описаний и т. Д.Реализация списка динамических серверов с помощью MKStoreKit?

Насколько я могу судить, MKStoreKit поддерживает только статический plist доступных продуктов, что будет означать, что мы 'd должны выпускать обновление приложения каждый раз, когда нам нужно изменить наш список продуктов IAP. Как я уже упоминал, с этой услугой это невозможно.

Кто-нибудь знает, как обновить наш список продуктов IAP, загрузив его с сервера, не требуя обновления приложения, используя MKStoreKit.

Если нет, я должен представить, что есть люди, которые изменили код, чтобы поддержать это. Если это так, любые советы и мудрость были бы очень оценены.

Заранее спасибо.

ответ

4

Насколько я могу видеть, MKStoreKit получает список ваших продуктов в качестве списка свойств в следующем методе MKStoreManager.m:

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

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

Так что, если вы просто изменить этот метод вызова, например, чтобы получить новый элемент с вашего сервера, вы можете достичь нужного результата.

Например, у вас может быть некоторый предварительно заполненный .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"]; 
    } 
+0

Спасибо Никита, это по существу то, что я сделал. Вы правы, MKStoreKit извлекает свой собственный внутренний plist, поэтому я просто перехватил этот метод с помощью моего собственного метода, который запрашивает сервер (или возвращает внутренний кешированный список, если сервер недоступен). – Murdock

Смежные вопросы