Встроенные покупки. Приложение падает

swift
in-apppurchase
spritekit

#1

Приветствую!
Добавил в свое приложение встроенные покупки. Наверняка все знают, что покупкам необходимо некоторое время для прогрузки. Моя проблема заключается в том, что если покупки не успели прогрузиться и я в этот момент вышел в другое меню, то приложение вылетает.
Подскажите, как исправить данную ситуацию?


#2

Помогли найти решение проблемы на другом форуме.

Добавил данные строки кода в приложение и все встало на свои места.

self.request.delegate = nil
[self.request.cancel]
self.request = nil

#3

Здравствуйте. А какой тип покупок Вы используете в Вашем приложении?


#4

Два типа:

  • растрачиваемые
  • не растрачиваемые

#5

Спасибо, Денис! А в Вашем коде для покупок используется класс NSDate? С ним не возникло проблем с переходом Swift2 на Swift3?


#6

Нет, NSDate не использую.


#7

А куда именно необходимо добавить данные строки кода?


#8

Лично у меня они добавлены в часть кода, связанного с переходом на другую сцену. Т.е. удаляем все ноды со сцены, все экшены и все что связано с покупками.


#9

Добрый день.
К сожалению, пока что не особо понял(( У меня вот такая ситуация:

  1. Если запустить приложение без подключения к интернету и нажать кнопку “Купить”, приложение вылетает.
  2. Если запустить приложение без интернета, когда оно запустилось, включить интернет и нажать кнопку “Купить”, оно вылетает
  3. Если запустить приложение с подключенным интернетом, то всё срабатывает корректно при нажатии кнопки “Купить”.
    Не сталкивались с таким?
    При нажатии кнопки купить срабатывает следующее (как в уроке):

//при нажатии кнопки “Купить” создаем платеж
@IBAction func buyContentButtonPressed(_ sender: Any) {
let payment = SKPayment(product: productToPurchase)
//добавляем платеж в очередь
SKPaymentQueue.default().add(payment)
//далее наступает фаза func paymentQueue ниже
}


#10

Приветствую!
По поводу вылета приложения без подключенного интернета. У меня подобных проблем не было. Если нажимаешь кнопку покупки, то просто на просто не происходило совершенно никаких действий. Скорее проблема в коде. Советую его пересмотреть.
Лично я изучал встроенные покупки по данному видео уроку:

Здесь только не хватает функции с проверкой была ли покупка сделана когда-либо (речь идет о не растрачиваемой покупке). Т,е, если, к примеру, нажимаешь кнопку восстановления покупок, то система чекает данные и отвечает, что не было совершено ни одной покупки и восстанавливать нечего.
Также советую изучить Reachibility (надеюсь правильно написал). Данный класс позволяет определить подключен ли интернет. И если нет, то выводить алерт.


#11

Спасибо!

С уважением,
Роман