All notable changes to the GlomoPay Flutter SDK.
The format is based on Keep a Changelog.
The canonical changelog ships with the pub.dev package. This page mirrors it for convenience.
A feature release. No API changed and no integration needs a code change - upgrade the version constraint and rebuild.
- Document downloads in bank flows. Bank flows that offer a form or a signed agreement to download now hand it to the system save dialog with the filename pre-filled, and the user chooses where it goes -
ACTION_CREATE_DOCUMENTon Android, the document picker on iOS. Previously the control did nothing: a WebView cannot write a file to the device on its own, and the tap produced no file, no error and no event. Nothing to integrate - no callback, no configuration, no permission, and no new dependency. See Document Downloads. - A failed download now tells the user and the host app. A dismissible dialog names what went wrong, and
onSdkErrorfires withSdkErrorType.validationErrorandfieldset to'file.save'- filter on that field to tell it apart from other validation errors. This never ends the checkout; the user can carry on. A user who cancels the save dialog is not a failure and is reported as neither. - Downloads larger than 100 MB are declined rather than attempted. The save dialog takes the bytes rather than a path, so the whole document is held in memory to hand over, and something larger would take the host app down with it. Oversized responses are refused mid-download and never buffered whole.
- Improved error tracking and SDK diagnostics.
Part of the v2 documentation.
Upgrading from v1.11.x? See the Migration Guide. Every integration needs at least one change - the new required onUserJourneyCompleted callback - and the compiler points at it.
- New required callback
onUserJourneyCompleted- the second happy path. Fires when the user completes the bank transfer flow. This previously arrived asonPaymentSuccesswith a payload whosepaymentIdandsignaturewere both null - a payment reported as received, but nothing for your backend to verify it against. It now arrives asonUserJourneyCompletedwith aGlomoPayUserJourneyPayloadcarryingjourneyType,orderIdand the transfer details the page sent, and no longer reachesonPaymentSuccess. IfonPaymentSuccesscurrently special-cases a nullpaymentId, that branch should move to the new callback. onPaymentFailureis now reserved for backend-confirmed payment failures. Errors no longer route there: a checkout that could not load, a connection failure or an internal fault reachonSdkErrororonConnectionErrorinstead, and a user exiting one of the SDK's default error screens ends the checkout throughonPaymentTerminate(sourceuserDismiss). If closing the checkout or running cleanup was handled insideonPaymentFailure, replicate it ononPaymentTerminateso no user is left stranded after the upgrade.- Removed some legacy integration options which were not suitable for production builds.
- Global error handlers are no longer installed in the host app.
FlutterError.onError,PlatformDispatcher.instance.onErrorand the native crash handlers are left alone. If your app inherited SDK-installed handlers, it loses them at this upgrade - install your own. In exchange, the SDK no longer constrains versions for any error-tracking package. onEventis deprecated and will be removed in a future major version. It carries internal events that are subject to change and were never part of the SDK's API contract; the lifecycle callbacks remain the supported integration. If you consumeonEventor supply your ownGlomoPayControllerwithaddEventListener, contact the Glomo mobile team for the event mapping before upgrading.
- Backend-confirmed payment failures now reach
onPaymentFailure. They were being checked against the rule written for a payment success, which requires a signature that a failure payload has never carried - so every confirmed decline was discarded before reaching the host app, in every release build. - Fixed the SDK's default error screens that could not be dismissed. Their buttons no longer take their colours from the host app's theme, so an app theme can no longer hide the exit. Applies to both the default checkout error and connection error dialogs.
- Dismissing a connection error now closes the checkout rather than leaving the user stuck in loading. On Android the system back button does the same, instead of closing the error and leaving the checkout stranded.
- Error callbacks now fire independently of the default dialog being dismissed, so host apps are always informed about what went wrong even if the dialog is never closed.
- Each failure now reports its actual semantic, and only once. A single checkout loading failure fires
onConnectionErroralone - it used to fireonSdkErroras well. - Fixed successful payments being overridden when a load-timeout error had already been reported. A payment completed on a slow checkout that recovered midway now correctly reports
onPaymentSuccess. - The back button is no longer locked while a payment is in progress. Previously a page that stopped responding mid-payment could leave users stuck until payment confirmation arrived.
- The checkout page's own close control now works in every state. It stopped working once the page had reported a payment as pending, which every bank hand-off does.
- Every payment failure the checkout page reports now reaches
onPaymentFailure, including the thinner shape the page emits for its own setup failures. The page's own detail travels untouched in the payload'srawResponse.
CheckoutStatusgainedbankTransferSubmittedanderror. A submitted bank transfer used to leave the status atpaymentSuccessful; a checkout that could not proceed with no payment attempted used to be reported aspaymentFailed. Both new members are appended, so existing members keep the indices they shipped with - only an exhaustiveswitchneeds new arms.onPaymentTerminateis now a notification rather than a handover. The SDK closes the checkout itself whether or not a callback is supplied, and will not close a second time if you also close from the callback.- The load-timeout
onConnectionErroris now advisory: the network may still recover, so the SDK does not close itself on it (shouldAutoCloseisfalse). Prefer not to tear the checkout down onConnectionErrorType.timeout. - The SDK no longer draws its own default error screen when the checkout page reports a failure of its own, since the page already renders one. The page's events continue to reach
onEventexactly as before. - Your app is told about one ending per checkout. A backend-confirmed payment result is the ending, so a user closing what remains afterwards no longer also delivers
onPaymentTerminatefor the same journey. - File uploads are no longer restricted by file type. The SDK now relies on the bank's own guidance - whatever the bank's pages ask for can be selected, including formats the picker previously greyed out.
- Internal event handling has been revamped, refactored and cleaned up. Recommended integrations are unaffected, as these events were never part of the SDK's API contract.
path_provideris now a direct dependency (^2.0.0). It was already resolved transitively, so no new package enters the dependency graph, but the constraint is now the SDK's own and may affect resolution in a pinned host app.
- SDK diagnostics are spooled to the application support directory and flushed on the next initialisation, so a checkout interrupted by process death is still reported. The SDK writes only its own diagnostics there, and no payment data.
- Improved error tracking and SDK diagnostics throughout. Merchant integrations can now freely use their own error-tracking dependencies without version restrictions.
Part of the v2 documentation.
- Fixed the flicker where a bank's 2FA page intermittently disappeared and the checkout screen showed through beneath it.
- Fixed bank pages rendering blank on Android immediately after the page loaded (zero-width layout bug).
- Fixed the iOS software keyboard being dismissed the instant a bank 2FA card or OTP field was focused.
- On iOS, bank pages that manage text selection and caret behaviour in their own card or OTP fields are now honoured instead of overridden. Long-press paste into an empty field is unaffected.
- Rendering of bank pages in redirect chains optimized with several performance enhancements.
- Transient failures of the native bridge are now handled resiliently.
- UI elements with educational content are no longer created when there is nothing to render.
Part of the v1 documentation (Archived).
- Added support for banks with breaking changes in remittance flows.
- Nested
window.openredirects and back button navigations are now handled from within bank flows.
- Added camera/gallery/file picker for images and PDFs, fixing bank flows where document uploads were unusable.
- Added
onUserRefusedDevicePermissionscallback onGlomoPayCheckout- fires when the user denies camera/storage permissions during file/document uploads or selfie verification requests. - File upload fallback improvements: bottom sheet is shown when accept types include non-image formats, and camera permission denial now falls back gracefully instead of returning empty.
- Bug fixes.
- Package version dependency fixed.
- Fix auto scroll bottom to top issue for iOS.
- Removed the aggressive auto-scroll handler from iOS WebView injection to reduce conflicts with bank pages.
- Updated
safe_deviceto resolve AndroidcheckTestKeys()compile issue.
- Device compatibility fix.
- Pinned
safe_deviceto the fixed 1.4.x line to resolve Android compile issues and maintain cross-platform build stability.
- Bug fixes.
- On iOS, the SDK will now open glomo checkout within a modal.
Part of the v1.0.4 documentation.
- Bug fixes.
- Bug fixes.
- iOS copy/paste fix for input fields in checkout pages.
- Credentialed fetch/XHR support for WKWebView session handling.
- Major stable release. Versioned for pub.dev.
- No functional API changes.
Part of the v1.0.4 documentation.
- Added subscription checkout support via
subscriptionId. - Validation requires exactly one checkout identifier:
orderIdorsubscriptionId. - Subscription checkouts reuse standard checkout flow, skip order detection API calls.
- Existing order-based integrations remain backward compatible.
- Fixed iOS UI issue where software keyboard caused bottom UI elements to overlap input fields.
Part of the v0.0.15 documentation.
- Added support for
payment.bank_transfer_submittedevent, treated identically topayment.success. - Relaxed payload validation for bank transfers to require only
orderId. - Relaxed device compliance checks for development environments.
- Enforced strict root and jailbreak detection across all modes.
- Internal improvements.
Part of the v0.0.13 documentation.
- Resolved bank-specific compatibility issues.
- Resolved WebView compatibility issues on certain Android devices.
- Added 15-second render timeout for initial checkout load.
- Improved LRS checkout layout.
- Added LRS education content for supported LRS orders. Non-LRS orders are unaffected.
- Added back button for redirection pages.
- Fixed SDK unresponsiveness on loading screen; now displays error dialog and triggers
onPaymentFailure.
- Minimum Flutter SDK bumped to 3.7.0.
- Added progress indicator to checkout loading.
- Added loading screen for redirect pages.
- Fixed progress indicator reset on page navigation.
- Fixed keyboard overlap on checkout input fields.
- Improved redirect handling in checkout flow.
- Improved checkout reliability.
Part of the v0.0.3 documentation.
- Fixed memory leaks in checkout lifecycle.
- Initial release of GlomoPay Flutter SDK.
- Flutter SDK v2 documentation - latest version (v2.1.0)
- Migration Guide (v1.11.x to v2.0.0) - step-by-step upgrade instructions
- Flutter SDK v1 (Archived) - previous version documentation (v1.11.2)
- Flutter SDK v0.0.15 (Deprecated)
- Flutter SDK v0.0.13 (Deprecated)
- Flutter SDK v0.0.3 (Deprecated)