InAppify

Android, iOS and Web differences

Actual Kotlin/Flutter 0.2.1 and Web 0.2.0 support for identity, cache, stores, recovery and delivery.

A Flutter facade method is not proof of implementation on every backend. This matrix targets released Flutter/Kotlin 0.2.1 and JS 0.2.0. Inspect source and locks for other versions.

CapabilityKotlin / Flutter AndroidFlutter iOSFlutter WebDirect JavaScript
Session ownerNative KotlinDart GoV2 + KeychainJS provider through bridgeJS client
PaymentsDirect, Bazaar, MyketDirectWeb checkoutWeb checkout
Customer-ID logInYesYesNoNo; Ticket/OTP
Ticket and OTPNoNoYesYes
Current / placement / exact offeringYesYesYes; exact via collection helperYes
Combined attribute/offering syncYes; five/60Yes; five/60NoYes; five/60
Four CustomerInfo policiesYesYesInputs not forwardedYes
CustomerInfo defaultcachedOrFetchedcachedOrFetchedProvider FETCH_CURRENTFETCH_CURRENT
Correlated history/purchaseUpdatesYesNoNoNo
Store sync/restoreYesDirect delivery only; no StoreKitNoNo
Delivery handlerYesNoNoYes, distinct JS API
Consumable sync/confirmYesManual DirectNoDirect
Public checkout status/return pollingNoNoYesYes
isPaymentUrlAllowed / setNetworkEnabledYesYesNoSeparate Web policy/options
Reserved $ip writesYesValidator rejectsNoNo

Choose the correct architecture

On Android, Kotlin owns purchases, caches and automatic recovery; Flutter does not create a second pipeline. iOS runs Direct in Dart; store parameters don't add StoreKit. On Web, JS owns tokens/browser storage; editing Flutter snapshots or creating another client is not a supported workaround for unsupportedOperation.

Cache distinctions

Android freshness is five minutes foreground/25 hours background; current iOS uses five minutes. JS uses five minutes visible/25 hours hidden, but Flutter Web doesn't forward those policies. Native verified customer caches persist; JS customer snapshots are memory-only even with persisted IndexedDB refresh tokens.

Purchase-attempt distinctions

Android 0.2.1 has encrypted history and correlated results by idempotencyKey across restart, including new Direct tracking with compatible services. iOS has no history API and doesn't send its Direct key to the server. Web uses checkout ID/status. Do not conflate these guarantees.

API reference · Purchases · Skill