Skip to content

2.2.0

Latest

Choose a tag to compare

@kherembourg kherembourg released this 09 Oct 14:41
00d79ae

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. Covers Purchasely.emit (Swift, Objective-C, Kotlin, Java), the exact-name Console declaration, property types, the ply_custom_events_tracked / ply_custom_events_last_tracked built-in attributes, the analytics consent purpose, the separate delivery queue, the custom-event campaign trigger, the track_event screen action, and a troubleshooting list. Aligned with docs.purchasely.com 6.2: Console setup (Targeting > Events, properties), trigger property filters (AND/OR) and allowCampaigns, and the experiment Primary KPI. Indexed in concepts/README.md, the purchasely-sdk-expert routing index, the purchasely-debug and purchasely-integrate reference maps, and the session-start routing sentence.
  • Native 6.1.x APIs: the web redemption result (webRedemptionDelegate on iOS, webRedemptionListener on Android) in concepts/web-checkout.md, the app-provided anonymous user id (appAnonymousUserId on iOS, anonymousUserId on Android) in concepts/user-identity.md, proxy in both initialization.md files, and the REDEMPTION_CONSUMED / REDEMPTION_FAILED events in concepts/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) in concepts/promotional-offers.md, concepts/programmatic-purchases.md and concepts/observer-mode-post-purchase.md; the PLYDataProcessingPurpose.refundHandling purpose and the 6.1.0 PrivacyInfo.xcprivacy data types in concepts/privacy-settings.md.
  • Android 6.2.0: PLYPlan.dump() and the 200-line retrieveLogs() in troubleshooting/debug-mode.md; the ply_active_subscriptions / ply_expired_subscriptions built-in attributes (also on iOS 6.2.0) in concepts/user-attributes-targeting.md; an "Upgrading to 6.2.0" block in android/migration-v6.md and android/api-reference.md with the source-compatibility changes (PLYEvent subclass, StoreType.STRIPE, nullable expiredSubscriptions).
  • skills/purchasely-review/SKILL.md: review items for a server that reads appAccountToken / applicationUsername to 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 concrete get_screen action-inventory lookup path and explicit limits on inferred dispatch order.
  • references/android/api-reference.md: a UI Handler — Alerts section. An onAlert implementation that displays its own dialogs must end every branch with proceed() or alert.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 the PLYAlertMessage base-class helpers (onDismiss(), getTitleContent(), getContentMessage(), getButtonContent()) and the order/exclusivity rules.
  • references/android/migration-v6.md: a PLYUIHandler section 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 from setOnDismissListener.
  • references/troubleshooting/common-issues.md: §2 "UI Frozen / Paywall Stuck" now lists the custom PLYUIHandler as 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 an onAlert that dismisses neither way.
  • skills/purchasely-review/SKILL.md: check 3.3 flags an onAlert branch that can skip both calls, both calls made for the same alert, and onDismiss() 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 for PLYUIHandler / custom alert dialog questions.
  • Bridges 6.1.0 to 6.2.0 (Flutter, React Native, Cordova): webRedemptionListener / addWebRedemptionListener / removeWebRedemptionListener, anonymousUserId(id, override), proxy(api) and appHandlesRedemptionAlert on the builder (6.1.0); Purchasely.emit (6.2.0; Flutter returns a Future and fails on a DateTime, React Native returns void, Cordova takes optional success and error callbacks); signPromotionalOfferWithToken (6.2.0, iOS only, resolves empty on Android; signPromotionalOffer is deprecated); the refundHandling consent purpose (Flutter refundHandling, React Native REFUND_HANDLING, Cordova DataProcessingPurpose.refundHandling, ignored on Android); the REDEMPTION_CONSUMED / REDEMPTION_FAILED events.
  • Bridge behavior changes: SubscriptionSource gains webCheckoutStripe and none moves from 4 to 5 on Flutter and Cordova (an exhaustive switch or a raw 4 comparison breaks); React Native adds WEB_CHECKOUT_STRIPE. purchaseToken, nextRenewalDate and cancelledDate are null on Android and absent on iOS (a strict TypeScript build can break on React Native). A redemption deeplink ignores allowDeeplink.
  • skills/purchasely-review/SKILL.md: a review item for the deprecated bridge signPromotionalOffer.

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. The purchasely-migrate skill description: 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.md rows, install snippets, the bridge-to-native table, the skills and the purchasely-migrate bridge 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.md Android 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 only refundHandling is ignored and so also becomes an empty set.
  • skills/purchasely-review/SKILL.md: the "SDK version is current" item reads the versions from references/sdk-versions.md instead of hardcoded numbers.
  • references/troubleshooting/ and the common-patterns.md files: symptoms fixed in native 6.1.x or 6.2.0 now say so and recommend the upgrade first (invisible window after a dismissal, onDismissed lost 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 in appAccountToken / applicationUsername instead of the anonymous user id.
  • purchasely/agents/purchasely-sdk-expert.md: the Claude Code agent now sets effort: medium. The sonnet alias resolves to Sonnet 5.5, whose default effort is high; medium is 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() and Purchasely.closeAllScreens() both dismiss all displayed screens, while closePresentation() is a deprecated alias.