Changelog
Version history and release notes for the EdfaPay Soft POS SDK.
v1.0.7Current
Latest stable release of the EdfaPay Soft POS SDK.
Breaking Changes
- buyNowPayLater() → invoicePayment(): the BNPL surface is now the generic invoice checkout API. checkoutLinkApi() was removed; use the new invoiceRefund() for invoice refunds.
- Models renamed: InvoiceRequest → split into InvoicePaymentRequest and InvoiceRefundRequest; BnplResponse → InvoicePaymentResponse.
- BnplProvider enum → PaymentMethod with lowercase values (tamara, tabby, checkout, contactless, unknown) and a PaymentMethod.from(String) factory mapping native names (TAMARA_POS, TABBY_POS, PAYMENT_GATEWAY → checkout, SOFT_POS → contactless).
- Deprecated: theme().setPoweredByImage() is no longer effective and will be removed in a future release.
New Features
- Transaction search & status: searchTxnApi(parameters) and pgTxnStatusApi(sessionId) for querying transactions and payment-gateway transaction status.
- Online receipts: Extension.generateOnlineReceipt(type, id) returns the receipt URL; Extension.openOnlineReceipt(type, id) opens it in the browser. New ReceiptType enum (RECONCILIATION, TRANSACTION).
- Terminal unbinding: Extension.unbindTerminal() releases the terminal binding from the device.
- Device-readiness helpers in Utils for reliable background reconciliation: notification permission (Android 13+), exact alarms (Android 12+), battery unrestricted, and OEM autostart checks/requests.
- Reconciliation notification sounds: theme().setReconciliationNotificationSounds(success, error, processing) accepting base64-encoded sound files; pass null to mute a kind.
- API key credential: EdfaPayCredentials.apiKey field with chainable setApiKey(String) — Android native and Flutter.
- Environments: Env.REVAMP and Env.DEMO added.
- React Native parity: the RN SDK (npm edfapay-softpos-sdk-rn) moves from 1.0.6-beta.1 to 1.0.7 with the full native/Flutter 1.0.7 API surface.
Improvements
- Callback routing hardened: native callbacks are routed by a unique per-invocation id instead of method name, so concurrent or repeated calls (e.g. sequential refund()) no longer overwrite each other's handlers.
- initiate() now reports the host app type (Flutter / ReactNative) to the native SDK.
Bug Fixes
- Utils.requestNotificationPermission and requestLocationPermission no longer crash with IllegalStateException (LifecycleOwner attempting to register while RESUMED); the activity-result launcher now registers via ActivityResultRegistry.
- unbindTerminal endpoint corrected in the native SDK.
Loading...Breaking Changes
v1.0.7 renames the BNPL API to the invoice payment API. See the upgrade guide below before updating. React Native keeps buyNowPayLater() as a deprecated alias; Flutter removes it entirely.
v1.0.6
Previous stable release of the EdfaPay Soft POS SDK.
Breaking Changes
- changePin() & activateCard() (both platforms): Parameter changed from TxnParams to List<String> parameters. Remove any TxnParams usage in these calls and pass the raw parameter list instead.
- Flutter package renamed: edfapay_flutter → edfapay_softpos_sdk. Update pubspec.yaml and all import statements.
New Features
- Flutter Extension.loginWithCredentials(): Full email/password authentication flow via PluginExtension
- Flutter Extension.getInitialKey(): Low-level key retrieval for advanced terminal setup
- Flutter Extension.renewSessionIfRequiredAndPossible(): Automatic session renewal without reinitializing
- Flutter Utils.saveData() / Utils.getData(): Encrypted persistent key-value storage
- Flutter EdfaPayCredentials.withInput() and .withEmail() constructors for interactive/partial credential entry
Bug Fixes
- Flutter enableLogs: now a method call enableLogs(bool), not a property assignment
- Flutter RemoteChannel.LocalNetwork timeout: parameter is Double (seconds), not Long (milliseconds)
- Flutter Pagination: constructor uses pageNumber/pageSize (not page/size)
- Flutter reconciliationDetail/reconciliationReceipt: id: parameter (not reconciliationId:)
- Flutter Transaction.withRRN/withTxnNumber: positional arguments, second arg is DateTime? not String
- Flutter showMessageDialog: callback is onClose: (not onOk:)
- Flutter setShufflePinPad: named parameter required — setShufflePinPad(shuffle: true)
- Flutter onTerminalBindingTask: callback receives TerminalBindingTask object; call task.bind() or task.bind(terminal: terminal) — not a raw list
- Flutter changePin/activateCard: onRequestTimerEnd, onCardScanTimerEnd, onCancelByUser callbacks are required
Loading...Breaking Changes
v1.0.6 contains breaking changes for Android and Flutter. See the upgrade guide below before updating.
v1.0.5
Previous stable release of the EdfaPay Soft POS SDK.
New Features
- Partner Configuration API: setPartnerConfig() for custom API endpoints and branding
- Card Management: activateCard() and changePin() now documented with full multi-platform examples
- Remote Access API: EdfaPayPlugin.RemoteChannel.LocalNetwork for POS integration via TCP
- Extension API: EdfaPayPlugin.Extension.loginWithToken() for advanced authentication
- Flutter parity: All payment operations, history, reconciliation, terminal, and session APIs now available in Dart
Improvements
- Terminal binding: onTerminalBindingTask now documented for both native and Flutter (bindTerminal API)
- Documentation: Full multi-language code examples (Kotlin, Java, Flutter, React Native, Xamarin) across all pages
- Theme API: setPresentation() now covers all 10 presentation types with full behavior/visual options
- Error handling: EdfaError sealed class hierarchy documented with 1xxx–9xxx error code ranges
Bug Fixes
- SdkTheme.setHeaderImage() correctly documented with Base64 for hybrid platforms
- void() method documented as void$() for Flutter (Dart reserved keyword workaround)
- Session management getters documented as async Futures in Flutter
- Animation speed documented as method setAnimationSpeedX() not property in Flutter
Loading...Version Policy
We follow semantic versioning (SemVer). Breaking changes are introduced only in major versions with migration guides.
v1.0.4
Previous stable release.
New Features
- Initial Flutter bridge plugin (Dart) support
- EdfaPayCredentials.withToken() and .withEmailPassword() constructors for Flutter
- Reconciliation API: reconcile(), reconciliationHistory(), reconciliationDetail(), reconciliationReceipt()
- Session Management API: getSessionId(), getSessionList(), logoutCurrentSession(), logoutSession()
- Terminal Management API: terminalInfo(), activateTerminal(), deActivateTerminal(), syncTerminal()
Improvements
- initiate() now returns sessionId in onSuccess callback
- Improved error messages in EdfaError hierarchy
- Performance improvements in NFC card scan workflow
Bug Fixes
- Fixed terminal binding callback not firing on some Android 14 devices
- Fixed animation speed property not persisting across SDK reinitialization
v1.0.3
Multi-terminal support and session management.
New Features
- Multi-terminal support: onTerminalBindingTask callback introduced
- Session Management API: getSessionList(), getSessionDetail(), logoutSession()
- Transaction History: txnHistory() with Pagination support
Improvements
- Improved NFC card detection reliability on Android 13+
- Better error messages for terminal binding failures
Bug Fixes
- Fixed session not persisting after app restart on some devices
- Fixed transaction history pagination returning incorrect page counts
v1.0.2
PIN pad customization and location validation.
New Features
- PIN pad shuffle: setShufflePinPad() for enhanced shoulder-surfing protection
- Location validation: mock location detection via EdfaPayPlugin.Utils.location
- Presentation.setShufflePinPad() method added
Improvements
- Improved EMV kernel stability for Mastercard contactless
- Reduced NFC tap-to-read latency by 200ms average
Bug Fixes
- Fixed PIN pad layout on small screen devices (<5.5 inch)
- Fixed location permission request not showing on Android 12
v1.0.1
EMV kernel stability improvements and documentation refinements.
Improvements
- EMV kernel: improved Visa and Mastercard contactless reliability
- Reduced SDK initialization time by ~30%
- Documentation: added Java equivalents for all Kotlin examples
Bug Fixes
- Fixed occasional ANR during NFC card scan on lower-end devices
- Fixed theme colors not applying on first SDK launch
v1.0.0Initial Release
The initial release of the EdfaPay Soft POS SDK.
New Features
- Core payment operations: purchase(), authorize(), capture(), refund(), void(), reverseLastTransaction()
- NFC tap-to-pay via EMV kernel (Visa, Mastercard, AMEX)
- SDK initialization with EdfaPayCredentials (token and email/password auth)
- SdkTheme customization: colors, fonts, logos, animations
- Presentation modes: FULLSCREEN, DIALOG_CENTER, and positioned overlays
- Basic terminal management: activate, deactivate, sync
- EdfaError sealed class hierarchy for structured error handling
Upgrade Guide
Follow these steps when upgrading the SDK to a new major or minor version.
Upgrading to v1.0.7
The BNPL API was renamed to the invoice payment API. Migrate as follows when upgrading from v1.0.6 to v1.0.7:
Loading...Flutter removes the old names
In Flutter, buyNowPayLater() and checkoutLinkApi() are gone — code using them will not compile. In React Native they remain as deprecated aliases that forward to invoicePayment(), but you should migrate now.
Upgrading to v1.0.6
Breaking changes require the following migration steps when upgrading from v1.0.5 to v1.0.6:
Loading...Required — Breaking Changes
Both items below must be addressed before building against v1.0.6. The app will not compile otherwise.
Upgrading to v1.0.5
Key changes when upgrading from v1.0.4 to v1.0.5:
onTerminalBindingTask
Now required — implement this callback to select a terminal during initialization.
setPartnerConfig()
New method — call before initiate() if you have a partner configuration string.
reverseLastTransaction()
New convenience method — replaces manual reverse() calls for timeout recovery.
Error Handling Migration
The EdfaError sealed class hierarchy was expanded in v1.0.5. Update your when/switch expressions to handle new subtypes.
Backward Compatible
Existing error handling code using the else/default branch will continue to work. New error types will fall through to the default case.
On this page
Downloads
Coming SoonSample apps, release bundles, and more content will be available here soon.