Repository navigation
Fix onDismiss purchased result sending a StoreProduct description instead of the product id - #6
Merged
ianrumac merged 1 commit intoSep 9, 2026
Conversation
…duct id
`PaywallResult.purchased` carries a `StoreProduct`, not a `String`, but the
binding was named `productId` and the value was placed straight into the
`onDismiss` payload. JSON serialization then received a non-JSON leaf and fell
back to the object's debug description, so Unity was handed
"productId": "<SWKStoreProduct: 0x14f80a980>"
instead of the identifier. Any consumer that matches that id against a store
catalogue - revenue reporting, receipt lookup, entitlement mapping - finds
nothing and silently drops the purchase. It fails quietly: the purchase itself
succeeds and entitlements activate normally, so only downstream reporting is
affected, which makes it easy to miss.
Found on a real sandbox subscription: the id never resolved against the Unity
IAP catalogue, so the client-side revenue fan-out was skipped entirely.
Reads `product.productIdentifier`, matching what `serializeStoreProduct` and the
product-serialization paths in this same file already do.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
PaywallResult.purchasedcarries aStoreProduct, but the iOS bridge placed the value straight into theonDismisspayload underproductId. JSON serialization received a non-JSON leaf and fell back to theobject's debug description, so Unity was handed:
Any consumer matching that id against a store catalogue (revenue reporting, receipt lookup, entitlement
mapping) finds nothing and silently drops the purchase. The purchase itself succeeds and entitlements
activate, so only downstream reporting is affected, which makes it easy to miss.
Fix
Read
product.productIdentifier, the same thingserializeStoreProductand the other product-serializationpaths in this file already do.
Verification
Sandbox subscription on iOS:
onDismissnow carriescom.explot.gouda.subs.yearlyand the consumer'scatalogue lookup resolves. Android was not affected (its bridge already sent the identifier).
Checked against SuperwallKit 4.16.3.
🤖 Generated with Claude Code
https://claude.ai/code/session_01LTHPGB4qyAwDVYmQHW87ex