#iphone #objective-c #sdk
#iPhone #objective-c #sdk
Вопрос:
Я пытаюсь добавить продукты Inapp в свое приложение.
- Я могу перечислить продукты inapp, которые я создал.
- Я могу показать всплывающее окно оплаты, и я могу купить товар без проблем.
Но… Я не могу проверить, было ли на этом устройстве уже приобретено это изделие, при запуске приложения.
Я использую класс 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 вне кода вашего приложения, где его не так легко взломать.
Недостатком является то, что вам необходимо поддерживать сервер и веб-сервис, а вашему приложению требуется подключение к Интернету для подтверждения своих покупок.