Google Pay: added allowCreditCards and allowPrepaidCards options to PrimerGooglePayOptions, letting you restrict the card types offered through Google Pay. Both default to true, so existing integrations are unaffected.
Primer SDK now depends on io.primer:klarna-android:1.3.0
If you are using the Klarna dependency in your code, you are encouraged to update it and align with the supported version.Klarna SDK was updated from v2.7.1 to v2.11.3. Please refer to the official Klarna CHANGELOG
for more information.
Primer SDK now depends on io.primer:3ds-android:1.8.0
If you are using the 3DS dependency in your code, you are required to update it and align with the supported version. Otherwise, 3DS will result in failure.Changelog:
New LOA Reference Number
Updated Device Information Data Version to EMVCo 3DS SDK Device Information 1.7
Bouncy Castle (artefact: org.bouncycastle:bcprov-jdk15to18) has been removed as a dependency. The 3DS SDK defaults to the default OS Security Provider in case Bouncy Castle is not found.
EFTPOS co-badged cards now leaves card selection up the vendor without user interaction
Primer SDK now depends on io.primer:3ds-android:1.7.0
If you are using the 3DS dependency in your code, you are required to update it and align with the supported version. Otherwise, 3DS will result in failure.Changelog:
The 3DS SDK now follows the EU Directive 2019/882.
🔧 Fixes
fix a corner case when switching between different co-badged cards
Breaking Change: This version removes support for legacy API versions. The SDK now requires API version 2.4 or later.
⚠️ Legacy API Option RemovedThe PrimerApiVersion.V2_3 option for settings.apiVersion has been removed. The SDK now exclusively uses API version 2.4.If you were using the PrimerApiVersion.V2_3 setting:
Ensure your backend integration supports API version 2.4
Review the Migration Guide for detailed upgrade instructions
Improved internal analytics event processing to consolidate redundant events and enhance payload data with richer contextual metadata.
This internal improvement reduces network overhead while providing better system insights.
Primer SDK now depends on io.primer:klarna-android:1.2.0
If you are using the Klarna dependency in your code, you are encouraged to update it and align with the supported version.Klarna SDK was updated from v2.6.27 to v2.7.1. Please refer to the official Klarna CHANGELOG
for more information.
Continuing 3DS flow sometimes failed silently, resulting in failed-to-resume or payment-failed errors.
We have fixed that and improved our logging in this specific use case.
Primer SDK now depends on io.primer:3ds-android:1.6.2
If you are using the 3DS dependency in your code, you are required to update it and align with the supported version. Otherwise, 3DS will result in failure.Changelog:
Due to several security vulnerabilities, Bouncy Castle (artefact : org.bouncycastle:bcprov-jdk15to18) was updated to version 1.79
This update improves performance on devices with larger memory capacities by fulfilling Google’s requirement for 16 KB memory page sizes, ensuring full compatibility with future Play Store regulations.
We have added CardFormUIOptions.payButtonAddNewCard to support the “Add New Card” option in the card form flow. Please check our docs for more information
Introduced support for the ‘Continue payment flow’ workflow action to configure checkout outcome. See our documentation for more info.
🔧 Fixes
Fixed a crash caused by misuse of CheckoutExitHandler.
PayPal: Improved support for picture-in-picture mode. Fixed an issue where some successful authentication flows were incorrectly marked as errors by the SDK.
3DS: Enhanced locale normalization. Resolved an issue where certain locales were being rejected by the 3DS SDK, causing the flow to fail.
Cleanup Enhancements: Added a new cleanClientSessionCache parameter to the cleanup function. You can now control whether to clear the Client Session cache in both Drop-In and Headless integrations.
Klarna: Improved styling support for Klarna components
⚠️ Primer SDK now supports BOM (Bill of Materials) via io.primer:bomIf you’re using Klarna in your own code, you can switch to the BOM to automatically stay aligned with the supported version:implementation(platform("io.primer:bom:<version>")) implementation("io.primer:klarna-android")This removes the need to manage Klarna versions manually.If you choose not to use the BOM, make sure you manually update to io.primer:klarna-android:1.1.0
The SDK will now default to using API version 2.4 when initialised. It is possible to use API version 2.3 via PrimerSettings.apiVersion. For more information see our SDK reference, Api Reference and Migration Guides.
We have fixed a bug in the Drop-In Checkout which resulted in “Additional fees may apply” text being shown for the Card payment method, when no surcharge was present.
We’ve fixed issues with displaying the partial billing address form in Drop-in. Now, the data is collected and updated correctly. Previously, the SDK returned an error when updating the client session.
With this version it is possible to opt-in to use API v2.4, which is no longer in Beta. For more information see our SDK reference, Api Reference and Migration Guides. The SDK will continue to use API v2.3 by default.
Expanded Language Support: The Android SDK now supports additional languages, including:
Arabic
Bulgarian
Czech
Spanish (Argentina & Mexico)
Estonian
Croatian
Hungarian
Japanese
Latvian
Portuguese (Brazil)
Romanian
Vietnamese
3DS Sandbox Testing: Enhanced support for testing 3D Secure (3DS) flows in the sandbox environment.
Improved Analytics & Reporting: Enhanced tracking and insights for better performance monitoring.
With this version it is possible to opt-in to test API v2.4(Beta). For more information see our API Reference and Migration Guides. By default, SDK will remain backward compatible and use API v2.3.
✨ Improvements
API Timeout values have been updated to improve behaviour in the loading phases of the checkout.
🔧 Fixes
Analytics: fixed serialization and deserialization of analytics events.
Co-badged cards in Drop-in: Primer SDK will automatically detect co-badged cards in the Drop-In integration. This release also brings improvements to card network detection in general. Visit our documentation about co-badged cards in order to learn more.
✨ Improvements
Enhanced Card Expiry Date Validation: We’ve improved the accuracy of expiry date validation for both headless and drop-in integrations.
Improved Stability: Resolved crashes caused by ConcurrentModificationException during SDK initialization.
Native Payment Method Button Support: Some payment methods require and offer their native views. To support this, we’ve updated our Asset Manager and introduced the getPaymentMethodResource method to access these native resources seamlessly. If you are using Headless integration, make sure to check our updated documentation about rendering of payment method buttons.
Usage of Native Payment Method Button is a requirement for all new Android Google Pay API integrations that use a Google Pay payment button.
ACH Vaulting via Stripe: The ACH payment method through Stripe now supports a vaulting flow, enabling you to save customer details on agreement for future transactions.
Google Pay Enhancements: You can now collect additional user data through Google Pay, including the user’s email and shipping address. Check out our guide for details on enabling this feature.
✨ Improvements
PayPal Integration: We’ve improved the PayPal user experience by adopting the recommended approach of using Chrome Tabs, eliminating the need for browser redirections and reducing friction during payment.
SDK Resilience: We’ve enhanced SDK resilience to better handle scenarios where Activities are destroyed due to process death, ensuring a smoother recovery experience.
🔧 Fixes
3DS Locale Handling: We’ve fixed an issue where locale extensions were stripped, causing failed 3DS transactions. This update ensures compliance with 3DS guidelines and smoother transaction processing.
Deprecations
In order to support Native Payment Method Button requirements, we have deprecated following methods:
Prevent dismissal of Drop-in card form while a payment is active.
Vipps via Adyen will now fall back to the Web flow in the event that the Vipps mobile app was not installed.
Added DividerThemeData that can be used for styling of dividers in Drop-In. Check out our documentation here.
You can now use custom colour for input cursors by specifying cursorColor in InputThemeData
⚠️ Primer SDK now depends on io.primer:3ds-android:1.5.0
If you are using the 3DS dependency in your code, you are required to update it and align with the supported version. Otherwise, 3DS will result in failure.
We have added support for ACH via Stripe. ACH lets you accept payments from customers with a US bank account.
ACH Direct Debit is a reusable, delayed notification payment method. It can take up to 4 business days to receive acknowledgement of success or failure.
This release includes: One-off payments, cancel, and refund actions. We aim to add support for recurring payments in the future.
You can easily integrate ACH via Stripe into your payment stack with just a few clicks through Primer. Visit the integrations section of the dashboard to learn more or consult the direct integration guide.
Client Session caching: It is now possible to cache the ClientSession configuration client-side, which can speed up certain flows in the SDK. This can be enabled via the clientSessionCachingEnabled flag. Before enabling the flag to true it’s recommended to reach out to Primer support for additional verification since there are edge cases where it is not advised.
Improved initialization: We have strengthened the Android SDK’s initialization process, ensuring it remains reliable even if users experience connectivity drops. These changes guarantee a smoother experience.
We have removed Card Components and related UI from the SDK. Card components were previously deprecated.
Improved payment method handling when payments are completed outside of the scope of the SDK session.
🔧 FixesWe have resolved the issue with the 3DS service initialization that was incorrectly triggering errors during the initialization process. Please note, that with this update, compatibility requires the use of the 1.4.3 version of the 3DS SDK (io.primer:3ds-android:1.4.3).
✨ ImprovementsWe have aligned the card expiry date validation logic between the Drop-In and Headless integrations, which were previously different. Additionally, we fixed a bug that caused the current month and year to be considered invalid expiry dates.
✨ ImprovementsWe have aligned error handling across mobile platforms and enhanced our analytics capabilities. Additionally, we have thoroughly documented all errors. For more details, please refer to the official documentation here.
We have improved the PayPal payment method token by providing additional data, including the payer’s first name and last name. For more information, see our SDK reference docs.
Google Pay: By default, Google Pay is presented to the user regardless of whether they have a supported card in their wallet. You can now automatically hide Google Pay if the user’s wallet does not contain a supported card by setting existingPaymentMethodRequired to true. Check our guide on how to enable this feature.
PayPal: We have improved the PayPal payment method token by providing additional data, including the payer’s first name, last name, and external payer ID.
CVV recapture for saved cardsWithin the Drop-In integration, you now have the ability to recapture CVV for saved cards. When the feature is enabled, users will be directed to a new screen where they can input the CVV related to the saved card. To activate this feature, please refer to our guide for detailed instructions on enabling this enhancement. You can find the guide here.✨ ImprovementsPlease note, with this update, compatibility requires the use of the 1.4.2 version of the 3DS SDK (io.primer:3ds-android:1.4.2).
We’ve enhanced our internal analytics infrastructure for tracking network events, empowering us to efficiently gather valuable data on latency and API errors.
🔧 Fixes
Previously, when the app utilizing our SDK was built in release mode with minification applied, initialization of the SDK would fail. We’ve since addressed this issue by updating our consumer-rules.pro files. You should not manually include any Proguard rules, as consumer-rules.pro are seamlessly integrated with your existing Proguard rules.
With the release of version 2.26.0, we’ve improved our Klarna integration. As a result, we identified an issue where error handling was not functioning correctly when utilizing standalone mode for Drop-In integration (Primer.instance.showPaymentMethod(..)). This concern has been promptly addressed and resolved.
We’ve enhanced the handling of payment completion for our Nol pay integration, addressing a regression that had occurred.
We have added the ability to select Klarna payment category in Klarna Drop-in
Support has been added for CHECKOUT payment intents for Klarna Drop-in
We have included support for Klarna Extra Merchant Data
In this release we have added the PrimerHeadlessUniversalCheckoutKlarnaManager that provides access to the KlarnaComponent.
Using the KlarnaComponent you can seamlessly integrate Klarna, with a custom payment category selection UI.
Consult the guide to get a sense of how to seamlessly integrate Klarna.
⚠️ Primer SDK now depends on io.primer:klarna-android:1.0.2
If you are using the Klarna dependency in your code, you are required to update it in align with the supported version. Otherwise, Klarna will result in failure.
We have released support for co-badged cards. You can allow users to select a network if their card is co-badged.
We have also improved card network validation significantly for all card networks.
In our most recent 3DS SDK update, we’ve addressed a bug affecting 3DS support. Previously, there was an issue where the Issuer or Payment System image wouldn’t consistently display on the Challenge UI. Please note, with this update, compatibility requires the use of the 1.4.1 version of the 3DS SDK (io.primer:3ds-android:1.4.1).
** 🔧 Fixes**
We have fixed a bug where the SDK would crash in case of recovering from a process death.
In this latest release, our 3DS support has undergone some slight enhancements. Please note, with this update, compatibility requires the use of the 1.4.0 version of the 3DS SDK (io.primer:3ds-android:1.4.0). We recommend upgrading to this version as it brings new LOA Reference Number for all protocol versions.
Internally, between the different platforms, we have aligned how the currencies are formatted. Currency metadata is now being served from our server, allowing us to adapt to potential changes without the SDK update being needed.
** 🔧 Fixes**
Previously, Google Pay was hidden in case the amount was set to 0. From now on, Google Pay will be always shown in case it was enabled in Primer Dashboard and the device supports payments with Google Pay.
✨ ImprovementsWe’ve enhanced our logging capabilities to provide more comprehensive insights. Specifically, when the PrimerLogLevel is set to DEBUG and you are utilizing our default logger implementation, the complete request and response bodies are now logged to the console.if you opt for a custom PrimerLogger implementation, as a security measure, any Personally Identifiable Information (PII) and Payment Card Industry (PCI) data will be automatically obfuscated.** 🔧 Fixes**Fixed bug where order.fees.type was not being correctly deserialized by the SDK.
💳 APMs supportiDEAL via AdyenAdds the PrimerHeadlessUniversalCheckoutComponentWithRedirectManager that provides access to BanksComponent. Using the BanksComponent you can easily:
load list of all supported banks
submit user’s selection
Consult the guide to get a sense of how to seamlessly integrate iDEAL via Adyen.
In this latest release, our 3DS support has undergone significant enhancements, offering a multitude of improvements. Please note, with this update, compatibility requires the use of the 1.3.0 version of the 3DS SDK (io.primer:3ds-android:1.3.0)
💳 APMs supportIn this release we have removed Apaya integration.✨ Improvements
We have enhanced our internal analytics capabilities, enabling us to collect a broader range of data, and we have streamlined the process for sending events, ensuring greater efficiency and effectiveness.
Keyboard cache is now disabled for sensitive inputs. We highly encourage you to update your SDK to reduce the risk that sensitive user data are leaked to other applications.
DeprecationsPrimerHeadlessUniversalCheckoutCardComponentsManager has been deprecated and will no longer receive ongoing maintenance and will be removed in the future.
💳 APMs supportnol PayAdded support for new version of the nol Pay wrapper SDK. Starting from this version, use the 1.0.1 version of nol Pay wrapper:implementation io.primer:nol-pay-android:1.0.1
💳 APMs supportnol Paynol Pay payment method is now considered stable. Please check our integration guide in order to seamlessly integrate nol Pay.✨ ImprovementsWe have introduced PrimerLogger that allows you to listen to SDK logs on a specified log level, or provide your own PrimerLogger implementation in order to listen and process Primer SDK logs.Check out our detailed SDK reference here.
Phone number validation is significantly improved.
We no longer require separate fields for phoneCountryDiallingCode to be passed. Now you can pass full phone number and SDK will parse and validate phone number.
We have also fixed the crash that was reported when there were no workflows configured for payment methods.
Consult the guide to get a sense of how to seamlessly integrate nol Pay.
In previous versions we have used Koin for Dependency Injection inside of our SDK. Starting from this release, Koin was removed as transitive dependency.
✨ ImprovementsIn this version of the SDK we have introduced a new version of 3DS library. Primer SDK will depend on io.primer:3ds-android:1.2.0 from now on.
⚠️ If you are using 3DS dependency in your code, you are required to update it in order to align with the supported version. Otherwise, 3DS will result in failure.
⚠️ This version introduces breaking changes for Headless Checkout.
A migration guide for this can be found here.
Headless Vault ManagerAdd PrimerHeadlessUniversalCheckoutVaultManager.newInstance() which returns an instance of PrimerHeadlessUniversalCheckoutVaultManager. It provides the following features:
3DS ServiceOur 3DS service has been completely revamped. Primer SDK now supports 3DS protocol version 2.2.0
Support 3DS weak validation
Support 3DS OOB flow
Improve 3DS reporting
Check out our detailed documentation here💳 APMs supportCards via iPay88In this version of the SDK we added the support for Cards via iPay88.
Cards via iPay88 Payment Method now is fully supported via Headless Universal Checkout and Drop-In.
You can now make one-off payments or vault a card with iPay88 in order to make recurring payments.
Please update the iPay88 SDK version to 1.0.1
✨ Improvements
Improvements to deeplink handling for PayPal and Redirect based payment methods
Reintroduce showing a payment method directly with the Drop In UI integration
Koin dependency has been bumped to version 3.3.3
Better interoperability with Java when using Primer SDK
Internal SDK improvements
PrimerPaymentMethodAsset now exposes the payment method’s friendly name
🔧 Fixes
Fixed bug where calling submit method of PrimerHeadlessUniversalCheckoutCardComponentsManager would return error due to wrong formatting of expiry date.
Apply fix on PayPal vaulting
Resolved bug where Drop In UI could be launched multiple times at same time
Resolved internal analytics crashes.
🤹 Breaking changes
PrimerCardComponentsManagerListener has been renamed to PrimerHeadlessUniversalCheckoutCardComponentsManagerListener.
The package name for the PrimerHeadlessUniversalCheckoutNativeUiManager has been changed to io.primer.android.components.manager.nativeUi.
Headless Vault ManagerAdd PrimerHeadlessUniversalCheckoutVaultManager.newInstance() which returns an instance of PrimerHeadlessUniversalCheckoutVaultManager. It provides the following features:
⚠️ This version introduces breaking changes for Headless Checkout
🔧 Fixes
Fixed bug where calling submit method of PrimerHeadlessUniversalCheckoutCardComponentsManager would return error due to wrong formatting of expiry date.
🤹 Breaking changesPrimerCardComponentsManagerListener has been renamed to PrimerHeadlessUniversalCheckoutCardComponentsManagerListener.
⚠️ This version introduces breaking changes for Headless Checkout
✨ Improvements
Better interoperability with Java when using Primer SDK
Internal SDK improvements
🤹 Breaking changesThe package name for the PrimerHeadlessUniversalCheckoutNativeUiManager has been changed to io.primer.android.components.manager.nativeUi.
⚠️ This version introduces breaking changes for Headless Checkout
✨ Improvements
👌 Alongside the listed features below, we have performed improvements to our codebase.
💳 APMs supportCards via iPay88In this version of the SDK we added the support for Cards via iPay88.Cards via iPay88 Payment Method now is fully supported via Headless Universal Checkout and Drop-In.You can now make one-off payments or vault a card with iPay88 in order to make recurring payments.🚀 ImprovementsIn addition to RC2 release, we have improved couple of things based on your feedback.We have also added all of the new things we worked on in releases 2.16.5 and 2.16.6.
⚠️ This version introduces breaking changes for Headless Checkout
✨ ImprovementsIt’s been more than 6 months that Headless Checkout has been released in Beta!We gathered insightful feedback that pushed us to work on critical improvements to the developer experience of Headless Checkout.This release candidate introduces a more robust, scalable, and stable flow for integrating Headless Checkout to implement a fully custom interface for your checkout.Our documentation has been updated to reflect these changes. You can also find a Migration Guide detailing the changes.This release candidate will soon be merged into the main releases.In addition to RC1 release, we have improved couple of things based on your feedback.We have also added all of the new things we worked on in releases 2.16.3 and 2.16.4.
⚠️ This version introduces breaking changes for Headless Checkout
✨ ImprovementsIt’s been more than 6 months that Headless Checkout has been released in Beta!We gathered insightful feedback that pushed us to work on critical improvements to the developer experience of Headless Checkout.This release candidate introduces a more robust, scalable, and stable flow for integrating Headless Checkout to implement a fully custom interface for your checkout.Our documentation has been updated to reflect these changes. You can also find a Migration Guide detailing the changes.This release candidate will soon be merged into the main releases.
In this version of the SDK we have introduced a new version of Klarna library. Primer SDK will depend on io.primer:klarna-android:1.0.1 from now on.
⚠️ If you are using Klarna dependency in your code, you are required to update it in order to align with the supported version. Otherwise, Klarna will result in failure.
👌 Alongside the listed features below, we have performed improvements to our codebase.
💳 APMs supportCards via iPay88In this version of the SDK we added the support for Cards via iPay88.Cards via iPay88 Payment Method now is fully supported via Headless Universal Checkout (Beta) and Drop-In.🚀 New feature
In this version of the SDK we have introduced a new version of 3DS library. Primer SDK will depend on io.primer:3ds-android:1.1.2 from now on.
⚠️ If you are using 3DS dependency in your code, you are required to update it in order to align with the supported version. Otherwise, 3DS will result in failure.
We have added a way to capture billing address using Google Pay. You will need to pass captureBillingAddress = true to PrimerGooglePayOptions
This version fixed an issue when a developer wanted to disable the showing of some screens. Previously that was broken due to Android OS automatically showing the bottom sheet dialog when we get back on the main screen, even if we hide it before.
👌 Alongside the listed features below, we have performed improvements to our codebase.
In this version of the SDK we have introduced a new version of 3DS library. Primer SDK will depend on io.primer:3ds-android:1.1.1 from now on.
⚠️If you are using 3DS dependency in your code, you are required to update it in order to align with the supported version. Otherwise, 3DS will result in failure.
🔧 Fixes
We have fixed certain redirection issues for payment methods using Buckaroo as PSP
👌 Alongside the listed features below, we have performed improvements to our codebase.
In this version of the SDK we have removed options to pass 3DS vaulting flag is3DSOnVaultingEnabledAbove flow is now obsoleted and 3DS will always follow workflows.
👌 Alongside the listed features below, we have performed improvements to our codebase.
💳 APMs supportRetail Outlets via XenditIn this version of the SDK we added the support for Retail Outlets via Xendit.Retail Outlets via Xendit Payment Method now is fully supported via Headless Universal Checkout (Beta) via the Raw Data Manager.Check this out in our documentation 🙌🔧 Fixes
Fix initialization for Universal Checkout.
This fix solves the issue affecting version 2.13.0. We recommend updating to this 2.13.1 version.
👌 Alongside the listed features below, we have performed improvements to our codebase.
💳 APMs supportBancontact via Adyen supportIn this version of the SDK we added the support for Bancontact Debit via Adyen for.Bancontact Debit via Adyen Payment Method now is fully supported via Headless Universal Checkout (Beta) and the standard SDK implementation.In this release, developers have the ability of initializing the raw data for a Bancontact Card 💳 and perform the Tokenization flow via their own fully customized UI yet utilizing all of the features that make Primer great.
👌 Alongside the listed features below, we have performed improvements to our codebase.
💳 APMs supportIn this version of the SDK we added the support for PromptPay via Omise 🙌.In Headless Universal Checkout (Beta), developers will access to a new event which will provide an object PrimerCheckoutQRCodeInfo containing the data needed to build their awesome UI / UX on top.For PromptPay specifically, the object will be PromptPayCheckoutAdditionalInfofun onAdditionalInfoReceived(info: PrimerCheckoutAdditionalInfo) = Unit🚀 ImprovementsWe have fixed a crash on billing address country selector screen.
🚀 ImprovementsWe have removed some transitive dependencies from our code. This will result in smaller size of you application when Primer SDK is imported.
👌 Alongside the listed features below, we have performed improvements to our codebase.
This release changes the way that Klarna is integrated, and switches on Klarna’s native Android SDK.💳 APMs supportDrop-in
Added support for Multibanco via Adyen.
Headless
Added support for Multibanco via Adyen.
Added support for MbWay via Adyen.
🚀 ImprovementsWe have removed some transitive dependencies from our code. This will result in smaller size of you application when Primer SDK is imported.
👌 Alongside the listed features below, we have performed improvements to our codebase.
Last release was all about bringing the possibility to Headless Checkout of utilizing the raw data a card 💳 contains so that developers could utilize their own fully customized UI and still use all of the features that make Primer great.We kept expanding the Headless Checkout feature, now providing to our developers the raw phone number data they can utilize to create payments.The payment method supporting that is only OVO via Xendit for now.Try it out and let us know what do you think 🙌!We didn’t stop here though, alongside the phone number capture, we have enriched our suite of available payment methods adding MB Way, working with Portuguese phone numbers 🇵🇹 and needing the MB Way App to complete the payment.Here is a preview 👇
👌 Alongside the listed features below, we have performed improvements to our codebase.
This release enhance the capabilities of our SDK in its Headless Checkout feature, bringing the possibility of utilizing your fully customized UI and still use all of the features that make Primer great. We now give to our developers all the raw data a card contains.Try it out and let us know what do you think 🙌!
👌 Alongside the listed features below, we have performed improvements to our codebase.
This release brings a totally new way of retrieving the APMs.We have now the possibility of providing some APMs without even push a new release 🙌.That’s a huge milestone for us and the developments of our product.As everything game-changing, it comes with a cost. To be able to support this release, we have made some changes that requires some work in case you are already utilizing the SDK.**🚨 Migration info🚨Payment methods' types in version prior to this one (<2.4.0) were represented by a enum PrimerPaymentMethodType` .In this version, we are no longer exposing the enum , and return a plain String instead.
✨ ImprovementsThe version 2 of the Headless Universal Checkout is out!
💡 Take a look at the migration guide for updating your integration to version 2.
✨ Payments created automaticallyPrimer Headless Universal Checkout | SDKStarting from this version, automatic payment creation is included in the Headless Universal Checkout. You should now only care about creating best possible and seamless experience for your users, we will take care of the rest. Please take a look at our simple explanation about the changes we made.
💳 Dummy Payment MethodsUniversal Checkout | Payment MethodsWe want you to start creating payments with Universal Checkout as quickly as possible, so we’ve added some dummy payment methods - no credentials required 😎The following payment methods have been added:
PayPal via Primer
Sofort via Primer
Klarna via Primer
These payment methods are purely for demonstrative purposes and aren’t tied to any payment method specific environment.You can now create payments in different states (authorized, declined, failed) and see them in the dashboard’s Payments page.No need to create sandbox accounts with different processors/payment methods, the dashboard and all its great features can now be used without any setup.
💡 Primer’s Dummy Payment Methods will come preconfigured with all new sandbox accounts.
✨ ImprovementsThe version 2 of the SDK is out!This includes a simplified way to integrate Primer
📚 Take a look at the migration guide for updating your integration to version 2.
✨ Payments created automaticallyUniversal Checkout | SDKCreating payments with Universal Checkout is now seamless. There’s no more need for callbacks, API calls and headaches to create a payment. It’s all done under the hood 🧙In the past, creating payments involved manual payment handling:
On the client side, you would have had to implement the dreaded CheckoutEvent.TokenizationSuccess and CheckoutEvent.ResumeSuccess callbacks:
Kotiln
private val listener = object: CheckoutEventListener { override fun onCheckoutEvent(e: CheckoutEvent) { when(e) { is CheckoutEvent.TokenizationSuccess - > { // Create a payment // If payment fails: show error message // If payment succeeds: show a success message // If payment has a required action: return the new client token } is CheckoutEvent.ResumeSuccess - > { // Resume the payment // If payment fails: show error message // If payment succeeds: show a success message // If payment has a required action: return the new client token } } }}
On the server side, you had to manually call our Payments API in order to create a payment 🤷Rejoice! As from version 2.0.0 no manual payment handling is required! Payment creation is now, as mentioned above, seamless.Feel free to rip out the above mentioned callbacks when migrating to version 2.0.0 and enjoy the feeling of utter relaxation as all your payment handling is now done by Universal Checkout 💆
For the nerds ❤️
Payment lifecycle callbacksIf you would still like to have some insights into how Universal Checkout is handling payment creation, we’ve introduced some new optional callbacks which will notify you during certain events in the payment lifecycle.
💡 For more information on these callbacks, take a look at the Payment Lifecycle Callbacks section in our new and improved API reference
Manual payment handlingFor the brave and bold among us who would still like to manually handle payments in the checkout and perform the necessary API calls for payment creation - take a look at our manual payment creation guide 📚
🔨 DeprecationThe Android SDK’s move to version 2 has brought a lot of exciting changes and along with these changes, some deprecations.
📚 Please take a look at our Android SDK version 2 migration guide for a full list of the deprecations made.
Complete redesign of PrimerTheme. PrimerTheme.create() is now deprecated. Use PrimerTheme.build() or resource files to create custom themes.
Primer singleton object has been redesigned with a new initialisation flow. Please refer to the quick start guide for further info. Primer.initialize() is now deprecated.
The Klarna flow has been updated so that all user cancellations are captured by the event listener. Refer to CheckoutEvent.Exit & its CheckoutExitReason parameter to listen to the following events: DISMISSED_BY_USER or ERROR (error thrown by Klarna).
You can now pass a flag to clear all listeners when dismissing the Primer view with UniversalCheckout.dismiss(clearListeners = true). This is the recommended way to complete the session before navigating to a different activity/fragment.
Option to pass in flag clearAllListeners when calling showVault() / showCheckout(). Set this flag as true, if you need to call UniversalCheckout.initialise() more than once.
Fixes bug where main universal checkout would display checkout options incorrectly.
Running the SDK in release mode with app shrinking minifyEnabled = true caused the app to crash. This has been addressed so that the SDK will run with all forms of app shrinking.
The Klarna web view flow for Sweden is now configured to automatically redirect to the Mobile BankID app when using direct debit.
When creating in the Klarna object it is now possible to set a webViewTitle for the Klarna web view’s toolbar.
Improvements to app links and schemes with new webBrowserRedirectScheme param to pass in custom app link scheme when calling the SDK with showVault()/showCheckout().
New option of preferWebview for showing Klarna checkout flow in an integrated web view instead of a separate browser window.
new option to call UniversalCheckout.showError() when wishing to display the default SDK error view.
The locale is now optionally set in UniversalCheckout.initialize() and is used solely to determine language and localisation.
A countryCode parameter has been added to showVault()/showCheckout(). This is used to determine location for different payment sessions (e.g. Klarna). If a country code has already been passed in when creating a Primer client token on the backend this SDK’s countryCode value is ignored.
Minor bug fixes & improvements to stability and UX.
You can easily integrate ACH via Stripe into your payment stack with just a few clicks through Primer. Visit the integrations section of the dashboard to learn more or consult the direct integration guide.