Repository navigation
Minor release. The plugin now documents Purchasely SDK 6.2.0 on native iOS, native Android, Flutter, React Native and Cordova: custom events (emit), the iOS promotional offer signature over a purchase context token, and the 6.1.x additions (web redemption result, anonymous user id, proxy). It also documents the Android PLYUIHandler alert dismissal contract.
Added
references/concepts/custom-events.md: custom events on native iOS and Android 6.2.0. CoversPurchasely.emit(Swift, Objective-C, Kotlin, Java), the exact-name Console declaration, property types, theply_custom_events_tracked/ply_custom_events_last_trackedbuilt-in attributes, theanalyticsconsent purpose, the separate delivery queue, the custom-event campaign trigger, thetrack_eventscreen action, and a troubleshooting list. Aligned with docs.purchasely.com 6.2: Console setup (Targeting > Events, properties), trigger property filters (AND/OR) andallowCampaigns, and the experiment Primary KPI. Indexed inconcepts/README.md, thepurchasely-sdk-expertrouting index, thepurchasely-debugandpurchasely-integratereference maps, and the session-start routing sentence.- Native 6.1.x APIs: the web redemption result (
webRedemptionDelegateon iOS,webRedemptionListeneron Android) inconcepts/web-checkout.md, the app-provided anonymous user id (appAnonymousUserIdon iOS,anonymousUserIdon Android) inconcepts/user-identity.md,proxyin bothinitialization.mdfiles, and theREDEMPTION_CONSUMED/REDEMPTION_FAILEDevents inconcepts/analytics-integration.md. - iOS 6.2.0: the
signPromotionalOffer(storeProductId:storeOfferId:purchaseContextToken:success:failure:)variant and purchase attribution (the two older signing variants are deprecated in the docs, with no compiler annotation in 6.2.0) inconcepts/promotional-offers.md,concepts/programmatic-purchases.mdandconcepts/observer-mode-post-purchase.md; thePLYDataProcessingPurpose.refundHandlingpurpose and the 6.1.0PrivacyInfo.xcprivacydata types inconcepts/privacy-settings.md. - Android 6.2.0:
PLYPlan.dump()and the 200-lineretrieveLogs()introubleshooting/debug-mode.md; theply_active_subscriptions/ply_expired_subscriptionsbuilt-in attributes (also on iOS 6.2.0) inconcepts/user-attributes-targeting.md; an "Upgrading to 6.2.0" block inandroid/migration-v6.mdandandroid/api-reference.mdwith the source-compatibility changes (PLYEventsubclass,StoreType.STRIPE, nullableexpiredSubscriptions). skills/purchasely-review/SKILL.md: review items for a server that readsappAccountToken/applicationUsernameto identify the user (iOS 6.2.0+), for Observer-mode promotional offers signed without the purchase context token, and for the Android 6.2.0 source-compatibility changes.purchasely/references/ios/action-dispatch.md: documented the evidenced iOS gesture behavior for component and ancestor actions, with a concreteget_screenaction-inventory lookup path and explicit limits on inferred dispatch order.references/android/api-reference.md: a UI Handler — Alerts section. AnonAlertimplementation that displays its own dialogs must end every branch withproceed()oralert.onDismiss(); the paywall action that raised the alert stays open until then, so a branch calling neither leaves the Screen displayed and unresponsive, close button included. Covers thePLYAlertMessagebase-class helpers (onDismiss(),getTitleContent(),getContentMessage(),getButtonContent()) and the order/exclusivity rules.references/android/migration-v6.md: aPLYUIHandlersection and a verification-checklist item — the signature is unchanged, but early v5 releases did not wait for the alert dismissal, so a missing call is a latent v5 bug the migration surfaces.references/android/common-patterns.md: a Custom alert dialogs (PLYUIHandler) pattern dismissing fromsetOnDismissListener.references/troubleshooting/common-issues.md: §2 "UI Frozen / Paywall Stuck" now lists the customPLYUIHandleras Cause A alongside the unresolved interceptor (Cause B), plus a row in the symptom → likely cause table.references/concepts/paywall-actions.md: an Android anti-pattern for anonAlertthat dismisses neither way.skills/purchasely-review/SKILL.md: check 3.3 flags anonAlertbranch that can skip both calls, both calls made for the same alert, andonDismiss()called before the custom dialog closes. Skipped on iOS and the cross-platform bridges — the contract is Android-specific.skills/purchasely-debug/SKILL.md: "UI Frozen After Paywall Action" names the UI handler as the second Android cause and adds a step to audit it, plus a symptom-table row.skills/purchasely-migrate/SKILL.md: a UI handler alerts step in the Android workflow.skills/purchasely-sdk-expert/SKILL.md: a routing-index row forPLYUIHandler/ custom alert dialog questions.- Bridges 6.1.0 to 6.2.0 (Flutter, React Native, Cordova):
webRedemptionListener/addWebRedemptionListener/removeWebRedemptionListener,anonymousUserId(id, override),proxy(api)andappHandlesRedemptionAlerton the builder (6.1.0);Purchasely.emit(6.2.0; Flutter returns aFutureand fails on aDateTime, React Native returnsvoid, Cordova takes optional success and error callbacks);signPromotionalOfferWithToken(6.2.0, iOS only, resolves empty on Android;signPromotionalOfferis deprecated); therefundHandlingconsent purpose (FlutterrefundHandling, React NativeREFUND_HANDLING, CordovaDataProcessingPurpose.refundHandling, ignored on Android); theREDEMPTION_CONSUMED/REDEMPTION_FAILEDevents. - Bridge behavior changes:
SubscriptionSourcegainswebCheckoutStripeandnonemoves from 4 to 5 on Flutter and Cordova (an exhaustiveswitchor a raw4comparison breaks); React Native addsWEB_CHECKOUT_STRIPE.purchaseToken,nextRenewalDateandcancelledDatearenullon Android and absent on iOS (a strict TypeScript build can break on React Native). A redemption deeplink ignoresallowDeeplink. skills/purchasely-review/SKILL.md: a review item for the deprecated bridgesignPromotionalOffer.
Changed
- Latest native SDK versions are now iOS 6.2.0 and Android 6.2.0 (were 6.0.0 and 6.0.1) in
references/sdk-versions.md, the install snippets, the migration targets and the skills. Thepurchasely-migrateskilldescription:changed (native target pins). Flutter, React Native and Cordova are now on 6.2.0 (iOS 6.2.0 / Android 6.2.0, were 6.0.0 with iOS 6.0.0 / Android 6.0.1):sdk-versions.mdrows, install snippets, the bridge-to-native table, the skills and thepurchasely-migratebridge targets. The rule that said the bridges do not expose the 6.1 and 6.2 features is removed. - Bridge pins: 6.1.0 embeds iOS 6.1.0 / Android 6.1.0, 6.1.1 embeds iOS 6.1.2 / Android 6.1.1, 6.2.0 embeds iOS 6.2.0 / Android 6.2.0, the same on the three bridges. The
sdk-versions.mdAndroid toolchain rule lists the bridge floors, which did not change from 6.0.0 to 6.2.0. The Cordova note no longer names a tracker: Cordova still has no inline view in 6.2.0. references/concepts/(user-identity.md,web-checkout.md,promotional-offers.md,privacy-settings.md,programmatic-purchases.md,observer-mode-post-purchase.md,custom-events.md,README.md): "native only" notes now name the bridge versions that expose each API.references/concepts/privacy-settings.md:revokeDataProcessingConsent([])grants every purpose back because native replaces the stored set. Flutter and Cordova pass an empty list through. React Native dropped an empty array from 6.0.0 to 6.1.1, so it works from 6.2.0. On Android, an array that holds onlyrefundHandlingis ignored and so also becomes an empty set.skills/purchasely-review/SKILL.md: the "SDK version is current" item reads the versions fromreferences/sdk-versions.mdinstead of hardcoded numbers.references/troubleshooting/and thecommon-patterns.mdfiles: symptoms fixed in native 6.1.x or 6.2.0 now say so and recommend the upgrade first (invisible window after a dismissal,onDismissedlost on an app-presented controller, paywall freeze after two purchase attempts,closeAllScreens()with stacked screens, deeplinks after the first one, and others). Workarounds stay for older versions only.references/ios/migration-v6.md: iOS 6.2.0 puts a per-purchase context token inappAccountToken/applicationUsernameinstead of the anonymous user id.purchasely/agents/purchasely-sdk-expert.md: the Claude Code agent now setseffort: medium. Thesonnetalias resolves to Sonnet 5.5, whose default effort ishigh;mediumis sufficient for a question answered from the references, and the answer comes faster and costs less.- Clarified Cordova dismissal semantics across the migration/integration guides, post-purchase reference, and debug/integrate skills:
request.close()andPurchasely.closeAllScreens()both dismiss all displayed screens, whileclosePresentation()is a deprecated alias.