Skip to main content

6 posts tagged with "Release"

New version releases

View All Tags

1.2.3 - ExternalPurchaseCustomLink Types (iOS 18.1+)

· 2 min read
Hyo
Godot IAP Maintainer

This release syncs with OpenIAP v1.3.16 and adds type support for the new ExternalPurchaseCustomLink API introduced in iOS 18.1.

New Types

This release adds GDScript type definitions for Apple's new ExternalPurchaseCustomLink API, which allows developers to direct users to external purchase links with proper tracking.

New Enums:

# Notice type for showing external purchase disclosure
enum ExternalPurchaseCustomLinkNoticeTypeIOS {
BROWSER = 0, # Display notice for browser-based purchases
}

# Token type for tracking external purchases
enum ExternalPurchaseCustomLinkTokenTypeIOS {
ACQUISITION = 0, # For new customer acquisition tracking
SERVICES = 1, # For existing customer services tracking
}

New Result Types:

# Result from showing the notice sheet
class ExternalPurchaseCustomLinkNoticeResultIOS:
var continued: bool # True if user chose to continue
var error: String # Error message if presentation failed

# Result from requesting a token
class ExternalPurchaseCustomLinkTokenResultIOS:
var token: String # The external purchase token
var error: String # Error message if retrieval failed

iOS Version Corrections

  • ExternalPurchase API availability corrected to iOS 17.4+ (was incorrectly marked as 18.2+ in some cases)

Note

This is a type-only release. The native wrapper functions for ExternalPurchaseCustomLink API are not yet exposed in godot-iap. The types are available for future integration or manual native bridge calls.

OpenIAP Versions

PackageVersion
openiap-gql1.3.16
openiap-google1.3.27
openiap-apple1.3.14

For detailed changes, see the OpenIAP Release Notes.

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.