Проблема с обнаружением уже купленных продуктов (Inapp iphone sdk)

#iphone #objective-c #sdk

#iPhone #objective-c #sdk

Вопрос:

Я пытаюсь добавить продукты Inapp в свое приложение.

  1. Я могу перечислить продукты inapp, которые я создал.
  2. Я могу показать всплывающее окно оплаты, и я могу купить товар без проблем.

Но… Я не могу проверить, было ли на этом устройстве уже приобретено это изделие, при запуске приложения.

Я использую класс MKStore, в нем есть функция проверки, был ли продукт уже куплен:

 if([[NSUserDefaults standardUserDefaults] boolForKey:@"Myproduct1"]){
           NSLog(@"Already Purchased");
}
  

Но я всегда получаю false.

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

Платеж был выполнен нормально, но я не знаю, как это проверить… Я хочу отключить кнопку «Оплатить» для продуктов, которые были приобретены при запуске приложения.

Редактировать:

решена! Но … если я удалю приложение, standardUserDefaults перезапускается, и я не знаю, какие продукты были приобретены… Есть какой-нибудь способ спросить Apple, куплен ли уже продукт?

Комментарии:

1. Вы действительно сделали [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Myproduct1"] ?

2. Ошибка: «значение void не игнорируется, как должно быть»

3. Это не ответ на мой вопрос, не так ли?

4. Я вас не понял, в этом и заключалась проблема, спасибо!

Ответ №1:

Кажется, вы на самом деле не установили пользовательский ключ по умолчанию.

Когда вы завершите покупку, вам нужно установить соответствующий ключ в настройках пользователя по умолчанию, вот так:

 - (void)product1WasPurchased
{
    // Remember that product 1 was purchased.
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Myproduct1"];
    // If you want to be sure that the preferences are saved immediately
    // you need to call:
    [[NSUserDefaults standardUserDefaults] synchronize];

    // Do some other stuff.
    ...
}
  

Только после того, как вы фактически установили bool, ваша проверка может быть успешной:

 if([[NSUserDefaults standardUserDefaults] boolForKey:@"Myproduct1"]){
    NSLog(@"Already Purchased");
}
  

Комментарии:

1. Хорошо, решено! Но … если я удалю приложение, standardUserDefaults перезапускается, и я не знаю, какие продукты были приобретены… Есть какой-нибудь способ спросить Apple, куплен ли уже продукт?

Ответ №2:

Единственный известный мне способ сделать это — отправить объект получения на ваш сервер и сохранить его в базе данных.

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

Недостатком является то, что вам необходимо поддерживать сервер и веб-сервис, а вашему приложению требуется подключение к Интернету для подтверждения своих покупок.