AndroidIAPP — это плагин для Godot (Android), который делает работу с платежами Google Play (Billing Library 8.0) максимально простой. Он поддерживает разовые покупки, подписки с разными тарифами и — самое главное — офферы (скидки/предложения) для разовых товаров.
- Скачайте плагин и поместите папку
androidiappвres://addons/. - Включите плагин в меню:
Project -> Project Settings -> Plugins. - Самое важное: Скопируйте файл
examples/GooglePlayBilling.gdв свой проект (например, в папкуscripts/).
Добавьте скрипт GooglePlayBilling.gd в Autoload (Singleton) под именем Billing или просто создайте ноду с этим скриптом в вашей главной сцене.
В скрипте вашей игры:
func _ready():
# Подключаем основные сигналы
Billing.connected.connect(_on_connected)
Billing.error_occurred.connect(_on_error)
Billing.product_details_received.connect(_on_products_loaded)
Billing.purchases_updated.connect(_on_purchases_updated)
# Запускаем плагин
Billing._initialize_plugin()
func _on_connected():
print("Мы подключились к Google Play!")
# Запрашиваем информацию о товарах (цены, описания)
Billing.query_details(["gold_100", "no_ads"], Billing.TYPE_INAPP)Данные придут в сигнал product_details_received.
func _on_products_loaded(products: Array, unfetched: Array, type: String):
for p in products:
print("Товар: ", p.title, " Цена: ", p.formatted_price)Для обычного товара достаточно ID. Если у товара в консоли Google Play настроен оффер, можно передать его токен.
# Простая покупка
Billing.buy_inapp("gold_100")
# Покупка со специфическим оффером (скидкой)
Billing.buy_inapp("gold_100", "your_offer_token_here")Для подписок нужно указать ID товара и ID базового плана (Base Plan).
Billing.subscribe("premium_sub", "monthly-plan")Google требует подтверждать покупки, иначе деньги вернутся пользователю через 3 дня.
- Расходники (золото, жизни) — нужно "потребить" (
consume). - Вечные товары (отключение рекламы) — нужно "подтвердить" (
acknowledge).
func _on_purchases_updated(purchases: Array):
for p in purchases:
if p.purchase_state == Billing.PurchaseState.PURCHASED:
if "gold_100" in p.products:
Billing.consume(p.purchase_token) # Даем золото и потребляем
else:
if not p.is_acknowledged:
Billing.acknowledge(p.purchase_token) # Активируем вечный товарconnected— можно начинать работу.error_occurred(method, data)— что-то пошло не так (например, нет интернета).product_details_received(products, ...)— пришли цены и описания.purchases_updated(purchases)— сработал после покупки или при проверке активных товаров.consumed_success(token)— товар успешно "съеден", можно начислить награду.
Если что-то не работает, подключите телефон и смотрите логи через терминал:
adb logcat | grep IAPPСовместимость: Godot 4.3+ (Android Export). Требуется включенное разрешение Billing в настройках экспорта.