Skip to main content

5 posts tagged with "Android"

Android-specific updates

View All Tags

1.2.0 - Android Input Type Field Naming Simplification

· 2 min read
Hyo
Godot IAP Maintainer

This release syncs with OpenIAP v1.3.15 and simplifies field naming in Android input types.

New Features

One-Time Purchase Discount Offers (Android 7.0+)

You can now apply discount offers to one-time (in-app) purchases using offer_token:

# Get product with discount offers
var products = await iap.get_products(["premium_upgrade"], "inapp")
var product = products[0]

# Check for discount offers
if product.discount_offers.size() > 0:
var offer = product.discount_offers[0]

# Purchase with discount
var request = RequestPurchaseAndroidProps.new()
request.skus = ["premium_upgrade"]
request.offer_token = offer.offer_token_android

var result = await iap.request_purchase_android(request)

Breaking Changes

Simplified Field Names in Android Input Types

Fields inside platform-specific input types no longer require the _android suffix. The parent type name already indicates the platform context.

Why this change?

When you use RequestPurchaseAndroidProps, the type name already tells you this is Android-specific. Adding _android suffix to fields inside is redundant.

Migration Guide

Old NameNew Name
obfuscated_account_id_androidobfuscated_account_id
obfuscated_profile_id_androidobfuscated_profile_id
purchase_token_androidpurchase_token
replacement_mode_androidreplacement_mode

Before:

var request = RequestSubscriptionAndroidProps.new()
request.skus = ["premium_monthly"]
request.obfuscated_account_id_android = "user_123"
request.purchase_token_android = old_token
request.replacement_mode_android = 2

After:

var request = RequestSubscriptionAndroidProps.new()
request.skus = ["premium_monthly"]
request.obfuscated_account_id = "user_123"
request.purchase_token = old_token
request.replacement_mode = 2

Important: Response Types Keep Suffixes

The suffix removal only applies to input types (request parameters). Response types still use suffixes because they're cross-platform:

# Response fields KEEP the _android suffix
var offer = product.discount_offers[0]
var token = offer.offer_token_android # Response field - keeps suffix

# Input fields DON'T have suffix
var request = RequestPurchaseAndroidProps.new()
request.offer_token = token # Input field - no suffix

Bug Fixes

  • Fix GDScript enum reverse lookup for deserialization

OpenIAP Versions

PackageVersion
openiap-gql1.3.15
openiap-google1.3.26
openiap-apple1.3.13

For detailed changes, see the OpenIAP Release Notes.