Покупки в играх могут быть одноразовые/используемые (ресурсы, монетки, бустеры) и постоянные (отключение рекламы, вип статус). И есть два способа, как реализовать постоянную покупку. Расскажу на примере ЯИ.
После того, как игрок совершил покупку, метод
payments.getPurchases() будет возвращать её. Если консумить покупку - вызывать метод payments.consumePurchase() - покупка будет списана, и больше не будет возвращаться из метода payments.getPurchases().Соответственно, есть два варианта, как работать с постоянными покупками.
1) Консумить постоянную покупку, записывать инфу о ней в сохранение.
2) Не консумить покупку, и проверять её наличие в списке покупок.
Документация и поддержка ЯИ советуют использовать 2 вариант:
Для обработки постоянных покупок применяйте метод payments.getPurchases().
Однако дальше, в разделе Проверка необработанных покупок пугают, что если у вас останутся необработанные платежи, то вы не пройдёте модерацию.
Плюс, пробежавшись по чатикам, я узнал, что некоторое время назад были случаи, когда модерация не пропускала игру, в которой не списываются покупки.
Для себя я решил всё таки консумить покупки, и запоминать инфу в сохранение. Я вижу несколько плюсов в этом подходе.
1) Все покупки обрабатываются единым способом, не надо писать отдельную логику для используемых и постоянных покупок.
2) Я могу сделать продукт (инап), в котором будет, например, и вип статус, и ещё кучка расходников.
3) Я могу выдывать вип-статус с помощью промокода (игрок вводит промокод, игра записывает ему в сохранение вип статус). В список покупок игра ничего не сможет записать.
Минусов я не вижу, кроме теоретической ситуации, когда игрок теряет свою сохранение вместе со своей постоянной покупкой. Но это, кажется, почти невозможный сценарий.
#инапы