Skip to content

2.8.5

Latest

Choose a tag to compare

@github-actions github-actions released this 09 Oct 07:09
· 7 commits to develop since this release
f70cb31

Enhancements

  • Adds the Customer Center, a self-service screen where users can view and restore their purchases, cancel or change a Google Play subscription, request a refund, manage a web subscription and contact support. Present it with Superwall.instance.presentCustomerCenter(), dismiss it with Superwall.instance.dismissCustomerCenter(), and configure it with SuperwallOptions.customerCenter.
  • Adds CustomerCenterDelegate and the customerCenter_open, customerCenter_close, customerCenter_action, customerCenter_surveyResponse and customerCenter_refundRequest events.

Fixes

  • Fix subscribers with an unexpired subscription being reported as inactive when Google Play fails to answer a purchase query, for example when the billing client isn't ready at launch. A query that succeeds and reports no purchases still deactivates straight away.
  • Fix subscribers being reported as inactive when Google Play returns an active purchase whose product no longer maps to an entitlement in config. A lost mapping is no longer treated as the subscription ending.
  • Fix purchases being refunded by Google Play for not being acknowledged when they did not complete through the billing flow callback, for example a pending purchase that settled while the app was closed, the app being killed mid-purchase, or a Play Store promo code. The AutomaticPurchaseController now acknowledges any unacknowledged purchase whenever it syncs the subscription status, including on launch, and retries acknowledgements that fail.
  • Fix register() never calling its handler, and every later placement stalling behind it, when a Google Play product query at launch was dropped. A request that found the billing client disconnected between being queued and running was discarded without a callback, leaving its products loading forever. Such requests are now re-queued until the client reconnects, a product query that Google Play never answers times out after 15 seconds, a disconnect with queued requests reconnects, and a second startConnection is no longer issued while one is in flight.
  • A paywall whose webview can't load, because every URL and retry has been used up or paywalls.timeoutAfter passed, is now dismissed as declined with the webViewFailedToLoad close reason, matching iOS. The register handler gets onDismiss and then the feature block for a non-gated placement, or onError for a gated one. Previously the paywall stayed on screen, and with timeoutAfter set the handler received onPresent followed by a bare onError while the paywall was still showing. A paywall that fails to load off-screen, for example during preload, reloads the next time it is presented.