Primer SDK now depends on io.primer:3ds-android:2.54.0
The wrapper libraries (3ds-android, klarna-android, stripe-android, nol-pay-android, ipay88-my-android) are now released at the SDK version. The bundled third-party SDKs are unchanged.The SDK and each wrapper now depend on the BOM (io.primer:bom), so Gradle keeps them on one version. You can leave wrapper versions out, and an older wrapper version you pinned is upgraded to 2.54.0. We recommend declaring the BOM so the version is set in one place:
Primer SDK now depends on io.primer:3ds-android:1.9.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:
General maintenance, code quality improvements, and internal optimizations.
Known issue: 3DS fails in optimized release builds on some Android Gradle Plugin (AGP) versions
An R8 bug bundled with AGP 9.1.x, 9.2.x, 9.3.0–9.3.2, and 9.4.0 breaks io.primer:3ds-android:1.9.0 in release builds with R8 optimization enabled. The 3DS SDK fails to initialize with a java.lang.VerifyError in com.netcetera.threeds.sdk.infrastructure.sf, and the payment continues without 3DS authentication. Debug builds, AGP 8.x, and AGP 9.0.x aren’t affected.To fix it, update to AGP 9.3.3, AGP 9.4.1, or later. If you can’t update AGP, add a fixed R8 version to the buildscript block of your root build.gradle.kts:
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.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Primer","description":"Learn how to connect, build, and scale with Primer. Our docs offer clear guides and technical references to help you get more from our unified payments infrastructure.","colors":{"primary":"#FF7C4F","light":"#FF7C4F","dark":"#1b1a1a"},"logo":{"light":"https://mintcdn.com/primer-cc826789/fMxS38v0lFyMKyzD/logo/primer_logo.svg?fit=max\u0026auto=format\u0026n=fMxS38v0lFyMKyzD\u0026q=85\u0026s=0010b4ac2a8a90e656efd18fb57c9366","dark":"https://mintcdn.com/primer-cc826789/fMxS38v0lFyMKyzD/logo/primer_logo.svg?fit=max\u0026auto=format\u0026n=fMxS38v0lFyMKyzD\u0026q=85\u0026s=0010b4ac2a8a90e656efd18fb57c9366","href":"https://primer.io/docs"},"favicon":"https://mintcdn.com/primer-cc826789/fMxS38v0lFyMKyzD/logo/primer_logo.svg?fit=max\u0026auto=format\u0026n=fMxS38v0lFyMKyzD\u0026q=85\u0026s=0010b4ac2a8a90e656efd18fb57c9366","appearance":{"default":"light"},"background":{"decoration":"grid","color":{"light":"#ffffff"}},"navbar":{"links":[{"href":"https://primer.io/contact-us","label":"Contact Sales"}],"primary":{"type":"button","label":"Contact support","href":"https://portal.support.primer.io/servicedesk/customer/portal/11"}},"footer":{"socials":{"youtube":"https://www.youtube.com/channel/UCblj8Ya4PGjRbKVXmVwKyeQ","linkedin":"https://www.linkedin.com/company/primerapi","website":"https://primer.io/"}},"styling":{"eyebrows":"breadcrumbs","codeblocks":"dark","latex":false},"integrations":{"gtm":{"tagId":"GTM-NW2HXNZC"},"cookies":{"key":"ANALYTICS_CONSENT","value":"yes"}},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"primer-cc826789","hasAudioNarration":false,"actualSubdomain":"primer-cc826789","customDomains":["primer.io"],"gitSource":{"type":"gitlab","owner":"primer-io/general","repo":"public-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"projectId":69511232,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aec97f0574963a2d11dbfed","collectionId":"d4772cf4-44a3-491c-bdf4-fcea1b1b0406","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec97f0574963a2d11dbfed"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"DISABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aedeceee38f903348a1bd08","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"SDK Reference","count":256},{"language":"default","tag":"Payment methods","count":242},{"language":"default","tag":"Documentation","count":171},{"language":"default","tag":"API reference","count":164},{"language":"default","tag":"API Reference","count":158},{"language":"default","tag":"Legacy SDKs","count":139},{"language":"default","tag":"Connections","count":129},{"language":"default","tag":"Checkout","count":118},{"language":"default","tag":"PrimerHeadlessUniversalCheckout","count":77},{"language":"default","tag":"iOS","count":58}]},"assistantConfig":{"enableAskAiButton":true,"enableAskAiSearchBar":false},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"css/colorCard.css","content":".color_card{display:block;max-width:268px;border-radius:16px;text-decoration:none;color:#1c1c1c;margin:1rem 0;background-color:#fffbeb;border:none!important;transition:transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out}.color_card:hover{transform:translateY(-5px);box-shadow:0 10px 20px rgba(0, 0, 0, 0.1);border:none!important}.color_card-visual{display:flex;justify-content:center;align-items:center}.color_card-image{max-width:100%;height:auto;border-radius:16px 16px 0 0;margin:0}.color_card-text-content{text-align:start;padding:1.5rem}.color_card-title{font-size:1rem;font-weight:600;margin:0 0 0.5rem 0}.color_card-description{font-size:1rem;line-height:1.6;margin:0;color:#796262!important;font-weight:400!important}.dark .color_card-description{color:#9B7A7A!important}.color_card-description p{margin:0}.dark .horizontal_color_card h2{color:#FFFFFF}.color_card.yellow,.horizontal_card.yellow,.icon-container.yellow{background-color:#FFEDE6}.dark .color_card.yellow,.dark .horizontal_card.yellow,.dark .icon-container.yellow{background-color:#381000}.color_card.purple,.horizontal_card.purple,.icon-container.purple{background-color:#FFEDE6}.dark .color_card.purple,.dark .horizontal_card.purple,.dark .icon-container.purple{background-color:#381000}.color_card.red,.horizontal_card.red,.icon-container.red{background-color:#FFEDE6}.dark .color_card.red,.dark .horizontal_card.red,.dark .icon-container.red{background-color:#381000}.color_card.lilac,.horizontal_card.lilac,.icon-container.lilac{background-color:#FFEDE6}.dark .color_card.lilac,.dark .horizontal_card.lilac,.dark .icon-container.lilac{background-color:#381000}.color_card.pink,.horizontal_card.pink,.icon-container.pink{background-color:#FFEDE6}.dark .color_card.pink,.dark .horizontal_card.pink,.dark .icon-container.pink{background-color:#381000}.color_card.green,.horizontal_card.green,.icon-container.green{background-color:#FFEDE6}.dark .color_card.green,.dark .horizontal_card.green,.dark .icon-container.green{background-color:#381000}.color_card.blue,.horizontal_card.blue,.icon-container.blue{background-color:#FFEDE6}.dark .color_card.blue,.dark .horizontal_card.blue,.dark .icon-container.blue{background-color:#381000}"},{"filePath":"css/home.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\nbody{font-family:-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;min-height:100vh;transition:all 0.3s ease}body{background:white}body.dark{background:#000000}.hero-section{text-align:center;position:relative;padding:6.5rem 20px 160px 20px;min-height:400px;display:flex;align-items:center;justify-content:center;background:#f8fafc}@media (max-width: 768px){.hero-section{padding:60px 16px 160px 16px;min-height:300px}}.dark .hero-section{background:#111827}.hero-banner{width:100%;height:100%;object-fit:cover;position:absolute;top:0;left:0;z-index:1}.hero-content{position:relative;z-index:2;padding:0 20px;max-width:1200px;margin:0 auto}.hero-content h1{font-family:\"Inter Display\", \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;font-size:4rem;max-width:1000px;font-weight:600;margin-bottom:2.5rem;letter-spacing:-1px;line-height:4.5rem;color:#212121}@media (max-width: 768px){.hero-content h1{font-size:2.5rem;margin-bottom:1rem;letter-spacing:-.075rem;line-height:2.8rem}}.dark .hero-content h1{color:#ffffff}.hero-content p{font-size:1rem;line-height:1.4375rem;font-weight:400;color:black;max-width:620px;margin:0 auto;padding:0 16px}@media (max-width: 768px){.hero-content p{font-size:0.9rem;line-height:1.5}}.dark .hero-content p{color:#d1d5db}.features-section{position:relative;margin-top:-100px;padding:0 20px 80px 20px;z-index:10}.features-grid{display:grid;grid-template-columns:repeat(3, 1fr);gap:24px;max-width:860px;margin:0 auto}.features-grid .card h2{font-weight:600!important}.features-grid .card{background:white;border-radius:16px;overflow:hidden;border:1px solid #e5e7eb;box-shadow:0 4px 20px rgba(0, 0, 0, 0.08);transition:all 0.3s ease;margin:0}.dark .features-grid .card{background-color:rgb(28 28 28);border-color:#424242;box-shadow:0 4px 20px rgba(0, 0, 0, 0.3)}.features-grid .card:hover{transform:translateY(-4px);box-shadow:0 8px 30px rgba(0, 0, 0, 0.12)}.dark .features-grid .card:hover{box-shadow:0 8px 30px rgba(0, 0, 0, 0.4)}.feature-image{width:100%;height:200px;object-fit:cover}.feature-content{padding:24px;height:140px;display:flex;flex-direction:column;justify-content:flex-start}.feature-card h3{font-size:1.25rem;font-weight:600;color:#1a1a1a;margin-bottom:8px;transition:color 0.3s ease}.dark .feature-card h3{color:white}.feature-card p{font-size:0.95rem;color:#6b7280;line-height:1.5;transition:color 0.3s ease}.dark .feature-card p{color:#9ca3af}@media (max-width: 768px){.features-grid{grid-template-columns:1fr;gap:20px}.hero{padding:60px 16px 150px 16px}.features-section{margin-top:-80px;padding:0 16px 60px 16px}.theme-toggle{top:20px;right:20px;padding:10px 16px;font-size:14px}}@media (max-width: 1024px) and (min-width: 769px){.features-grid{grid-template-columns:repeat(2, 1fr)}}.build-with-ai-cta{display:inline-flex;align-items:center;gap:0.5rem;margin-top:2rem;padding:15px 20px;border:1px solid #FF7C4F!important;border-radius:9999px;background:#FF7C4F;color:#230800!important;font-size:1rem;font-weight:600;line-height:1;text-decoration:none!important;transition:color 0.3s, background 0.3s, border 0.3s}.build-with-ai-cta:hover{border-color:#230800!important;background:#230800;color:#F9F3EE!important}.build-with-ai-cta__icon{position:relative;display:inline-flex;overflow:hidden}.build-with-ai-cta__arrow{display:flex;transform:translateX(0%);transition:transform 0.5s cubic-bezier(0.6, 0.6, 0, 1) 0.1s}.build-with-ai-cta__arrow--in{position:absolute;inset:0;transform:translateX(-100%);transition:transform 0.5s cubic-bezier(0.6, 0.6, 0, 1)}.build-with-ai-cta:hover .build-with-ai-cta__arrow{transform:translateX(100%);transition:transform 0.5s cubic-bezier(0.6, 0.6, 0, 1)}.build-with-ai-cta:hover .build-with-ai-cta__arrow--in{transform:translateX(0%);transition:transform 0.5s cubic-bezier(0.6, 0.6, 0, 1) 0.1s}"},{"filePath":"css/horizontalCard.css","content":".horizontal_card{display:flex;border-radius:2px;overflow:hidden;margin:1rem 0;border:1px solid #110f0e1a;margin-top:20px;border-radius:8px;transition:border-color 0.2s ease}a.horizontal_card:hover,.dark a.horizontal_card:hover{border-color:#FF7C4F}.dark .horizontal_card{border-color:#ffffff1a}.horizontal_card .card-image-container{flex:1;min-width:45%}.horizontal_card .card-image-container img{width:100%;height:100%;border-radius:0;object-fit:cover;margin:0!important}.horizontal_card .card-content-container{flex:2;padding:40px 24px;display:flex;flex-direction:column}.horizontal_card .card-title{margin:0 0 0.75rem 0;font-size:1rem;font-weight:500;letter-spacing:0.01rem}.horizontal_card .card-description{font-size:1rem;line-height:1.5;flex-grow:1;font-weight:350}.horizontal_card .card-description p{margin:0;font-weight:350}.horizontal_card .card-link{margin-top:1rem;text-decoration:none;transition:color 0.2s ease-in-out;border:none;max-width:fit-content;font-weight:500}.horizontal_card .card-link:hover{text-decoration:underline}@media (max-width: 768px){.horizontal_card{flex-direction:column}.horizontal_card .card-image-container{min-width:100%}.horizontal_card .card-content-container{padding:20px 16px}}"},{"filePath":"css/horizontalColorCard.css","content":""},{"filePath":"css/iconCard.css","content":".icon-title-card{display:inline-flex;flex-direction:column;align-items:center;text-decoration:none;margin:0 auto}.icon-container svg{width:32px;height:32px;color:#5b21b6}.item-title{font-weight:500;text-align:center;margin:0;font-size:0.9rem}.icon-container{width:50px;height:50px;border-radius:50%;background-color:#ede9fe;margin-bottom:1rem;display:flex;justify-content:center;align-items:center}.dark .icon-container{background-color:#4c1d95}.icon-container svg{width:24px;height:24px;color:#000}.dark .icon-container svg{color:#fff}"},{"filePath":"css/logoCarousel.css","content":"@keyframes scroll{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}.logo-carousel-container{padding:2rem 0;border:1px solid #110f0e1a;border-radius:2px;margin-top:20px}.dark .logo-carousel-container{border-color:#333}.carousel-title{font-size:1.25rem;font-weight:500;margin-bottom:2rem;margin-top:1.5rem;padding:0 2rem}.logo-carousel-scroller{overflow:hidden;position:relative}.logo-track{display:flex;width:calc(200px * var(--logo-count));animation:scroll 12s linear infinite}.logo-track a{text-decoration:none;color:inherit;border:none}.logo-item{width:100px;height:80px;display:flex;justify-content:center;align-items:center;flex-shrink:0;transition:transform 0.2s ease}.logo-item:hover{transform:scale(1.1)}.logo-item svg{max-width:100%;max-height:56px;opacity:0.95;transition:opacity 0.2s ease;border-radius:8px}.logo-item:hover svg{opacity:1}.explore-link{display:block;width:fit-content;margin-left:2rem;margin-top:1.5rem;margin-bottom:0;font-size:1rem;font-weight:500;color:#333;text-decoration:underline;transition:color 0.2s ease;border-bottom:none!important}.dark .explore-link{color:#eee}.explore-link:hover{color:#e88178}"},{"filePath":"css/style.css","content":"@import url(\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700\u0026family=Inter+Display:wght@400;500;600;700\u0026display=swap\");@import url(\"./filterableTable.css\");div.card .prose a.link{color:#007bff;text-decoration:underline;font-weight:500}div.card .prose a.link:visited{color:#551a8b}div.card .prose a.link:hover{color:#0056b3;text-decoration:underline}.prose :where(code):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)){color:red;font-family:\"Roboto Mono\", monospace;font-size:13px;font-weight:300;line-height:inherit!important}.overview_cards_container .card{max-width:269px!important}.card-group{justify-items:baseline}.dark .group img{background-color:transparent!important}.param-head{div[data-component-part=\"field-name\"] {\n color: #000 !important;\n }}.dark .param-head{div[data-component-part=\"field-name\"] {\n color: #fff !important;\n }}h1,h2,h3,h4,h5,h6{font-weight:600!important;font-family:\"Inter Display\", \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif}.block.absolute.inset-0.overflow-hidden{background:none!important}.banner_img_cover{border-radius:8px}table th{text-align:left!important}.color-value{display:flex;align-items:center;justify-content:space-between;gap:6px}.color-swatch{width:14px;height:14px;border-radius:3px;flex-shrink:0}.color-swatch--bordered{border:1px solid #E0E0E0}.tokens-grid table{width:100%}.tokens-grid td:first-child{width:120px}.tokens-grid td:last-child code{font-size:12px;white-space:nowrap}.token-swatch{display:inline-block;width:48px;height:48px;border-radius:6px;vertical-align:middle}.token-radius{display:inline-block;width:48px;height:48px;background-color:#E0E0E0;vertical-align:middle;margin-right:8px}.token-space{display:inline-block;height:24px;background-color:#2f98ff;border-radius:2px;vertical-align:middle;margin-right:8px;min-width:2px}.token-size{display:inline-block;background-color:#2f98ff;border-radius:4px;vertical-align:middle;margin-right:8px}.token-width{display:inline-block;width:48px;height:32px;background-color:#ffffff;border:solid #212121;border-radius:4px;vertical-align:middle;margin-right:8px}.token-typography-preview{padding:16px;background-color:#f5f5f5;border-radius:8px;margin:12px 0 24px 0;font-family:-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif}.dark .token-typography-preview{background-color:#2a2a2a}.token-animation-preview{padding:24px;background-color:#f5f5f5;border-radius:8px;display:flex;align-items:center;gap:16px}.dark .token-animation-preview{background-color:#2a2a2a}.animation-demo{width:48px;height:48px;background-color:#2f98ff;border-radius:8px;transition:transform 200ms cubic-bezier(0.44, 0, 0.4, 1)}.animation-demo:hover{transform:scale(1.2)}.phase-timeline-circle{background-color:#fff}.dark .phase-timeline-circle{background-color:#0e0b0c}"},{"filePath":"css/filterableTable.css","content":".filterable-table-container{width:100%;max-width:100%;margin:0 0 1.5rem 0!important}div:has(>.filterable-table-container){margin-top:0!important}.filterable-table-container *,.filterable-table-container *::before,.filterable-table-container *::after{box-sizing:border-box}.filterable-table-controls{display:flex;flex-direction:column;gap:1rem;margin-bottom:1rem}@media (min-width: 768px){.filterable-table-controls{flex-direction:row;align-items:center;justify-content:space-between}}.filterable-table-search{flex:1;max-width:400px}.filterable-table-search-input{width:100%;padding:0.625rem 1rem;border:1px solid #e5e7eb;border-radius:8px;font-size:0.875rem;background-color:#fff;color:#1f2937;transition:border-color 0.2s ease, box-shadow 0.2s ease}.filterable-table-search-input:focus{outline:none;border-color:#FF7C4F;box-shadow:0 0 0 3px rgba(255, 124, 79, 0.1)}.filterable-table-search-input::placeholder{color:#9ca3af}.dark .filterable-table-search-input{background-color:#1f2937;border-color:#374151;color:#f9fafb}.dark .filterable-table-search-input:focus{border-color:#FF7C4F;box-shadow:0 0 0 3px rgba(255, 124, 79, 0.2)}.dark .filterable-table-search-input::placeholder{color:#6b7280}.filterable-table-filters{display:flex;flex-wrap:wrap;gap:0.75rem;align-items:center}.filterable-table-select{padding:0.625rem 2rem 0.625rem 1rem;border:1px solid #e5e7eb;border-radius:8px;font-size:0.875rem;background-color:#fff;color:#1f2937;cursor:pointer;appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 0.75rem center;transition:border-color 0.2s ease}.filterable-table-select:focus{outline:none;border-color:#FF7C4F}.dark .filterable-table-select{background-color:#1f2937;border-color:#374151;color:#f9fafb;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\")}.dark .filterable-table-select:focus{border-color:#FF7C4F}.filterable-table-clear-btn{padding:0.625rem 1rem;border:none;border-radius:8px;font-size:0.875rem;background-color:#fee2e2;color:#b91c1c;cursor:pointer;transition:background-color 0.2s ease}.filterable-table-clear-btn:hover{background-color:#fecaca}.dark .filterable-table-clear-btn{background-color:#450a0a;color:#fca5a5}.dark .filterable-table-clear-btn:hover{background-color:#7f1d1d}.filterable-table-results-count{font-size:0.875rem;color:#6b7280;margin-bottom:0.75rem}.dark .filterable-table-results-count{color:#9ca3af}.filterable-table-wrapper{overflow:hidden;border-radius:8px;border:1px solid #e5e7eb}.dark .filterable-table-wrapper{border-color:#374151}table.filterable-table{width:100%;border-collapse:collapse;border-spacing:0;font-size:0.875rem;table-layout:auto;margin:0;padding:0;border:none}table.filterable-table thead{background-color:#f9fafb}.dark table.filterable-table thead{background-color:#1f2937}table.filterable-table th{padding:0.75rem 1rem;text-align:left;font-weight:600;color:#374151;border:none;border-bottom:1px solid #e5e7eb;white-space:nowrap;background-color:#f9fafb}.dark table.filterable-table th{color:#e5e7eb;border-bottom-color:#374151;background-color:#1f2937}table.filterable-table td{padding:0.75rem 1rem;color:#4b5563;border:none;border-bottom:1px solid #e5e7eb;vertical-align:top;background-color:#fff}.dark table.filterable-table td{background-color:#111827;color:#d1d5db;border-bottom-color:#374151}table.filterable-table tbody tr:hover td{background-color:#f3f4f6}.dark table.filterable-table tbody tr:hover td{background-color:#1f2937}table.filterable-table tbody tr:last-child td{border-bottom:none}table.filterable-table th:first-child,table.filterable-table td:first-child{padding-left:1.25rem}table.filterable-table th:last-child,table.filterable-table td:last-child{padding-right:1.25rem}table.filterable-table code{font-size:0.8125rem;padding:0.125rem 0.375rem;border-radius:4px;background-color:#f3f4f6;color:#1f2937;font-family:ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace}.dark table.filterable-table code{background-color:#374151;color:#e5e7eb}.filterable-table-compatibility{font-size:0.8125rem;line-height:1.75}.filterable-table-no-results{text-align:center;padding:2rem 1rem;color:#6b7280}.dark .filterable-table-no-results{color:#9ca3af}"},{"filePath":"css/componentTree.css","content":".component-tree-container{border-radius:8px;padding:20px;border:1px solid #e5e7eb}.component-tree-connector{color:#9ca3af;user-select:none}.component-tree-name{font-weight:500;color:#111827}.component-tree-goes-into{margin-left:10px;padding:2px 8px;border-radius:4px;background-color:#f3f4f6;color:#6b7280;font-size:11px;font-weight:400}.component-tree-slot{margin-left:8px;padding:2px 8px;border-radius:4px;background-color:#dbeafe;color:#1d4ed8;font-size:11px;font-weight:500}.component-tree-note{margin-left:10px;color:#6b7280;font-size:12px;font-style:italic}.component-tree-legend{display:flex;align-items:center;gap:20px;padding-top:16px;margin-top:16px;border-top:1px solid #e5e7eb;font-size:12px;color:#6b7280}.dark .component-tree-container{border-color:#374151}.dark .component-tree-connector{color:#6b7280}.dark .component-tree-name{color:#f9fafb}.dark .component-tree-goes-into{background-color:#374151;color:#d1d5db}.dark .component-tree-slot{background-color:#1e3a8a;color:#93c5fd}.dark .component-tree-note{color:#9ca3af}.dark .component-tree-legend{border-top-color:#374151;color:#9ca3af}"},{"filePath":"css/designSystem.css","content":":root{--ds-color-brand: #2f98ff;--ds-color-brand-light: #e8f2ff;--ds-color-brand-muted: rgba(47, 152, 255, 0.12);--ds-color-success: #1a8a5c;--ds-color-success-light: #edf8f2;--ds-color-success-muted: rgba(26, 138, 92, 0.12);--ds-color-warning: #c47a20;--ds-color-warning-light: #fef6eb;--ds-color-warning-muted: rgba(196, 122, 32, 0.12);--ds-color-error: #c44040;--ds-color-error-light: #fef0f0;--ds-color-text: #1c1b18;--ds-color-text-secondary: #5c5953;--ds-color-text-muted: #9d9a92;--ds-color-border: #e4e2dd;--ds-color-border-hover: #d0cec8;--ds-color-bg-page: #f5f4f1;--ds-color-bg-surface: #ffffff;--ds-color-bg-subtle: #fafaf8}.dark{--ds-color-brand: #60a5fa;--ds-color-brand-light: #1e3a8a;--ds-color-brand-muted: rgba(96, 165, 250, 0.15);--ds-color-success: #34d399;--ds-color-success-light: #064e3b;--ds-color-success-muted: rgba(52, 211, 153, 0.15);--ds-color-warning: #fbbf24;--ds-color-warning-light: #78350f;--ds-color-warning-muted: rgba(251, 191, 36, 0.15);--ds-color-error: #f87171;--ds-color-error-light: #7f1d1d;--ds-color-text: #f3f4f6;--ds-color-text-secondary: #d1d5db;--ds-color-text-muted: #9ca3af;--ds-color-border: #374151;--ds-color-border-hover: #4b5563;--ds-color-bg-page: #0a0a0a;--ds-color-bg-surface: #111827;--ds-color-bg-subtle: #1f2937}.ds-token-row-btn{display:block;width:100%;padding:12px;border:none;border-bottom:1px solid var(--ds-color-bg-subtle);background:var(--ds-color-bg-surface);cursor:pointer;text-align:left;transition:background 120ms ease}.ds-token-row-btn:last-child{border-bottom:none}.ds-token-row-btn:hover{background:var(--ds-color-bg-subtle)}.ds-token-row-btn.selected{background:var(--ds-color-brand-light)}.ds-token-row-name{font-family:ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:11px;color:var(--ds-color-text);font-weight:500}.ds-token-row-value{font-size:11px;color:var(--ds-color-text-muted);margin-top:2px;display:flex;justify-content:space-between;align-items:center}.ds-token-color-swatch{display:inline-flex;align-items:center;gap:4px}.ds-token-color-box{width:12px;height:12px;border-radius:2px;border:1px solid var(--ds-color-border)}.ds-mode-toggle-group{display:inline-flex;background:var(--ds-color-bg-subtle);border-radius:8px;padding:3px;border:1px solid var(--ds-color-border)}.ds-mode-toggle-btn{padding:8px 14px;border:none;border-radius:6px;background:transparent;color:var(--ds-color-text-muted);font-weight:500;font-size:12px;cursor:pointer;transition:all 120ms ease}.ds-mode-toggle-btn.active{background:var(--ds-color-bg-surface);color:var(--ds-color-text);box-shadow:0 1px 3px rgba(0, 0, 0, 0.08)}.ds-category-pills{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:12px}.ds-category-pill{padding:5px 10px;border:none;border-radius:6px;background:var(--ds-color-bg-subtle);color:var(--ds-color-text-secondary);font-size:11px;font-weight:500;cursor:pointer;text-transform:capitalize;transition:all 120ms ease}.ds-category-pill.active{background:var(--ds-color-brand);color:#fff}.ds-tree-item{border-radius:8px;padding:10px 12px;margin:4px 0;cursor:pointer;transition:all 120ms ease;background:var(--ds-color-bg-subtle);border:2px solid var(--ds-color-border)}.ds-tree-item.depth-2{padding:6px 8px}.ds-tree-item.selected{background:var(--ds-color-warning-light);border-color:var(--ds-color-warning);box-shadow:0 0 0 3px rgba(196, 122, 32, 0.1)}.ds-tree-item.highlighted{background:var(--ds-color-success-light);border-color:var(--ds-color-success);box-shadow:0 0 0 3px rgba(26, 138, 92, 0.1)}.ds-tree-item.default{cursor:default}.ds-tree-item-label{font-family:ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-weight:600;font-size:12px;color:var(--ds-color-text-secondary);display:flex;align-items:center;gap:8px}.ds-tree-item.depth-2 .ds-tree-item-label{font-size:11px}.ds-tree-item.selected .ds-tree-item-label{color:var(--ds-color-warning)}.ds-tree-item.highlighted .ds-tree-item-label{color:var(--ds-color-success)}.ds-tree-item-children{margin-top:8px}.ds-highlight-wrapper{position:relative;border-radius:inherit}.ds-highlight-overlay{position:absolute;inset:-2px;border:2px solid var(--ds-color-success);border-radius:inherit;background:var(--ds-color-success-muted);pointer-events:none;transition:all 200ms ease}.ds-control-panel{display:flex;gap:8px;align-items:center;margin-bottom:16px;flex-wrap:wrap}.ds-reset-btn{padding:8px 12px;border:1px solid rgba(196, 64, 64, 0.4);border-radius:4px;background:var(--ds-color-bg-surface);color:var(--ds-color-error);font-size:12px;cursor:pointer}.ds-token-editor{margin-top:16px;padding:12px;background:var(--ds-color-bg-subtle);border-radius:8px;border:1px solid var(--ds-color-border)}.ds-token-editor-label{font-size:10px;font-weight:700;color:var(--ds-color-text-muted);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:10px}.ds-token-editor-affects{margin-top:10px;font-size:10px;color:var(--ds-color-text-muted)}.ds-token-editor-affects-item{font-family:ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;color:var(--ds-color-success)}.ds-component-selector{padding:12px}.ds-component-selector-empty{color:var(--ds-color-text-muted);font-size:12px;font-style:italic}.ds-component-selector-title{font-family:ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:14px;font-weight:600;margin-bottom:12px}.ds-component-token-item{padding:10px;background:var(--ds-color-bg-subtle);border-radius:4px;margin-bottom:8px}.ds-component-token-name{font-family:ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:11px;font-weight:500;margin-bottom:8px;color:var(--ds-color-text)}.ds-main-grid{display:grid;grid-template-columns:260px 1fr;gap:20px}.ds-preview-section{display:flex;flex-direction:column;gap:16px}.ds-preview-card{padding:20px;background:var(--ds-color-bg-page);border-radius:0 0 12px 12px}.ds-legend{display:flex;gap:16px;font-size:11px;color:var(--ds-color-text-muted)}.ds-legend-item{display:flex;align-items:center;gap:8px}.ds-legend-box{width:14px;height:14px;border-radius:4px}.ds-legend-box.affected{background:var(--ds-color-success-light);border:2px solid var(--ds-color-success)}.ds-legend-box.selected{background:var(--ds-color-warning-light);border:2px solid var(--ds-color-warning)}.ds-preview-label{display:block;font-weight:500}.ds-preview-input{background:var(--ds-color-bg-surface)}"},{"filePath":"css/stylingVariables.css","content":".token-swatch{display:inline-block;width:24px;height:24px;border-radius:4px;border:1px solid #e0e0e0;vertical-align:middle}.dark .token-swatch{border-color:#4b5563}.token-radius{display:inline-block;width:32px;height:32px;background:#2f98ff;vertical-align:middle}.dark .token-radius{background:#60a5fa}.token-space{display:inline-block;height:24px;background:#2f98ff;vertical-align:middle}.dark .token-space{background:#60a5fa}.tokens-grid{margin:1rem 0}.tokens-grid table{width:100%}.tokens-grid td:first-child{width:100px}"},{"filePath":"css/themeBuilder.css","content":".theme-builder-container{border:1px solid #e5e7eb;border-radius:12px;overflow:hidden;background:#fafafa}.theme-builder-header{background:white;padding:16px 20px;border-bottom:1px solid #e5e7eb}.theme-builder-title{margin:0 0 12px 0;font-size:16px;font-weight:600;color:#1a1a1a}.theme-builder-presets{display:flex;flex-wrap:wrap;gap:8px}.theme-builder-preset-btn{padding:6px 12px;border:1px solid #e5e7eb;border-radius:6px;background:white;color:#1a1a1a;cursor:pointer;font-size:13px;font-weight:500}.theme-builder-preset-btn.active{border:2px solid #2f98ff;background:#eff6ff;color:#2f98ff}.theme-builder-grid{display:grid;grid-template-columns:1fr 1fr;min-height:500px}.theme-builder-tokens{border-right:1px solid #e5e7eb;background:white;overflow:auto;max-height:600px}.theme-builder-group{border-bottom:1px solid #e5e7eb}.theme-builder-group-header{width:100%;padding:12px 16px;background:none;border:none;display:flex;justify-content:space-between;align-items:center;cursor:pointer;font-size:14px;font-weight:600;color:#1a1a1a}.theme-builder-group-content{padding:0 16px 16px}.theme-builder-token-row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-top:1px solid #f3f4f6}.theme-builder-token-label{font-size:13px;color:#4b5563}.theme-builder-preview-panel{padding:20px;background:#f8f9fa;transition:background 200ms ease}.theme-builder-preview-panel.dark-bg{background:#0f0f0f}.theme-builder-preview-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.theme-builder-preview-label{font-size:14px;font-weight:600;color:#1a1a1a}.theme-builder-theme-toggle{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:1px solid #e5e7eb;border-radius:6px;background:white;color:#6b7280;cursor:pointer;font-size:11px;font-weight:500}.theme-builder-theme-toggle.dark{border-color:#374151;background:#1f2937;color:#e5e7eb}.code-preview-container{margin-top:16px;border-radius:8px;overflow:hidden;border:1px solid #e5e7eb}.code-preview-header{display:flex;align-items:center;justify-content:space-between;background:#f8f9fa;border-bottom:1px solid #e5e7eb;padding:0 12px}.code-preview-tabs{display:flex;gap:0}.code-preview-tab{padding:10px 16px;background:transparent;border:none;border-bottom:2px solid transparent;color:#6b7280;cursor:pointer;font-size:13px;font-weight:500;font-family:monospace}.code-preview-tab.active{border-bottom-color:#2f98ff;color:#2f98ff}.code-preview-copy-btn{display:flex;align-items:center;gap:6px;padding:6px 10px;background:transparent;border:1px solid #e5e7eb;border-radius:6px;color:#6b7280;cursor:pointer;font-size:12px;font-weight:500;transition:all 150ms ease}.code-preview-copy-btn.copied{background:#dcfce7;border-color:#86efac;color:#16a34a}.code-preview-code{background:#1a1a1a;color:#e5e7eb;padding:16px;margin:0;overflow:auto;font-size:12px;font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;max-height:280px;line-height:1.5}.theme-builder-input-text{padding:6px 8px;border:1px solid #e5e7eb;border-radius:4px;font-size:12px;background:white;color:#1a1a1a}.theme-builder-input-text.monospace{font-family:monospace}.dark .theme-builder-container{background:#1f2937;border-color:#374151}.dark .theme-builder-header{background:#111827;border-bottom-color:#374151}.dark .theme-builder-title{color:#f3f4f6}.dark .theme-builder-preset-btn{background:#1f2937;border-color:#4b5563;color:#e5e7eb}.dark .theme-builder-preset-btn.active{background:#1e3a8a;border-color:#3b82f6;color:#93c5fd}.dark .theme-builder-tokens{background:#111827;border-right-color:#374151}.dark .theme-builder-group{border-bottom-color:#374151}.dark .theme-builder-group-header{color:#f3f4f6}.dark .theme-builder-token-row{border-top-color:#374151}.dark .theme-builder-token-label{color:#9ca3af}.dark .theme-builder-preview-panel{background:#0a0a0a}.dark .theme-builder-preview-label{color:#f3f4f6}.dark .theme-builder-theme-toggle{background:#1f2937;border-color:#4b5563;color:#e5e7eb}.dark .code-preview-container{border-color:#374151}.dark .code-preview-header{background:#1f2937;border-bottom-color:#374151}.dark .code-preview-tab{color:#9ca3af}.dark .code-preview-tab.active{color:#60a5fa;border-bottom-color:#60a5fa}.dark .code-preview-copy-btn{background:#1f2937;border-color:#4b5563;color:#9ca3af}.dark .code-preview-copy-btn.copied{background:#064e3b;border-color:#059669;color:#6ee7b7}.dark .theme-builder-input-text{background:#1f2937;border-color:#4b5563;color:#e5e7eb}"}],"page":{"pagePath":"changelogs/android-sdk","slug":"/changelogs/android-sdk","pageMetadata":{"title":"Android SDK","sidebarTitle":"Android SDK","icon":"android","rss":true,"description":null,"href":"/changelogs/android-sdk"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,img:`img`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,CodeBlock,CodeGroup,Frame,Heading,Info,Note,OptimizedImage,Tip,Update,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Update)_missingMdxReference(`Update`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(Update,{label:`v2.54.0`,description:`2026-10-30`,id:`v2-54-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Primer SDK now depends on `,_jsx(_components.code,{children:`io.primer:3ds-android:2.54.0`})]}),_jsx(`br`,{}),`\nThe wrapper libraries (`,_jsx(_components.code,{children:`3ds-android`}),`, `,_jsx(_components.code,{children:`klarna-android`}),`, `,_jsx(_components.code,{children:`stripe-android`}),`, `,_jsx(_components.code,{children:`nol-pay-android`}),`, `,_jsx(_components.code,{children:`ipay88-my-android`}),`) are now released at the SDK version. The bundled third-party SDKs are unchanged.`]}),_jsxs(_components.p,{children:[`The SDK and each wrapper now depend on the BOM (`,_jsx(_components.code,{children:`io.primer:bom`}),`), so Gradle keeps them on one version. You can leave wrapper versions out, and an older wrapper version you pinned is upgraded to `,_jsx(_components.code,{children:`2.54.0`}),`. We recommend declaring the BOM so the version is set in one place:`]}),_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Kotlin`,numberOfLines:`5`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`dependencies`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` implementation`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`platform`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"io.primer:bom:2.54.0\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` implementation`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"io.primer:android\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` implementation`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"io.primer:3ds-android\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Groovy`,numberOfLines:`5`,language:`groovy`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`groovy`,children:_jsxs(_components.code,{language:`groovy`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`dependencies {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` implementation platform(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'io.primer:bom:2.54.0'`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` implementation `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'io.primer:android'`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` implementation `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`'io.primer:3ds-android'`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/installation#version-alignment`,children:`Version alignment`}),`.`]})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Drop-in`}),`: saved cards ending in a leading zero, such as `,_jsx(_components.code,{children:`0005`}),`, now show all four digits`]}),`\n`,_jsxs(_components.li,{children:[`SDK activities no longer read `,_jsx(_components.code,{children:`Serializable`}),` extras from incoming intents`]}),`\n`,_jsx(_components.li,{children:`Stability improvements`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.53.1`,description:`2026-09-28`,id:`v2-53-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Primer SDK now depends on `,_jsx(_components.code,{children:`io.primer:3ds-android:1.9.0`})]}),_jsx(`br`,{}),`\nIf 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.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Changelog`}),`:`,_jsx(`br`,{})]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`General maintenance, code quality improvements, and internal optimizations.`}),`\n`]})]}),_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Known issue: 3DS fails in optimized release builds on some Android Gradle Plugin (AGP) versions`}),_jsx(`br`,{}),`\nAn `,_jsx(_components.a,{href:`https://issuetracker.google.com/issues/551348855`,children:`R8 bug`}),` bundled with AGP 9.1.x, 9.2.x, 9.3.0–9.3.2, and 9.4.0 breaks `,_jsx(_components.code,{children:`io.primer:3ds-android:1.9.0`}),` in release builds with R8 optimization enabled. The 3DS SDK fails to initialize with a `,_jsx(_components.code,{children:`java.lang.VerifyError`}),` in `,_jsx(_components.code,{children:`com.netcetera.threeds.sdk.infrastructure.sf`}),`, and the payment continues without 3DS authentication. Debug builds, AGP 8.x, and AGP 9.0.x aren’t affected.`]}),_jsxs(_components.p,{children:[`To fix it, update to AGP 9.3.3, AGP 9.4.1, or later. If you can’t update AGP, add a fixed R8 version to the `,_jsx(_components.code,{children:`buildscript`}),` block of your root `,_jsx(_components.code,{children:`build.gradle.kts`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`buildscript`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` repositories`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`google`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`() }`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` dependencies`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`classpath`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"com.android.tools:r8:9.3.28\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Stability improvements.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.53.0`,description:`2026-08-25`,id:`v2-53-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improvements to cancellation handling and web redirect based payment methods`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.52.0`,description:`2026-06-25`,id:`v2-52-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 New feature`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Google Pay`}),`: added `,_jsx(_components.code,{children:`allowCreditCards`}),` and `,_jsx(_components.code,{children:`allowPrepaidCards`}),` options to `,_jsx(_components.code,{children:`PrimerGooglePayOptions`}),`, letting you restrict the card types offered through Google Pay. Both default to `,_jsx(_components.code,{children:`true`}),`, so existing integrations are unaffected.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Removed a redundant title from the web view`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.51.0`,description:`2026-06-03`,id:`v2-51-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`General fixes and improvements`}),`\n`]}),_jsxs(Info,{children:[_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Primer SDK now depends on `,_jsx(_components.code,{children:`io.primer:klarna-android:1.3.0`})]}),_jsx(`br`,{}),`\nIf you are using the Klarna dependency in your code, you are encouraged to update it and align with the supported version.`]}),_jsxs(_components.p,{children:[`Klarna SDK was updated from v2.7.1 to v2.11.3. Please refer to the official Klarna `,_jsx(_components.a,{href:`https://github.com/klarna/klarna-mobile-sdk-android/blob/master/CHANGELOG.md`,children:`CHANGELOG`}),`\nfor more information.`]})]})]}),`\n`,_jsxs(Update,{label:`v2.50.2`,description:`2026-06-01`,id:`v2-50-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`General fixes and improvements`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Aligned the card surface color with the iOS SDK in dark mode`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.50.1`,description:`2026-05-20`,id:`v2-50-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`General fixes and improvements`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.50.0`,description:`2026-05-18`,id:`v2-50-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improved payment method processing`}),`\n`,_jsx(_components.li,{children:`Improved error handling in some areas`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Fixes some issues with text color and dark mode theming`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.49.0`,description:`2026-04-27`,id:`v2-49-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 New feature`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improved payment method processing`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Add cvvLabel to CardNetwork Descriptor`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.48.0`,description:`2026-02-24`,id:`v2-48-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Exposing more information through `,_jsx(_components.code,{children:`onBinDataAvailable`})]}),`\n`,_jsxs(_components.li,{children:[`Added idempotency key as optional param to `,_jsx(_components.code,{children:`continuePaymentCreation`}),` in `,_jsx(_components.code,{children:`PrimerPaymentCreationDecisionHandler`})]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.47.1`,description:`2026-02-04`,id:`v2-47-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improved payment status polling stability through retry handling`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.47.0`,description:`2026-01-16`,id:`v2-47-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Primer SDK now depends on `,_jsx(_components.code,{children:`io.primer:3ds-android:1.8.0`})]}),_jsx(`br`,{}),`\nIf 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.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Changelog`}),`:`,_jsx(`br`,{})]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`New LOA Reference Number`}),`\n`,_jsx(_components.li,{children:`Updated Device Information Data Version to EMVCo 3DS SDK Device Information 1.7`}),`\n`,_jsx(_components.li,{children:`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.`}),`\n`]})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`improved 3DS locale normalization`}),`\n`,_jsx(_components.li,{children:`improved custom Locale handling in Drop-in`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.46.0`,description:`2025-12-03`,id:`v2-46-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`EFTPOS co-badged cards now leaves card selection up the vendor without user interaction`}),`\n`]}),_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Primer SDK now depends on `,_jsx(_components.code,{children:`io.primer:3ds-android:1.7.0`})]}),_jsx(`br`,{}),`\nIf 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.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Changelog`}),`:`,_jsx(`br`,{})]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The 3DS SDK now follows the EU Directive 2019/882.`}),`\n`]})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`fix a corner case when switching between different co-badged cards`}),`\n`,_jsx(_components.li,{children:`fix navigation bar blur when edge-to-edge enabled`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.45.1`,description:`2025-11-18`,id:`v2-45-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Fixed an issue where the payment redirect URL wasn’t loaded correctly when starting from\na custom URL scheme.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.45.0`,description:`2025-11-12`,id:`v2-45-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Raised the minimum supported SDK version to `,_jsx(_components.code,{children:`23`})]}),`\n`,_jsxs(_components.li,{children:[`Updated `,_jsx(_components.code,{children:`play-services-wallet`}),` dependency to `,_jsx(_components.code,{children:`19.5.0`})]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.44.1`,description:`2025-10-21`,id:`v2-44-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Fixed crash that occurred when user returned to 3DS screen using a deeplink.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Reduced redundant data fetching to speed up loading and improve overall performance.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.44.0`,description:`2025-10-15`,id:`v2-44-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 New feature`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Add EFTPOS network support`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.43.0`,description:`2025-09-23`,id:`v2-43-0`,children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Breaking Change`}),`: This version removes support for legacy API versions. The SDK now requires API version 2.4 or later.`]})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`⚠️ Legacy API Option Removed`})}),_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`PrimerApiVersion.V2_3`}),` option for `,_jsx(_components.code,{children:`settings.apiVersion`}),` has been removed. The SDK now exclusively uses API version 2.4.`]}),_jsx(_components.p,{children:_jsxs(_components.strong,{children:[`If you were using the `,_jsx(_components.code,{children:`PrimerApiVersion.V2_3`}),` setting:`]})}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Ensure your backend integration supports API version 2.4`}),`\n`,_jsxs(_components.li,{children:[`Review the `,_jsx(_components.a,{href:`/changelogs/migration-guides/API-2.3-to-2.4`,children:`Migration Guide`}),` for detailed upgrade instructions`]}),`\n`]}),_jsxs(_components.p,{children:[`For more information, see our `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/common-objects/PrimerSettings#param-api-version`,children:`SDK reference`}),` and `,_jsx(_components.a,{href:`/api-reference/get-started/overview`,children:`API Reference`}),`.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Enhanced internal storage of analytics events.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.42.2`,description:`2025-09-04`,id:`v2-42-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Fixed crash that occurred when switching payment methods after the `,_jsx(_components.code,{children:`PrimerSessionIntent`}),` parameter was changed`]}),`\n`,_jsxs(_components.li,{children:[`Fixed crash that could occur when calling `,_jsx(_components.code,{children:`cleanup()`}),` if the Drop-in dismissal event was not properly handled internally`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.42.1`,description:`2025-09-02`,id:`v2-42-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improved internal analytics event processing to consolidate redundant events and enhance payload data with richer contextual metadata.\nThis internal improvement reduces network overhead while providing better system insights.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.42.0`,description:`2025-08-29`,id:`v2-42-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improvements to Klarna theme selection.`}),`\n`]}),_jsxs(Info,{children:[_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Primer SDK now depends on `,_jsx(_components.code,{children:`io.primer:klarna-android:1.2.0`})]}),_jsx(`br`,{}),`\nIf you are using the Klarna dependency in your code, you are encouraged to update it and align with the supported version.`]}),_jsxs(_components.p,{children:[`Klarna SDK was updated from v2.6.27 to v2.7.1. Please refer to the official Klarna `,_jsx(_components.a,{href:`https://github.com/klarna/klarna-mobile-sdk-android/blob/master/CHANGELOG.md`,children:`CHANGELOG`}),`\nfor more information.`]})]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Continuing 3DS flow sometimes failed silently, resulting in `,_jsx(_components.code,{children:`failed-to-resume`}),` or `,_jsx(_components.code,{children:`payment-failed`}),` errors.\nWe have fixed that and improved our logging in this specific use case.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.41.0`,description:`2025-06-20`,id:`v2-41-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Primer SDK now depends on `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`Kotlin 2.0.21`})})]}),`\n`]}),_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Primer SDK now depends on `,_jsx(_components.code,{children:`io.primer:3ds-android:1.6.2`})]}),_jsx(`br`,{}),`\nIf 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.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Changelog`}),`:`,_jsx(`br`,{})]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Due to several security vulnerabilities, Bouncy Castle (artefact : org.bouncycastle:bcprov-jdk15to18) was updated to version 1.79`}),`\n`,_jsx(_components.li,{children:`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.`}),`\n`]})]})]}),`\n`,_jsxs(Update,{label:`v2.40.1`,description:`2025-06-11`,id:`v2-40-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Better edge-to-edge support in Drop-In integration.`}),`\n`,_jsx(_components.li,{children:`Improvements to DI resolutions.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.40.0`,description:`2025-06-04`,id:`v2-40-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`We have bumped `,_jsx(_components.code,{children:`compile`}),` and `,_jsx(_components.code,{children:`target`}),` versions to `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`35`})})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Analytics:`}),` We have reduced number of analytics events captured and sent to our server.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.39.0`,description:`2025-05-14`,id:`v2-39-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`We have added `,_jsx(_components.code,{children:`CardFormUIOptions.payButtonAddNewCard`}),` to support the “Add New Card” option in the card form flow. Please check `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/common-objects/PrimerSettings#properties.uiOptions-properties.cardFormUIOptions`,children:`our docs`}),` for more information`]}),`\n`,_jsxs(_components.li,{children:[`Introduced support for the ‘Continue payment flow’ workflow action to configure checkout outcome. See our `,_jsx(_components.a,{href:`/workflows/apps/native-apps/primer-payments-app/continue-payment-flow-action#control-the-checkout-result-with-checkout-outcome`,children:`documentation`}),` for more info.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Fixed a crash caused by misuse of CheckoutExitHandler.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.38.3`,description:`2025-04-29`,id:`v2-38-3`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`In certain scenarios, the SDK may crash if a deep link to a specific screen is triggered after a payment flow was already finalized.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.38.2`,description:`2025-04-17`,id:`v2-38-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`PayPal`}),`: Improved support for picture-in-picture mode. Fixed an issue where some successful authentication flows were incorrectly marked as errors by the SDK.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`3DS`}),`: Enhanced locale normalization. Resolved an issue where certain locales were being rejected by the 3DS SDK, causing the flow to fail.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Cleanup Enhancements`}),`: Added a new `,_jsx(_components.code,{children:`cleanClientSessionCache`}),` parameter to the `,_jsx(_components.code,{children:`cleanup`}),` function. You can now control whether to clear the Client Session cache in both Drop-In and Headless integrations.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.38.1`,description:`2025-04-14`,id:`v2-38-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Klarna`}),`: Updated Klarna SDK to `,_jsx(_components.code,{children:`1.1.0`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Klarna`}),`: Improved styling support for Klarna components`]}),`\n`]}),_jsxs(Warning,{children:[_jsxs(_components.p,{children:[`⚠️ `,_jsxs(_components.strong,{children:[`Primer SDK now supports BOM (Bill of Materials) via `,_jsx(_components.code,{children:`io.primer:bom`})]})]}),_jsxs(_components.p,{children:[`If you’re using Klarna in your own code, you can `,_jsx(_components.strong,{children:`switch to the BOM`}),` to automatically stay aligned with the supported version:`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`implementation(platform(\"io.primer:bom:\u003cversion>\")) implementation(\"io.primer:klarna-android\")`})})}),_jsx(_components.p,{children:`This removes the need to manage Klarna versions manually.`}),_jsxs(_components.p,{children:[`If you choose `,_jsx(_components.strong,{children:`not`}),` to use the BOM, make sure you manually update to `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`io.primer:klarna-android:1.1.0`})})]})]})]}),`\n`,_jsxs(Update,{label:`v2.38.0`,description:`2025-03-24`,id:`v2-38-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀\\xA0New feature`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The SDK will now default to using API version 2.4 when initialised. It is possible to use API version 2.3 via `,_jsx(_components.code,{children:`PrimerSettings.apiVersion`}),`. For more information see our `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/common-objects/PrimerSettings#properties.apiVersion`,children:`SDK reference`}),`, `,_jsx(_components.a,{href:`/api-reference/get-started/overview`,children:`Api Reference`}),` and `,_jsx(_components.a,{href:`/changelogs/migration-guides/API-2.3-to-2.4`,children:`Migration Guides`}),`.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.37.2`,description:`2025-03-21`,id:`v2-37-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`In certain scenarios, the SDK may crash if a deep link to a specific screen is triggered while the app has been forcefully killed by the user.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.37.1`,description:`2025-03-19`,id:`v2-37-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`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.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.37.0`,description:`2025-03-14`,id:`v2-37-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`3DS Locale Propagation:`}),` Resolved an issue where the 3DS SDK occasionally rejected propagated locale settings.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`iDEAL via Adyen:`}),` iDEAL is now fully supported as a redirect-based payment method.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`3DS Flow Stability:`}),` Fixed crashes that occurred when the 3DS flow failed while the app was running in the background.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.36.3`,description:`2025-02-11`,id:`v2-36-3`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We’ve increased the timeout for payment creation and handling for better stability.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.36.2`,description:`2025-02-10`,id:`v2-36-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`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.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.36.1`,description:`2025-02-05`,id:`v2-36-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Drop-in`}),`: fixed an issue causing crashes when calling `,_jsx(_components.code,{children:`Primer.dismiss()`}),` after the checkout sheet is already dismissed.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.36.0`,description:`2025-02-04`,id:`v2-36-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`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 `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/common-objects/PrimerSettings#properties.apiVersion`,children:`SDK reference`}),`, `,_jsx(_components.a,{href:`/api-reference/get-started/overview`,children:`Api Reference`}),` and `,_jsx(_components.a,{href:`/changelogs/migration-guides/API-2.3-to-2.4`,children:`Migration Guides`}),`. The SDK will continue to use API v2.3 by default.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Expanded Language Support`}),`: The Android SDK now supports additional languages, including:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Arabic`}),`\n`,_jsx(_components.li,{children:`Bulgarian`}),`\n`,_jsx(_components.li,{children:`Czech`}),`\n`,_jsx(_components.li,{children:`Spanish (Argentina \u0026 Mexico)`}),`\n`,_jsx(_components.li,{children:`Estonian`}),`\n`,_jsx(_components.li,{children:`Croatian`}),`\n`,_jsx(_components.li,{children:`Hungarian`}),`\n`,_jsx(_components.li,{children:`Japanese`}),`\n`,_jsx(_components.li,{children:`Latvian`}),`\n`,_jsx(_components.li,{children:`Portuguese (Brazil)`}),`\n`,_jsx(_components.li,{children:`Romanian`}),`\n`,_jsx(_components.li,{children:`Vietnamese`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`3DS Sandbox Testing`}),`: Enhanced support for testing 3D Secure (3DS) flows in the sandbox environment.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Improved Analytics \u0026 Reporting`}),`: Enhanced tracking and insights for better performance monitoring.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.35.0`,description:`2024-01-24`,id:`v2-35-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:_jsx(_components.strong,{children:`🧪\\xA0Experimental`})})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`With this version it is possible to opt-in to test API v2.4(Beta). For more information see our `,_jsx(_components.a,{href:`/api-reference/get-started/overview`,children:`API Reference`}),` and `,_jsx(_components.a,{href:`/changelogs/migration-guides/API-2.3-to-2.4`,children:`Migration Guides`}),`. By default, SDK will remain backward compatible and use API `,_jsx(_components.code,{children:`v2.3`}),`.`]}),`\n`]}),_jsx(_components.p,{children:_jsxs(_components.strong,{children:[_jsx(_components.strong,{children:`✨`}),`\\xA0Improvements`]})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`API Timeout values have been updated to improve behaviour in the loading phases of the checkout.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Analytics`}),`: fixed serialization and deserialization of analytics events.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.34.0`,description:`2024-01-20`,id:`v2-34-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀\\xA0New feature`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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 `,_jsx(_components.a,{href:`/payment-services/cobadged-cards`,children:`documentation`}),` about co-badged cards in order to learn more.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Enhanced Card Expiry Date Validation:`}),` We’ve improved the accuracy of expiry date validation for both headless and drop-in integrations.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Improved Stability:`}),` Resolved crashes caused by `,_jsx(_components.code,{children:`ConcurrentModificationException`}),` during SDK initialization.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.33.1`,description:`2024-12-20`,id:`v2-33-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Stability improvements.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.33.0`,description:`2024-12-19`,id:`v2-33-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀\\xA0New feature`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`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 `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodResource`,children:_jsx(_components.strong,{children:_jsx(_components.code,{children:`getPaymentMethodResource`})})}),` method to access these native resources seamlessly. If you are using Headless integration, make sure to check our updated `,_jsx(_components.a,{href:`/checkout/headless#step-3-render-available-payment-methods-ui`,children:`documentation`}),` about rendering of payment method buttons.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Usage of Native Payment Method Button is a requirement for all new Android Google Pay API integrations that use a Google Pay payment button.`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`ACH Vaulting via Stripe`}),`: The ACH payment method through Stripe now supports a `,_jsx(_components.a,{href:`/connections/payment-methods/ach/stripe#prepare-the-sdk-for-vaulting`,children:`vaulting flow`}),`, enabling you to save customer details on agreement for future transactions.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Google Pay Enhancements`}),`: You can now collect additional user data through Google Pay, including the user’s email and shipping address. Check out our `,_jsx(_components.a,{href:`/connections/payment-methods/google-pay/overview`,children:`guide`}),` for details on enabling this feature.`]}),`\n`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SDK Resilience`}),`: We’ve enhanced SDK resilience to better handle scenarios where Activities are destroyed due to process death, ensuring a smoother recovery experience.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Deprecations`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In order to support `,_jsx(_components.code,{children:`Native Payment Method Button`}),` requirements, we have deprecated following methods:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodAsset`,children:`PrimerHeadlessUniversalCheckoutAssetsManager.getPaymentMethodAsset`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodAssets`,children:`PrimerHeadlessUniversalCheckoutAssetsManager.getPaymentMethodAssets`})}),`\n`]}),`\n`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.32.4`,description:`2024-11-26`,id:`v2-32-4`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We’ve fixed the issue that caused crashes when retrying a 3DS challenge while another challenge was still in progress.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.32.3`,description:`2024-11-21`,id:`v2-32-3`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We’ve resolved the issue causing crashes when users were deeplinked multiple times from PayPal.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.32.2`,description:`2024-11-15`,id:`v2-32-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Disable back buttons when payment is processing`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.32.1`,description:`2024-11-13`,id:`v2-32-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We’ve fixed the crashes that occurred when using Blik through Adyen’s Drop-In in standalone mode.`}),`\n`,_jsx(_components.li,{children:`We’ve resolved occasional crashes related to the “fragment not attached” issue in Drop-In.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.32.0`,description:`2024-10-28`,id:`v2-32-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Prevent dismissal of Drop-in card form while a payment is active.`}),`\n`,_jsx(_components.li,{children:`Vipps via Adyen will now fall back to the Web flow in the event that the Vipps mobile app was not installed.`}),`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`DividerThemeData`}),` that can be used for styling of dividers in Drop-In. Check out our documentation `,_jsx(_components.a,{href:`/checkout/drop-in/customization`,children:`here`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`You can now use custom colour for input cursors by specifying `,_jsx(_components.code,{children:`cursorColor`}),` in `,_jsx(_components.code,{children:`InputThemeData`})]}),`\n`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`⚠️ `,_jsxs(_components.strong,{children:[`Primer SDK now depends on `,_jsx(_components.code,{children:`io.primer:3ds-android:1.5.0`})]}),`\nIf 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.`]})})]}),`\n`,_jsxs(Update,{label:`v2.31.0`,description:`2024-09-20`,id:`v2-31-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Stripe ACH mandate template can now be configured either with a resource key or passing the full mandate text directly.`}),`\n`,_jsx(_components.li,{children:`Better Spanish language support for Stripe ACH.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.30.0`,description:`2024-08-30`,id:`v2-30-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Stripe ACH is now available`}),` ✨`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We have added support for ACH via Stripe. ACH lets you accept payments from customers with a US bank account.`}),`\n`,_jsx(_components.li,{children:`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.`}),`\n`,_jsx(_components.li,{children:`This release includes: One-off payments, cancel, and refund actions. We aim to add support for recurring payments in the future.`}),`\n`,_jsxs(_components.li,{children:[`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 `,_jsx(_components.a,{href:`/connections/payment-methods/ach/stripe`,children:`consult the direct integration guide`}),`.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.29.0`,description:`2024-08-26`,id:`v2-29-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀\\xA0New feature`})}),_jsx(_components.p,{children:`Android SDK now support additional languages:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Finnish`}),`\n`,_jsx(_components.li,{children:`Korean`}),`\n`,_jsx(_components.li,{children:`Lithuanian`}),`\n`,_jsx(_components.li,{children:`Catalan`}),`\n`,_jsx(_components.li,{children:`Serbian`}),`\n`,_jsx(_components.li,{children:`Ukrainian`}),`\n`,_jsx(_components.li,{children:`Hebrew`}),`\n`,_jsx(_components.li,{children:`Indonesian`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.28.1`,description:`2024-08-08`,id:`v2-28-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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 `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/common-objects/PrimerSettings#properties.clientSessionCachingEnabled`,children:`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.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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.`]}),`\n`,_jsx(_components.li,{children:`We have removed Card Components and related UI from the SDK. Card components were previously deprecated.`}),`\n`,_jsx(_components.li,{children:`Improved payment method handling when payments are completed outside of the scope of the SDK session.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.27.6`,description:`2024-06-25`,id:`v2-27-6`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.p,{children:[`We 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 `,_jsx(_components.code,{children:`1.4.3`}),` version of the 3DS SDK `,_jsxs(_components.strong,{children:[`(`,_jsx(_components.code,{children:`io.primer:3ds-android:1.4.3`}),`).`]})]})]}),`\n`,_jsxs(Update,{label:`v2.27.5`,description:`2024-06-25`,id:`v2-27-5`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(_components.p,{children:`We 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.`})]}),`\n`,_jsxs(Update,{label:`v2.27.4`,description:`2024-06-12`,id:`v2-27-4`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.p,{children:[`We 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 `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/common-objects/PrimerError`,children:`here`}),`.`]})]}),`\n`,_jsxs(Update,{label:`v2.27.2`,description:`2024-05-07`,id:`v2-27-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`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 `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/common-objects/PrimerPaymentMethodTokenData`,children:`SDK reference docs`}),`.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.27.1`,description:`2024-04-24`,id:`v2-27-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Improved internal dependency resolution for NolPay components when `,_jsx(_components.strong,{children:`PrimerHeadlessUniversalCheckout`}),` is reinitialized.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.27.0`,description:`2024-04-09`,id:`v2-27-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀\\xA0New feature`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`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 `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`existingPaymentMethodRequired`})}),` to `,_jsx(_components.strong,{children:`true`}),`. Check our `,_jsx(_components.a,{href:`/connections/payment-methods/google-pay/drop-in#required-existing-payment-method`,children:`guide`}),` on how to enable this feature.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`PayPal`}),`: We have improved the PayPal `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/common-objects/PrimerPaymentMethodTokenData`,children:`payment method token`}),` by providing additional data, including the payer’s first name, last name, and external payer ID.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:_jsx(_components.strong,{children:`CVV recapture for saved cards`})})}),_jsxs(_components.p,{children:[`Within 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 `,_jsx(_components.a,{href:`/payment-services/save-payment-methods/`,children:`here`}),`.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.p,{children:[`Please note, with this update, compatibility requires the use of the `,_jsx(_components.code,{children:`1.4.2`}),` version of the 3DS SDK (`,_jsx(_components.code,{children:`io.primer:3ds-android:1.4.2`}),`).`]})]}),`\n`,_jsxs(Update,{label:`v2.26.1`,description:`2024-04-05`,id:`v2-26-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We’ve enhanced our internal analytics infrastructure for tracking network events, empowering us to efficiently gather valuable data on latency and API errors.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`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 `,_jsx(_components.strong,{children:`consumer-rules.pro`}),` files. You `,_jsx(_components.strong,{children:`should not manually`}),` include any Proguard rules, as `,_jsx(_components.strong,{children:`consumer-rules.pro`}),` are seamlessly integrated with your existing Proguard rules.`]}),`\n`,_jsxs(_components.li,{children:[`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 (`,_jsx(_components.strong,{children:_jsx(_components.code,{children:`Primer.instance.showPaymentMethod(..)`})}),`). This concern has been promptly addressed and resolved.`]}),`\n`,_jsx(_components.li,{children:`We’ve enhanced the handling of payment completion for our Nol pay integration, addressing a regression that had occurred.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.26.0`,description:`2024-03-07`,id:`v2-26-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We have added the ability to select Klarna payment category in Klarna Drop-in`}),`\n`,_jsxs(_components.li,{children:[`Support has been added for `,_jsx(_components.code,{children:`CHECKOUT`}),` payment intents for Klarna Drop-in`]}),`\n`,_jsx(_components.li,{children:`We have included support for Klarna Extra Merchant Data`}),`\n`,_jsxs(_components.li,{children:[`In this release we have added the `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutKlarnaManager`}),` that provides access to the `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/klarna-headless-manager/provideKlarnaComponent#return`,children:_jsx(_components.code,{children:`KlarnaComponent`})}),`.\nUsing the `,_jsx(_components.code,{children:`KlarnaComponent`}),` you can seamlessly integrate Klarna, with a custom payment category selection UI.\nConsult the `,_jsx(_components.a,{href:`/connections/payment-methods/klarna/headless?platform=android`,children:`guide`}),` to get a sense of how to seamlessly integrate Klarna.`]}),`\n`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`⚠️ `,_jsxs(_components.strong,{children:[`Primer SDK now depends on `,_jsx(_components.code,{children:`io.primer:klarna-android:1.0.2`})]}),`\nIf 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.`]})})]}),`\n`,_jsxs(Update,{label:`v2.25.0`,description:`2024-02-15`,id:`v2-25-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We have released support for co-badged cards. You can allow users to select a network if their card is co-badged.`}),`\n`,_jsx(_components.li,{children:`We have also improved card network validation significantly for all card networks.`}),`\n`,_jsxs(_components.li,{children:[`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 `,_jsx(_components.code,{children:`1.4.1`}),` version of the 3DS SDK (`,_jsx(_components.code,{children:`io.primer:3ds-android:1.4.1`}),`).`]}),`\n`]}),_jsx(_components.p,{children:`** 🔧 Fixes**`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We have fixed a bug where the SDK would crash in case of recovering from a process death.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.24.0`,description:`2024-02-06`,id:`v2-24-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`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 (`,_jsx(_components.code,{children:`io.primer:3ds-android:1.4.0`}),`). We recommend upgrading to this version as it brings new LOA Reference Number for all protocol versions.`]}),`\n`,_jsx(_components.li,{children:`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.`}),`\n`]}),_jsx(_components.p,{children:`** 🔧 Fixes**`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`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.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.23.0`,description:`2024-01-30`,id:`v2-23-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.p,{children:[`We’ve enhanced our logging capabilities to provide more comprehensive insights. Specifically, when the `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/logging/PrimerLogger#parameters.logLevel`,children:`PrimerLogLevel`}),` is set to `,_jsx(_components.code,{children:`DEBUG`}),` and you are utilizing our default logger implementation, the complete request and response bodies are now logged to the console.`]}),_jsxs(_components.p,{children:[`if you opt for a custom `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/logging/PrimerLogger#implementing-your-own-custom-logger`,children:`PrimerLogger`}),` implementation, as a security measure, any Personally Identifiable Information (PII) and Payment Card Industry (PCI) data will be automatically obfuscated.`]}),_jsx(_components.p,{children:`** 🔧 Fixes**`}),_jsxs(_components.p,{children:[`Fixed bug where `,_jsx(_components.a,{href:`https://apiref.primer.io/reference/create_client_side_token_client_session_post#request.body.order.fees`,children:`order.fees.type`}),` was not being correctly deserialized by the SDK.`]})]}),`\n`,_jsxs(Update,{label:`v2.22.0`,description:`2024-01-18`,id:`v2-22-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`iDEAL via Adyen`})}),_jsxs(_components.p,{children:[`Adds the `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutComponentWithRedirectManager`}),` that provides access to `,_jsx(_components.a,{href:`/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provide#common-api-and-available-components-supported-types.BanksComponent`,children:_jsx(_components.code,{children:`BanksComponent`})}),`. Using the `,_jsx(_components.code,{children:`BanksComponent`}),` you can easily:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`load list of all supported banks`}),`\n`,_jsx(_components.li,{children:`submit user’s selection`}),`\n`]}),_jsxs(_components.p,{children:[`Consult the `,_jsx(_components.a,{href:`/connections/payment-methods/ideal/adyen-headless`,children:`guide`}),` to get a sense of how to seamlessly integrate iDEAL via Adyen.`]})]}),`\n`,_jsxs(Update,{label:`v2.21.0`,description:`2023-12-15`,id:`v2-21-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`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 (`,_jsx(_components.code,{children:`io.primer:3ds-android:1.3.0`}),`)`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.20.0`,description:`2023-12-12`,id:`v2-20-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsxs(_components.p,{children:[`In this release we have removed `,_jsx(_components.strong,{children:`Apaya`}),` integration.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`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.`}),`\n`,_jsx(_components.li,{children:`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.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Deprecations`})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`PrimerHeadlessUniversalCheckoutCardComponentsManager`}),` has been deprecated and will no longer receive ongoing maintenance and will be removed in the future.`]})]}),`\n`,_jsxs(Update,{label:`v2.19.2`,description:`2023-11-14`,id:`v2-19-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We have improved empty phone number validation for nol Pay`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.19.1`,description:`2023-11-07`,id:`v2-19-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`nol Pay`})}),_jsxs(_components.p,{children:[`Added support for new version of the nol Pay wrapper SDK. Starting from this version, use the `,_jsx(_components.code,{children:`1.0.1`}),` version of nol Pay wrapper:`]}),_jsx(_components.p,{children:_jsx(_components.code,{children:`implementation io.primer:nol-pay-android:1.0.1`})})]}),`\n`,_jsxs(Update,{label:`v2.19.0`,description:`2023-11-06`,id:`v2-19-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`nol Pay`})}),_jsxs(_components.p,{children:[`nol Pay payment method is now considered stable. Please check our `,_jsx(_components.a,{href:`/connections/payment-methods/nol-pay/headless`,children:`integration guide`}),` in order to seamlessly integrate nol Pay.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.p,{children:[`We have introduced `,_jsx(_components.code,{children:`PrimerLogger`}),` that allows you to listen to SDK logs on a specified log level, or provide your own `,_jsx(_components.code,{children:`PrimerLogger`}),` implementation in order to listen and process Primer SDK logs.`]}),_jsxs(_components.p,{children:[`Check out our detailed SDK reference `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/logging/PrimerLogger`,children:`here`}),`.`]})]}),`\n`,_jsxs(Update,{label:`v2.19.0-nolpay.2`,description:`2023-10-30`,id:`v2-19-0-nolpay-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Phone number validation is significantly improved.`}),`\n`,_jsxs(_components.li,{children:[`We no longer require separate fields for `,_jsx(_components.code,{children:`phoneCountryDiallingCode`}),` to be passed. Now you can pass full phone number and SDK will parse and validate phone number.`]}),`\n`,_jsx(_components.li,{children:`We have also fixed the crash that was reported when there were no workflows configured for payment methods.`}),`\n`]}),_jsxs(_components.p,{children:[`Consult the `,_jsx(_components.a,{href:`/connections/payment-methods/nol-pay/headless`,children:`guide`}),` to get a sense of how to seamlessly integrate nol Pay.`]})]}),`\n`,_jsxs(Update,{label:`v2.19.0-nolpay.1`,description:`2023-10-19`,id:`v2-19-0-nolpay-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`nol Pay`})}),_jsxs(_components.p,{children:[`Adds the `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutNolPayManager`}),` that provides following features:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Listing Nol cars`}),`: Listing previously linked Nol payment cards using `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkedCardsComponent`,children:`NolPayLinkedCardsComponent`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`NFC Scanning`}),`: Allows your application to scan NFC Nol payment cards using `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayNfcComponent`,children:`NolPayNfcComponent`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Linking`}),`: Link the Nol card to a phone number using `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkCardComponent`,children:`NolPayLinkCardComponent`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Unlinking`}),`: Unlink previously linked Nol card using `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayUnlinkCardComponent`,children:`NolPayUnlinkCardComponent`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Transactions`}),`: Execute payments using selected Nol payment cards `,_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayPaymentComponent`,children:`NolPayPaymentComponent`}),`.`]}),`\n`]}),_jsxs(_components.p,{children:[`Consult the `,_jsx(_components.a,{href:`/connections/payment-methods/nol-pay/headless`,children:`guide`}),` to get a sense of how to seamlessly integrate nol Pay.`]})]}),`\n`,_jsxs(Update,{label:`v2.18.0`,description:`2023-10-19`,id:`v2-18-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`In previous versions we have used Koin for Dependency Injection inside of our SDK. Starting from this release, Koin was removed as transitive dependency.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.17.3`,description:`2023-09-07`,id:`v2-17-3`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`3DS will be conditionally triggered in case `,_jsx(_components.code,{children:`Google Pay`}),` method returns `,_jsx(_components.code,{children:`PAN_ONLY`}),` token in Headless integration`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.17.2`,description:`2023-08-17`,id:`v2-17-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.p,{children:[`In this version of the SDK we have introduced a new version of 3DS library. Primer SDK will depend on `,_jsx(_components.code,{children:`io.primer:3ds-android:1.2.0`}),` from now on.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`⚠️ `,_jsx(_components.strong,{children:`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.`})]})})]}),`\n`,_jsxs(Update,{label:`v2.17.1`,description:`2023-08-09`,id:`v2-17-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Removed requirements for `,_jsx(_components.code,{children:`amount`}),` in client session when vaulting PayPal`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.17.0`,description:`2023-07-28`,id:`v2-17-0`,children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[`⚠️ This version introduces breaking changes for Headless Checkout.\nA migration guide for this can be found `,_jsx(_components.a,{href:`/changelogs/android-sdk`,children:`here`}),`.`]})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Headless Vault Manager`})}),_jsxs(_components.p,{children:[`Add `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutVaultManager.newInstance()`}),` which returns an instance of `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutVaultManager`}),`. It provides the following features:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods`,children:`fetch a list`}),` of vaulted payment methods`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod`,children:`delete`}),` a vaulted payment method`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/validate`,children:`validate`}),` the additional data used to perform a payment (e.g. validate CVV)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow`,children:`perform a payment`}),` using a vaulted payment method`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`3DS Service`})}),_jsxs(_components.p,{children:[`Our 3DS service has been completely revamped. Primer SDK now supports 3DS protocol version `,_jsx(_components.code,{children:`2.2.0`})]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Support 3DS weak validation`}),`\n`,_jsx(_components.li,{children:`Support 3DS OOB flow`}),`\n`,_jsx(_components.li,{children:`Improve 3DS reporting`}),`\n`]}),_jsxs(_components.p,{children:[`Check out our detailed documentation `,_jsx(_components.a,{href:`/payment-services/3d-secure/get-started#android`,children:`here`})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Cards via iPay88`})}),_jsx(_components.p,{children:`In this version of the SDK we added the support for Cards via iPay88.`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Cards via iPay88 Payment Method now is fully supported via Headless Universal Checkout and Drop-In.`}),`\n`,_jsx(_components.li,{children:`You can now make one-off payments or vault a card with iPay88 in order to make recurring payments.`}),`\n`,_jsxs(_components.li,{children:[`Please update the iPay88 SDK version to `,_jsx(_components.code,{children:`1.0.1`})]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improvements to deeplink handling for PayPal and Redirect based payment methods`}),`\n`,_jsx(_components.li,{children:`Reintroduce showing a payment method directly with the Drop In UI integration`}),`\n`,_jsxs(_components.li,{children:[`Koin dependency has been bumped to version `,_jsx(_components.code,{children:`3.3.3`})]}),`\n`,_jsxs(_components.li,{children:[`Better interoperability with `,_jsx(_components.code,{children:`Java`}),` when using Primer SDK`]}),`\n`,_jsx(_components.li,{children:`Internal SDK improvements`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PrimerPaymentMethodAsset`}),` now exposes the payment method’s friendly name`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Fixed bug where calling `,_jsx(_components.code,{children:`submit`}),` method of `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutCardComponentsManager`}),` would return error due to wrong formatting of expiry date.`]}),`\n`,_jsx(_components.li,{children:`Apply fix on PayPal vaulting`}),`\n`,_jsx(_components.li,{children:`Resolved bug where Drop In UI could be launched multiple times at same time`}),`\n`,_jsx(_components.li,{children:`Resolved internal analytics crashes.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🤹 Breaking changes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PrimerCardComponentsManagerListener`}),` has been renamed to `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutCardComponentsManagerListener`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`The package name for the `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutNativeUiManager`}),` has been changed to `,_jsx(_components.code,{children:`io.primer.android.components.manager.nativeUi`}),`.`]}),`\n`]})]}),`\n`,_jsx(Update,{label:`v2.17.0-RC11`,description:`2023-07-17`,id:`v2-17-0-rc11`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improvements to deeplink handling for PayPal and Redirect based payment methods`}),`\n`]})}),`\n`,_jsxs(Update,{label:`v2.17.0-RC10`,description:`2023-07-10`,id:`v2-17-0-rc10`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Headless Vault Manager`})}),_jsxs(_components.p,{children:[`Add `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutVaultManager.newInstance()`}),` which returns an instance of `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutVaultManager`}),`. It provides the following features:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods`,children:`fetch a list`}),` of vaulted payment methods`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod`,children:`delete`}),` a vaulted payment method`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/validate`,children:`validate`}),` the additional data used to perform a payment (e.g. validate CVV)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow`,children:`perform a payment`}),` using a vaulted payment method`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.17.0-RC9`,description:`2023-06-13`,id:`v2-17-0-rc9`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`⚠️ This version introduces breaking changes for Headless Checkout`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Fixed bug where calling `,_jsx(_components.code,{children:`submit`}),` method of `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutCardComponentsManager`}),` would return error due to wrong formatting of expiry date.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🤹 Breaking changes`})}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`PrimerCardComponentsManagerListener`}),` has been renamed to `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutCardComponentsManagerListener`}),`.`]})]}),`\n`,_jsxs(Update,{label:`v2.17.0-RC8`,description:`2023-06-08`,id:`v2-17-0-rc8`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Reintroduce showing a payment method directly with the Drop In UI integration`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Apply fix on PayPal vaulting`}),`\n`,_jsx(_components.li,{children:`Resolved bug where Drop In UI could be launched multiple times at same time`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.17.0-RC7`,description:`2023-05-29`,id:`v2-17-0-rc7`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`⚠️ This version introduces breaking changes for Headless Checkout`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Our 3DS service has been completely revamped. Primer SDK now supports 3DS protocol version `,_jsx(_components.code,{children:`2.2.0`})]}),`\n`,_jsx(_components.li,{children:`Support 3DS weak validation`}),`\n`,_jsx(_components.li,{children:`Support 3DS OOB flow`}),`\n`,_jsx(_components.li,{children:`Improve 3DS reporting`}),`\n`]}),_jsxs(_components.p,{children:[`Check out our detailed documentation `,_jsx(_components.a,{href:`/payment-services/3d-secure/get-started#android`,children:`here`})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Resolved internal analytics crashes.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.17.0-RC6`,description:`2023-05-10`,id:`v2-17-0-rc6`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`⚠️ This version introduces breaking changes for Headless Checkout`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Koin dependency has been bumped to version `,_jsx(_components.code,{children:`3.3.3`})]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.17.0-RC5`,description:`2023-04-10`,id:`v2-17-0-rc5`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`⚠️ This version introduces breaking changes for Headless Checkout`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Better interoperability with `,_jsx(_components.code,{children:`Java`}),` when using Primer SDK`]}),`\n`,_jsx(_components.li,{children:`Internal SDK improvements`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🤹 Breaking changes`})}),_jsxs(_components.p,{children:[`The package name for the `,_jsx(_components.code,{children:`PrimerHeadlessUniversalCheckoutNativeUiManager`}),` has been changed to `,_jsx(_components.code,{children:`io.primer.android.components.manager.nativeUi`}),`.`]})]}),`\n`,_jsxs(Update,{label:`v2.17.0-RC4`,description:`2023-03-29`,id:`v2-17-0-rc4`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`⚠️ This version introduces breaking changes for Headless Checkout`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PrimerPaymentMethodAsset`}),` now exposes the payment method’s friendly name`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.17.0-RC3`,description:`2023-03-14`,id:`v2-17-0-rc3`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`⚠️ This version introduces breaking changes for Headless Checkout`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Cards via iPay88`})}),_jsx(_components.p,{children:`In this version of the SDK we added the support for Cards via iPay88.`}),_jsx(_components.p,{children:`Cards via iPay88 Payment Method now is fully supported via Headless Universal Checkout and Drop-In.`}),_jsx(_components.p,{children:`You can now make one-off payments or vault a card with iPay88 in order to make recurring payments.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 Improvements`})}),_jsx(_components.p,{children:`In addition to RC2 release, we have improved couple of things based on your feedback.`}),_jsx(_components.p,{children:`We have also added all of the new things we worked on in releases 2.16.5 and 2.16.6.`})]}),`\n`,_jsxs(Update,{label:`v2.16.6`,description:`2023-03-13`,id:`v2-16-6`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Improved handling of payment cancellations for `,_jsx(_components.code,{children:`Atome`})]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Fixed bug that caused some of the expiry dates not being validated correctly`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.16.5`,description:`2023-03-07`,id:`v2-16-5`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improved internal analytics for 3DS events`}),`\n`,_jsx(_components.li,{children:`Improved internal analytics for headless integration`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.17.0-RC2`,description:`2023-02-23`,id:`v2-17-0-rc2`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`⚠️ This version introduces breaking changes for Headless Checkout`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(_components.p,{children:`It’s been more than 6 months that Headless Checkout has been released in Beta!`}),_jsx(_components.p,{children:`We gathered insightful feedback that pushed us to work on critical improvements to the developer experience of Headless Checkout.`}),_jsx(_components.p,{children:`This release candidate introduces a more robust, scalable, and stable flow for integrating Headless Checkout to implement a fully custom interface for your checkout.`}),_jsxs(_components.p,{children:[`Our `,_jsx(_components.a,{href:`/checkout/headless#android`,children:`documentation`}),` has been updated to reflect these changes. You can also find a `,_jsx(_components.a,{href:`/changelogs/migration-guides/headless-mobile-out-of-beta`,children:`Migration Guide`}),` detailing the changes.`]}),_jsx(_components.p,{children:`This release candidate will soon be merged into the main releases.`}),_jsx(_components.p,{children:`In addition to RC1 release, we have improved couple of things based on your feedback.`}),_jsx(_components.p,{children:`We have also added all of the new things we worked on in releases 2.16.3 and 2.16.4.`})]}),`\n`,_jsxs(Update,{label:`v2.16.4`,description:`2023-02-09`,id:`v2-16-4`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Thai translations have been improved and updated.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.16.3`,description:`2023-02-07`,id:`v2-16-3`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`New languages`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Malay`}),`\n`,_jsx(_components.li,{children:`Thai`}),`\n`,_jsx(_components.li,{children:`Mandarin Chinese`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.17.0-RC1`,description:`2023-01-23`,id:`v2-17-0-rc1`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`⚠️ This version introduces breaking changes for Headless Checkout`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(_components.p,{children:`It’s been more than 6 months that Headless Checkout has been released in Beta!`}),_jsx(_components.p,{children:`We gathered insightful feedback that pushed us to work on critical improvements to the developer experience of Headless Checkout.`}),_jsx(_components.p,{children:`This release candidate introduces a more robust, scalable, and stable flow for integrating Headless Checkout to implement a fully custom interface for your checkout.`}),_jsxs(_components.p,{children:[`Our `,_jsx(_components.a,{href:`/checkout/headless#android`,children:`documentation`}),` has been updated to reflect these changes. You can also find a `,_jsx(_components.a,{href:`/changelogs/migration-guides/headless-mobile-out-of-beta`,children:`Migration Guide`}),` detailing the changes.`]}),_jsx(_components.p,{children:`This release candidate will soon be merged into the main releases.`})]}),`\n`,_jsxs(Update,{label:`v2.16.2`,description:`2023-01-20`,id:`v2-16-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀\\xA0New feature`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Google Pay payments now support native 3DS.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Drop-In can now be intialized with `,_jsx(_components.code,{children:`0`}),` amount.`]}),`\n`,_jsxs(_components.li,{children:[`Particular flows that use `,_jsx(_components.code,{children:`showPaymentMethod`}),` have been improved.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.16.1`,description:`2022-12-29`,id:`v2-16-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In this version of the SDK we have introduced a new version of Klarna library. Primer SDK will depend on `,_jsx(_components.code,{children:`io.primer:klarna-android:1.0.1`}),` from now on.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`⚠️ `,_jsx(_components.strong,{children:`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.`})]})}),`\n`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.16.0`,description:`2022-12-20`,id:`v2-16-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Cards via iPay88`})}),_jsx(_components.p,{children:`In this version of the SDK we added the support for Cards via iPay88.`}),_jsx(_components.p,{children:`Cards via iPay88 Payment Method now is fully supported via Headless Universal Checkout (Beta) and Drop-In.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀\\xA0New feature`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In this version of the SDK we have introduced a new version of 3DS library. Primer SDK will depend on `,_jsx(_components.code,{children:`io.primer:3ds-android:1.1.2`}),` from now on.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`⚠️ `,_jsx(_components.strong,{children:`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.`})]})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`We have added a way to capture billing address using Google Pay. You will need to pass `,_jsx(_components.code,{children:`captureBillingAddress = true`}),` to `,_jsx(_components.code,{children:`PrimerGooglePayOptions`})]}),`\n`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.15.1`,description:`2022-11-29`,id:`v2-15-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`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.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.15.0`,description:`2022-11-17`,id:`v2-15-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsxs(_components.p,{children:[`In this version of the SDK we have introduced a new version of 3DS library. Primer SDK will depend on `,_jsx(_components.code,{children:`io.primer:3ds-android:1.1.1`}),` from now on.`]}),_jsxs(Warning,{children:[_jsx(_components.p,{children:`⚠️`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`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.`})})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We have fixed certain redirection issues for payment methods using Buckaroo as PSP`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.14.1`,description:`2022-11-11`,id:`v2-14-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 Improvement`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Aligned the `,_jsx(_components.code,{children:`RN_ANDROID`}),` on Analytics `,_jsx(_components.code,{children:`sdkType`})]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v2.14.0`,description:`2022-10-27`,id:`v2-14-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsxs(_components.p,{children:[`In this version of the SDK we have removed options to pass 3DS vaulting flag `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`is3DSOnVaultingEnabled`})})]}),_jsx(_components.p,{children:`Above flow is now obsoleted and 3DS will always follow workflows.`})]}),`\n`,_jsxs(Update,{label:`v2.13.1`,description:`2022-10-26`,id:`v2-13-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Retail Outlets via Xendit`})}),_jsx(_components.p,{children:`In this version of the SDK we added the support for Retail Outlets via Xendit.`}),_jsx(_components.p,{children:`Retail Outlets via Xendit Payment Method now is fully supported via Headless Universal Checkout (Beta) via the Raw Data Manager.`}),_jsxs(_components.p,{children:[`Check this out in `,_jsx(_components.a,{href:`https://www.notion.so/52426f47b9b04f808a6b88ee51301196?pvs=21`,children:`our documentation`}),` 🙌`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Fix initialization for Universal Checkout.`}),`\n`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`This fix solves the issue affecting version `,_jsx(_components.code,{children:`2.13.0`}),`. We recommend updating to this `,_jsx(_components.code,{children:`2.13.1`}),` version.`]})})]}),`\n`,_jsxs(Update,{label:`v2.12.1`,description:`2022-10-10`,id:`v2-12-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsx(_components.p,{children:`Fixed raw card data formatting in some scenarios.`})]}),`\n`,_jsxs(Update,{label:`v2.12.0`,description:`2022-10-06`,id:`v2-12-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Bancontact via Adyen support`})}),_jsx(_components.p,{children:`In this version of the SDK we added the support for Bancontact Debit via Adyen for.`}),_jsx(_components.p,{children:`Bancontact Debit via Adyen Payment Method now is fully supported via Headless Universal Checkout (Beta) and the standard SDK implementation.`}),_jsx(_components.p,{children:`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.`})]}),`\n`,_jsxs(Update,{label:`v2.10.1`,description:`2022-09-30`,id:`v2-10-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsx(_components.p,{children:`Fixed crashes on payment method screens in case of process death.`})]}),`\n`,_jsxs(Update,{label:`v2.10.0`,description:`2022-09-23`,id:`v2-10-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:`In this version we have improved performances of our Headless Universal Checkout.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔧 Fixes`})}),_jsx(_components.p,{children:`Fixed 3DS data mapping that was causing it to fail.`})]}),`\n`,_jsxs(Update,{label:`v2.9.1`,description:`2022-09-17`,id:`v2-9-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:`In this version of the SDK we added the support for PromptPay via Omise 🙌.`}),_jsxs(_components.p,{children:[`In Headless Universal Checkout (Beta), developers will access to a new event which will provide an object `,_jsx(_components.code,{children:`PrimerCheckoutQRCodeInfo`}),` containing the data needed to build their awesome UI / UX on top.`]}),_jsxs(_components.p,{children:[`For PromptPay specifically, the object will be `,_jsx(_components.code,{children:`PromptPayCheckoutAdditionalInfo`})]}),_jsx(_components.p,{children:_jsx(_components.code,{children:`fun onAdditionalInfoReceived(info: PrimerCheckoutAdditionalInfo) = Unit`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 Improvements`})}),_jsx(_components.p,{children:`We have fixed a crash on billing address country selector screen.`})]}),`\n`,_jsxs(Update,{label:`v2.8.1`,description:`2022-09-13`,id:`v2-8-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 Improvements`})}),_jsx(_components.p,{children:`We have fixed a bug where cardholder name field was loosing focus when billing address checkout module was enabled.`})]}),`\n`,_jsxs(Update,{label:`v2.8.0`,description:`2022-09-08`,id:`v2-8-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 Improvements`})}),_jsx(_components.p,{children:`We have removed some transitive dependencies from our code. This will result in smaller size of you application when Primer SDK is imported.`})]}),`\n`,_jsxs(Update,{label:`v2.7.0`,description:`2022-09-01`,id:`v2-7-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsxs(_components.p,{children:[`This release changes the way that `,_jsx(_components.strong,{children:`Klarna`}),` is integrated, and switches on Klarna’s native Android SDK.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Drop-in`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added support for `,_jsx(_components.strong,{children:`Multibanco`}),` via Adyen.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Headless`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added support for `,_jsx(_components.strong,{children:`Multibanco`}),` via Adyen.`]}),`\n`,_jsxs(_components.li,{children:[`Added support for `,_jsx(_components.strong,{children:`MbWay`}),` via Adyen.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 Improvements`})}),_jsx(_components.p,{children:`We have removed some transitive dependencies from our code. This will result in smaller size of you application when Primer SDK is imported.`})]}),`\n`,_jsxs(Update,{label:`v1.16.0`,description:`2022-09-01`,id:`v1-16-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:`This release changes the way that Klarna is integrated, and switches on Klarna’s native Android SDK.`})]}),`\n`,_jsxs(Update,{label:`v2.6.0`,description:`2022-08-24`,id:`v2-6-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:`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.`}),_jsx(_components.p,{children:`We kept expanding the Headless Checkout feature, now providing to our developers the raw phone number data they can utilize to create payments.`}),_jsxs(_components.p,{children:[`The payment method supporting that is only `,_jsx(_components.strong,{children:`OVO via Xendit`}),` for now.`]}),_jsx(_components.p,{children:`Try it out and let us know what do you think 🙌!`}),_jsx(_components.hr,{}),_jsx(_components.p,{children:`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.`}),_jsx(_components.p,{children:`Here is a preview 👇`}),_jsx(_components.p,{children:_jsx(_components.img,{src:`https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2585af85-a020-4c2e-a729-baaeac384a59/Screen_Recording_2022-08-23_at_18.56.53.gif`,alt:`Screen Recording 2022-08-23 at 18.56.53.gif`})})]}),`\n`,_jsxs(Update,{label:`2.5.0`,description:`2022-08-16`,id:`2-5-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:`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.`}),_jsx(_components.p,{children:`Try it out and let us know what do you think 🙌!`})]}),`\n`,_jsxs(Update,{label:`v2.4.0`,description:`2022-08-10`,id:`v2-4-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:`This release brings a totally new way of retrieving the APMs.`}),_jsx(_components.p,{children:`We have now the possibility of providing some APMs without even push a new release 🙌.`}),_jsx(_components.p,{children:`That’s a huge milestone for us and the developments of our product.`}),_jsx(_components.hr,{}),_jsx(_components.p,{children:`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.`}),_jsxs(_components.p,{children:[`**🚨 `,_jsx(_components.strong,{children:`Migration info🚨`})]}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Payment methods' types in version prior to this one (\u003c2.4.0) were represented by a `}),\"enum PrimerPaymentMethodType` .\"]}),_jsxs(_components.p,{children:[`In this version, we are no longer exposing the `,_jsx(_components.code,{children:`enum`}),` , and return a plain `,_jsx(_components.code,{children:`String`}),` instead.`]})]}),`\n`,_jsxs(Update,{label:`v2.3.0`,description:`2022-07-29`,id:`v2-3-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:`Fast and PromptPay via Rapyd`}),_jsxs(Frame,{caption:`Payment Prompts`,children:[_jsx(OptimizedImage,{src:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/prompt_pay.webp?fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=caf9dacee7f363931db1e4233e6ad89d`,\"data-og-width\":`902`,width:`902`,\"data-og-height\":`1152`,height:`1152`,\"data-path\":`images/changelogs/android/prompt_pay.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/prompt_pay.webp?w=280\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=9f99187145cbd031197d4ec5af900dad 280w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/prompt_pay.webp?w=560\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=1af33a52fa0eb419bdd7f5c4fb2cb609 560w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/prompt_pay.webp?w=840\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=672346297c6f01dd34a9dbd85254c995 840w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/prompt_pay.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=a7a76ea5aac6ca2faf33fbf96c0dba03 1100w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/prompt_pay.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=5ff4a39235137b39c6d062ec8438ea1f 1650w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/prompt_pay.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=e0d2913ab1de65d016b84ece0a37b778 2500w`}),_jsx(OptimizedImage,{src:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/Screen_Shot_2022-07-28_at_20.24.07.webp?fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=50774127e47d73eab842b0e81082792d`,\"data-og-width\":`512`,width:`512`,\"data-og-height\":`594`,height:`594`,\"data-path\":`images/changelogs/android/Screen_Shot_2022-07-28_at_20.24.07.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/Screen_Shot_2022-07-28_at_20.24.07.webp?w=280\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=1a5d6b959aae34bdda6b87ae064c1de4 280w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/Screen_Shot_2022-07-28_at_20.24.07.webp?w=560\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=21b6567855d33ff8799552da527ccf5a 560w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/Screen_Shot_2022-07-28_at_20.24.07.webp?w=840\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=eded278d8aff8c15a8143307a0ba61ee 840w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/Screen_Shot_2022-07-28_at_20.24.07.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=a6802ea0fea6f40bdb490120fb374723 1100w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/Screen_Shot_2022-07-28_at_20.24.07.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=937be86a0998570a95251689d1b57af3 1650w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/Screen_Shot_2022-07-28_at_20.24.07.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=411cb58423d98c4153a40ab0b423bc84 2500w`})]})]}),`\n`,_jsxs(Update,{label:`v2.2.1`,description:`2022-07-15`,id:`v2-2-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`🚀 Improvements`})}),_jsx(_components.p,{children:`We have added some small improvements to the SDK.`})]}),`\n`,_jsxs(Update,{label:`v2.2.0`,description:`2022-07-13`,id:`v2-2-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(Note,{children:_jsx(_components.p,{children:`👌 Alongside the listed features below, we have performed improvements to our codebase.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 APMs support`})}),_jsx(_components.p,{children:`Grab Pay, Poli and GCash via Rapyd`}),_jsxs(Frame,{caption:`Payment Prompts`,children:[_jsx(OptimizedImage,{src:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/grab_pay.webp?fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=c47a61c0c9a3fa037819ac3c24e77dc2`,\"data-og-width\":`351`,width:`351`,\"data-og-height\":`408`,height:`408`,\"data-path\":`images/changelogs/android/grab_pay.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/grab_pay.webp?w=280\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=bb5416eb77e809dac08df37008dcae4e 280w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/grab_pay.webp?w=560\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=e2910bd9e96c2b211259b2e277180407 560w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/grab_pay.webp?w=840\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=b65623659df1260c74daff2d2bd048eb 840w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/grab_pay.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=2b197afde2c7f170e29ada44e18df968 1100w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/grab_pay.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=8a1584c6b2c28af98dc0c94bde782500 1650w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/grab_pay.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=8215e414f958d893451f3406760c2908 2500w`}),_jsx(OptimizedImage,{src:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/poli_pay.webp?fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=62c824e5c25a4df91c3960df27d81b56`,\"data-og-width\":`356`,width:`356`,\"data-og-height\":`348`,height:`348`,\"data-path\":`images/changelogs/android/poli_pay.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/poli_pay.webp?w=280\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=0caeed4e39b4a9a82f0a8f27eb68dafb 280w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/poli_pay.webp?w=560\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=2e263e9e098acb88c8ea9ca756ae8e66 560w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/poli_pay.webp?w=840\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=0348607f59daf317901bc3f593e12ad9 840w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/poli_pay.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=5679d1858dd5a58ecf4f160851856caa 1100w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/poli_pay.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=8077bb9def79cf5f67bb9d784cd73141 1650w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/poli_pay.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=a7346acaf86c0fa8b44429e9772f893e 2500w`})]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Billing address support 🧾`})}),_jsx(_components.p,{children:`We can now capture the billing address before performing a payment.`}),_jsxs(Frame,{caption:`Payment Prompts`,children:[_jsx(OptimizedImage,{src:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/billing_address.webp?fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=279a1f7f2e5a6f136bff95c5e002fa6b`,\"data-og-width\":`512`,width:`512`,\"data-og-height\":`1081`,height:`1081`,\"data-path\":`images/changelogs/android/billing_address.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/billing_address.webp?w=280\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=fedcaeab21d4e5332499130af10055bf 280w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/billing_address.webp?w=560\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=3e2aeebccbcd6d561649a08201aabf83 560w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/billing_address.webp?w=840\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=83b3b1148d1fb7d3095a447168c8b914 840w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/billing_address.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=533f5d104c875ecbafbdf932a50deca2 1100w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/billing_address.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=d7d84fa1b20b4f2c1ed0628d7278abc9 1650w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/billing_address.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=dadd95314c3b29a7b8d869b219d1889a 2500w`}),_jsx(OptimizedImage,{src:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/find_country.webp?fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=27013d64c73c6da67cab7d4a76915c94`,\"data-og-width\":`512`,width:`512`,\"data-og-height\":`1081`,height:`1081`,\"data-path\":`images/changelogs/android/find_country.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/find_country.webp?w=280\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=d7ec8217eef3c68d6ced0131bb8b88dd 280w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/find_country.webp?w=560\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=d2dad2062d39170fbbe08ae2655564ff 560w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/find_country.webp?w=840\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=753888626d17df8c8f2121d90054d2de 840w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/find_country.webp?w=1100\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=13dc34d10683b35981ee2c59d6ad8b57 1100w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/find_country.webp?w=1650\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=49ed6fd4900eae8a03691e56b17c1081 1650w, https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/find_country.webp?w=2500\u0026fit=max\u0026auto=format\u0026n=2gUFYKfNb_svpxsN\u0026q=85\u0026s=f5e45e766460e031ddd31a7ae56c1b54 2500w`})]})]}),`\n`,_jsxs(Update,{label:`v2.1.0`,description:`2022-07-07`,id:`v2-1-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(_components.p,{children:_jsx(_components.em,{children:`The version 2 of the Headless Universal Checkout is out!`})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`💡 Take a look at the `,_jsx(_components.a,{href:`/changelogs/migration-guides/sdk-v1-to-v2#android`,children:`migration guide`}),` for updating your integration to version 2.`]})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Payments created automatically`})}),_jsx(_components.p,{children:`Primer Headless Universal Checkout | SDK`}),_jsxs(_components.p,{children:[`Starting from this version, automatic payment creation is included in the `,_jsx(_components.code,{children:`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 `,_jsx(_components.a,{href:`https://www.notion.so/Android-SDK-8b4bd28444eb4af283678c9f2b5f46fe?pvs=21`,children:`explanation`}),` about the changes we made.`]})]}),`\n`,_jsxs(Update,{label:`v2.0.1`,description:`2022-06-20`,id:`v2-0-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`💳 Dummy Payment Methods`})}),_jsx(_components.p,{children:`Universal Checkout | Payment Methods`}),_jsx(_components.p,{children:`We want you to start creating payments with Universal Checkout as quickly as possible, so we’ve added some dummy payment methods - no credentials required 😎`}),_jsx(_components.p,{children:`The following payment methods have been added:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`PayPal via Primer`}),`\n`,_jsx(_components.li,{children:`Sofort via Primer`}),`\n`,_jsx(_components.li,{children:`Klarna via Primer`}),`\n`]}),_jsx(_components.p,{children:`These payment methods are purely for demonstrative purposes and aren’t tied to any payment method specific environment.`}),_jsxs(_components.p,{children:[`You can now create payments in different states (authorized, declined, failed) and see them in the dashboard’s `,_jsx(_components.a,{href:`https://dashboard.primer.io/payments`,children:`Payments page`}),`.`]}),_jsx(_components.p,{children:`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.`}),_jsx(Note,{children:_jsx(_components.p,{children:`💡 Primer’s Dummy Payment Methods will come preconfigured with all new sandbox accounts.`})})]}),`\n`,_jsxs(Update,{label:`v2.0.0`,description:`2022-06-08`,id:`v2-0-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.p,{children:[_jsx(_components.em,{children:`The version 2 of the SDK is out!`}),`\n`,_jsx(_components.em,{children:`This includes a simplified way to integrate Primer`})]}),_jsx(Tip,{children:_jsxs(_components.p,{children:[`📚 Take a look at the `,_jsx(_components.a,{href:`/changelogs/migration-guides/sdk-v1-to-v2#android`,children:`migration guide`}),` for updating your integration to version 2.`]})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Payments created automatically`})}),_jsx(_components.p,{children:`Universal Checkout | SDK`}),_jsxs(_components.p,{children:[`Creating payments with Universal Checkout is now `,_jsx(_components.em,{children:`seamless.`}),` There’s no more need for `,_jsx(_components.strong,{children:`callbacks`}),`, `,_jsx(_components.strong,{children:`API calls`}),` and `,_jsx(_components.strong,{children:`headaches`}),` to create a payment. It’s all done under the hood 🧙`]}),_jsxs(_components.p,{children:[_jsx(_components.em,{children:_jsx(_components.strong,{children:`In the past, creating payments involved manual payment handling:`})}),`\nOn the `,_jsx(_components.strong,{children:`client side`}),`, you would have had to implement the dreaded `,_jsx(_components.code,{children:`CheckoutEvent.TokenizationSuccess`}),` and `,_jsx(_components.code,{children:`CheckoutEvent.ResumeSuccess`}),` callbacks:`]}),_jsx(CodeBlock,{filename:`Kotiln`,numberOfLines:`19`,language:`kotlin`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`kotlin`,children:_jsxs(_components.code,{language:`kotlin`,numberOfLines:`19`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`private`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` val`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` listener = `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`object`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`CheckoutEventListener`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` override`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` fun`}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:` onCheckoutEvent`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(e: `}),_jsx(_components.span,{style:{color:`#4EC9B0`,\"--shiki-dark\":`#4EC9B0`},children:`CheckoutEvent`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#C586C0`,\"--shiki-dark\":`#C586C0`},children:` when`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`(e) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` is`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` CheckoutEvent.TokenizationSuccess - > {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Create a payment`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment fails: show error message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment succeeds: show a success message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment has a required action: return the new client token`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` is`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` CheckoutEvent.ResumeSuccess - > {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // Resume the payment`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment fails: show error message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment succeeds: show a success message`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` // If payment has a required action: return the new client token`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`server side`}),`, you had to manually call our `,_jsx(_components.strong,{children:`Payments API`}),` in order to create a payment 🤷`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Rejoice!`}),` As from version `,_jsx(_components.code,{children:`2.0.0`}),` no manual payment handling is required! Payment creation is now, as mentioned above, `,_jsx(_components.em,{children:`seamless.`})]}),_jsxs(_components.p,{children:[`Feel free to rip out the above mentioned callbacks when migrating to version `,_jsx(_components.code,{children:`2.0.0`}),` and enjoy the feeling of utter relaxation as all your payment handling is now done by Universal Checkout 💆`]}),_jsxs(Accordion,{title:` For the nerds ❤️`,id:`for-the-nerds`,children:[_jsx(_components.p,{children:_jsx(_components.em,{children:`Payment lifecycle callbacks`})}),_jsx(_components.p,{children:`If 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.`}),_jsx(Note,{children:_jsxs(_components.p,{children:[`💡 For more information on these callbacks, take a look at the `,_jsx(_components.strong,{children:`Payment Lifecycle Callbacks`}),` section in our new and improved `,_jsx(_components.a,{href:`https://www.notion.so/API-Reference-e58ee6d184ff4cd7ae2f90c6b28aaaba?pvs=21`,children:`API reference`})]})}),_jsx(_components.p,{children:_jsx(_components.em,{children:`Manual payment handling`})}),_jsxs(_components.p,{children:[`For the `,_jsx(_components.strong,{children:`brave`}),` and `,_jsx(_components.strong,{children:`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 `,_jsx(_components.a,{href:`/checkout/advanced/manual-payment-creation#android-kotlin`,children:`manual payment creation guide`}),` 📚`]})]})]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`🔨 Deprecation`})}),`\n`,_jsx(_components.p,{children:`The Android SDK’s move to version 2 has brought a lot of exciting changes and along with these changes, some deprecations.`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`📚 Please take a look at our Android SDK version 2 `,_jsx(_components.a,{href:`/changelogs/migration-guides/sdk-v1-to-v2#android`,children:`migration guide`}),` for a full list of the deprecations made.`]})}),`\n`,_jsxs(Update,{label:`v1.15.0`,description:`2022-05-23`,id:`v1-15-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`New payment methods`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added support for Coinbase`}),`\n`,_jsx(_components.li,{children:`Added support for OpenNode`}),`\n`,_jsx(_components.li,{children:`Added support for 2c2p`}),`\n`]})]}),`\n`,_jsx(Update,{label:`v1.14.0`,description:`2022-05-11`,id:`v1-14-0`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`We have added support for 3DS processor`}),`\n`]})}),`\n`,_jsx(Update,{label:`v1.12.1`,description:`2022-04-04`,id:`v1-12-1`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added support for the RN bridge`}),`\n`]})}),`\n`,_jsxs(Update,{label:`v1.12.0`,description:`2022-03-29`,id:`v1-12-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`New payment methods`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added support for Blik`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Dark mode support`}),`\n`,_jsx(_components.li,{children:`Fixes in analytics`}),`\n`,_jsx(_components.li,{children:`Various performance fixes`}),`\n`]})]}),`\n`,_jsx(Update,{label:`v1.11.1`,description:`2022-03-17`,id:`v1-11-1`,children:_jsx(_components.p,{children:`Improvements the Headless Universal Checkout - Beta for cards and APMs (except for Blik, Adyen Dot Pay and Adyen iDeal)`})}),`\n`,_jsxs(Update,{label:`v1.11.0`,description:`2022-03-16`,id:`v1-11-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`New payment methods`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added support for P24 via Mollie`}),`\n`,_jsx(_components.li,{children:`Added support for Giropay via Mollie`}),`\n`,_jsx(_components.li,{children:`Added support for EPS via Mollie`}),`\n`,_jsx(_components.li,{children:`Added support for P24 via PayNL`}),`\n`,_jsx(_components.li,{children:`Added support for EPS via PayNL`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Implements the Headless Universal Checkout - Beta for cards and APMs (except for Blik, Adyen Dot Pay and Adyen iDeal)`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.10.0`,description:`2022-03-04`,id:`v1-10-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Implements the Headless Universal Checkout - Beta for cards and APMs (except for Blik, Adyen Dot Pay and Adyen iDeal`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.9.2`,description:`2022-02-10`,id:`v1-9-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improvements to amount calculation`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.9.1`,description:`2022-02-02`,id:`v1-9-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improvements to payment method redirections`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.9.0`,description:`2022-02-01`,id:`v1-9-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`New languages`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Danish`}),`\n`,_jsx(_components.li,{children:`German`}),`\n`,_jsx(_components.li,{children:`Greek`}),`\n`,_jsx(_components.li,{children:`Spanish`}),`\n`,_jsx(_components.li,{children:`French`}),`\n`,_jsx(_components.li,{children:`Italian`}),`\n`,_jsx(_components.li,{children:`Norwegian`}),`\n`,_jsx(_components.li,{children:`Dutch`}),`\n`,_jsx(_components.li,{children:`Polish`}),`\n`,_jsx(_components.li,{children:`Portuguese`}),`\n`,_jsx(_components.li,{children:`Swedish`}),`\n`,_jsx(_components.li,{children:`Turkish`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improvements to payment method redirections`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.8.0`,description:`2022-01-27`,id:`v1-8-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`New payment methods`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added support for Xfers payment method.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improvements to PayPal tokenization flow`}),`\n`,_jsx(_components.li,{children:`Improvements to payment method redirections`}),`\n`,_jsx(_components.li,{children:`Added autofocus feature in card form`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`isVaulted`}),` flag added to `,_jsx(_components.code,{children:`PaymentMethodToken`})]}),`\n`,_jsx(_components.li,{children:`Performance improvements`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.7.0`,description:`2022-01-11`,id:`v1-7-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improvements to tokenization flow`}),`\n`,_jsx(_components.li,{children:`Improvements to surcharge UI`}),`\n`,_jsx(_components.li,{children:`Support for capturing postal code in card form and observing using client session actions`}),`\n`,_jsx(_components.li,{children:`Support for hiding cardholder name in card form`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.6.0`,description:`2021-12-22`,id:`v1-6-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`New payment methods`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added support for Atome payment method in beta`}),`\n`]})]}),`\n`,_jsx(Update,{label:`v1.5.2`,description:`2021-12-13`,id:`v1-5-2`,children:_jsxs(_components.p,{children:[`Removed deprecated `,_jsx(_components.code,{children:`fetchSavedPaymentInstruments`}),` and `,_jsx(_components.code,{children:`getSavedPaymentMethods`}),` methods`]})}),`\n`,_jsx(Update,{label:`v1.5.1`,description:`2021-12-08`,id:`v1-5-1`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added support for easier integration with Java`}),`\n`,_jsx(_components.li,{children:`Better support for Android S`}),`\n`,_jsx(_components.li,{children:`Minor UI improvements`}),`\n`,_jsx(_components.li,{children:`Surcharge feature now stable`}),`\n`]})}),`\n`,_jsxs(Update,{label:`v1.5.0`,description:`2021-12-02`,id:`v1-5-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Adds beta version of surcharging`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.4.0`,description:`2021-11-30`,id:`v1-4-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`New payment methods: iDEAL, Giropay, Sofort, EPS and Bancontact via Buckaroo`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.3.0`,description:`2021-11-24`,id:`v1-3-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Added further support for SDK customisation when generating client session.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.a,{href:`https://www.notion.so/Settings-Migration-Guide-899484f3dd2149998c2b8f64b00d4f34?pvs=21`,children:`Settings Migration Guide`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`New payment methods: Bancontact \u0026 iDEAL via Mollie and Giropay \u0026 Payconiq via PayNL`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Added loading payment methods screens`}),`\n`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.2.0`,description:`2021-11-17`,id:`v1-2-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added `,_jsx(_components.code,{children:`Primer.cleanup`}),` method. `,_jsx(_components.code,{children:`*This method should be called when disposing the listener in order to free Primer SDK resource.*`})]}),`\n`,_jsx(_components.li,{children:`Added Adyen payment methods (Vipps, Mobilepay, iDEAL, Dotpay)`}),`\n`,_jsx(_components.li,{children:`Additional improvements for PayPal error handling`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.1.2`,description:`2021-11-12`,id:`v1-1-2`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Updated to 3DS `,_jsx(_components.strong,{children:`1.1.0`}),` version`]}),`\n`,_jsx(_components.li,{children:`Stability improvements`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.1.1`,description:`2021-11-04`,id:`v1-1-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(_components.p,{children:`Added further stability improvements for 3DS flow`})]}),`\n`,_jsxs(Update,{label:`v1.1.0`,description:`2021-11-03`,id:`v1-1-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improved 3DS handling (VAULT/CHECKOUT)`}),`\n`,_jsxs(_components.li,{children:[`Deprecated `,_jsx(_components.code,{children:`PrimerSettings.order`}),` and `,_jsx(_components.code,{children:`PrimerSettings.customer`}),` in favour of configuration set through client session creation`]}),`\n`,_jsx(_components.li,{children:`Added Adyen AMPs (Giropay, Twint, Trustly, Sofort, Alipay)`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.0.1`,description:`2021-10-12`,id:`v1-0-1`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`fetchSavedPaymentInstruments`}),` method has been `,_jsx(_components.code,{children:`deprecated`})]}),`\n`,_jsx(_components.li,{children:`Improved card form layout and default theming.`}),`\n`,_jsx(_components.li,{children:`Enabled 3DS testing in all environments.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.0.0`,description:`2021-09-28`,id:`v1-0-0`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Complete redesign of `,_jsx(_components.code,{children:`PrimerTheme`}),`. `,_jsx(_components.code,{children:`PrimerTheme.create()`}),` is now deprecated. Use `,_jsx(_components.code,{children:`PrimerTheme.build()`}),` or resource files to create custom themes.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Primer`}),` singleton object has been redesigned with a new initialisation flow. Please refer to the `,_jsx(_components.a,{href:`https://www.notion.so/Quick-Start-Universal-Checkout-11aa02b96f9645c6ac587877a0798af2?pvs=21`,children:`quick start guide`}),` for further info. `,_jsx(_components.code,{children:`Primer.initialize()`}),` is now deprecated.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.32`,description:`2021-10-12`,id:`v1-0-0-beta-32`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Improved `,_jsx(_components.code,{children:`Apaya`}),` redirect url schema logic.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.31`,description:`2021-09-22`,id:`v1-0-0-beta-31`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added support to pre-fill `,_jsx(_components.code,{children:`Apaya`}),` phone number. Please see `,_jsx(_components.a,{href:`https://www.notion.so/Apaya-5c864da879334584906c4ff12749daa8?pvs=21`,children:`documentation`}),` for integration steps.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.30`,description:`2021-09-06`,id:`v1-0-0-beta-30`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Added support for `,_jsx(_components.code,{children:`Apaya`}),` payment method. Please see `,_jsx(_components.a,{href:`https://www.notion.so/Apaya-5c864da879334584906c4ff12749daa8?pvs=21`,children:`documentation`}),` for integration steps.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.29`,description:`2021-08-20`,id:`v1-0-0-beta-29`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Added beta support for 3DS dependency.`}),`\n`,_jsx(_components.li,{children:`Stability improvements \u0026 networking fixes.`}),`\n`]})]}),`\n`,_jsx(Update,{label:`v1.0.0-beta.28`,description:`2021-08-20`,id:`v1-0-0-beta-28`,children:_jsx(Heading,{level:`2`,id:`ignore`,children:`(ignore)`})}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.27`,description:`2021-07-24`,id:`v1-0-0-beta-27`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Fixes issue with card number validation for American Express.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.26`,description:`2021-06-29`,id:`v1-0-0-beta-26`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Issue when pressing Android back button after displaying payment flow with `,_jsx(_components.code,{children:`doNotShowUi = true`}),` addressed.`]}),`\n`,_jsx(_components.li,{children:`Improvements to Klarna payment flow error handling \u0026 stability.`}),`\n`,_jsxs(_components.li,{children:[`Optional `,_jsx(_components.code,{children:`completionHandler`}),` added to `,_jsx(_components.code,{children:`TokenizationSuccess`}),` event. Call this to complete flow with error/success screen after completing payment action.`]}),`\n`]})]}),`\n`,_jsx(Update,{label:`v1.0.0-beta.25`,description:`2021-06-29`,id:`v1-0-0-beta-25`,children:_jsx(Heading,{level:`2`,id:`ignore-2`,children:`(ignore)`})}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.24`,description:`2021-06-21`,id:`v1-0-0-beta-24`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The Klarna flow has been updated so that all user cancellations are captured by the event listener. Refer to `,_jsx(_components.code,{children:`CheckoutEvent.Exit`}),` \u0026 its `,_jsx(_components.code,{children:`CheckoutExitReason`}),` parameter to listen to the following events: `,_jsx(_components.code,{children:`DISMISSED_BY_USER`}),` or `,_jsx(_components.code,{children:`ERROR`}),` (error thrown by Klarna).`]}),`\n`,_jsxs(_components.li,{children:[`You can now pass a flag to clear all listeners when dismissing the Primer view with `,_jsx(_components.code,{children:`UniversalCheckout.dismiss(clearListeners = true)`}),`. This is the recommended way to complete the session before navigating to a different activity/fragment.`]}),`\n`]})]}),`\n`,_jsxs(Update,{label:`1.0.0-beta.23`,description:`2021-06-14`,id:`1-0-0-beta-23`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Bug fixes for PayPal flows.`}),`\n`,_jsxs(_components.li,{children:[`Option to pass in flag `,_jsx(_components.code,{children:`clearAllListeners`}),` when calling `,_jsx(_components.code,{children:`showVault()`}),` / `,_jsx(_components.code,{children:`showCheckout()`}),`. Set this flag as `,_jsx(_components.code,{children:`true`}),`, if you need to call `,_jsx(_components.code,{children:`UniversalCheckout.initialise()`}),` more than once.`]}),`\n`,_jsx(_components.li,{children:`Fixes bug where main universal checkout would display checkout options incorrectly.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.22`,description:`2021-05-31`,id:`v1-0-0-beta-22`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Running the SDK in release mode with app shrinking `,_jsx(_components.code,{children:`minifyEnabled = true`}),` caused the app to crash. This has been addressed so that the SDK will run with all forms of app shrinking.`]}),`\n`,_jsx(_components.li,{children:`The Klarna web view flow for Sweden is now configured to automatically redirect to the Mobile BankID app when using direct debit.`}),`\n`,_jsxs(_components.li,{children:[`When creating in the `,_jsx(_components.code,{children:`Klarna`}),` object it is now possible to set a `,_jsx(_components.code,{children:`webViewTitle`}),` for the Klarna web view’s toolbar.`]}),`\n`,_jsx(_components.li,{children:`Improvements to error handling \u0026 SDK stability.`}),`\n`]})]}),`\n`,_jsx(Update,{label:`v1.0.0-beta.21`,description:`2021-05-31`,id:`v1-0-0-beta-21`,children:_jsx(Heading,{level:`2`,id:`ignore-3`,children:`(ignore)`})}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.20`,description:`2021-05-27`,id:`v1-0-0-beta-20`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Improvements to app links and schemes with new `,_jsx(_components.code,{children:`webBrowserRedirectScheme`}),` param to pass in custom app link scheme when calling the SDK with `,_jsx(_components.code,{children:`showVault()`}),`/`,_jsx(_components.code,{children:`showCheckout()`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`New option of `,_jsx(_components.code,{children:`preferWebview`}),` for showing Klarna checkout flow in an integrated web view instead of a separate browser window.`]}),`\n`,_jsxs(_components.li,{children:[`new option to call `,_jsx(_components.code,{children:`UniversalCheckout.showError()`}),` when wishing to display the default SDK error view.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`locale`}),` is now optionally set in `,_jsx(_components.code,{children:`UniversalCheckout.initialize()`}),` and is used solely to determine language and localisation.`]}),`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.code,{children:`countryCode`}),` parameter has been added to `,_jsx(_components.code,{children:`showVault()`}),`/`,_jsx(_components.code,{children:`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 `,_jsx(_components.code,{children:`countryCode`}),` value is ignored.`]}),`\n`,_jsx(_components.li,{children:`Minor bug fixes \u0026 improvements to stability and UX.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.19`,description:`2021-05-18`,id:`v1-0-0-beta-19`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✨ Improvements`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Major improvements to UI for checkout view and managing saved payments.`}),`\n`,_jsx(_components.li,{children:`1-click checkout enabled in default (universal) checkout view.`}),`\n`,_jsx(_components.li,{children:`Improved success screens with some customisability.`}),`\n`,_jsx(_components.li,{children:`Delete/select saved payment methods enhanced.`}),`\n`,_jsx(_components.li,{children:`Overall improvements to stability and UX.`}),`\n`,_jsx(_components.li,{children:`No updates to Klarna \u0026 direct debit flows.`}),`\n`]})]}),`\n`,_jsxs(Update,{label:`v1.0.0-beta.16-18`,description:`2021-05-10`,id:`v1-0-0-beta-16-18`,children:[_jsx(_components.p,{children:`n/a (testing Maven Central)`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`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 `,_jsx(_components.a,{href:`/connections/payment-methods/ach/stripe`,children:`consult the direct integration guide`}),`.`]}),`\n`]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Android SDK","sidebarTitle":"Android SDK","icon":"android","rss":true,"description":null,"href":"/changelogs/android-sdk"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"v2.54.0","slug":"v2-54-0","depth":1,"children":[]},{"title":"v2.53.1","slug":"v2-53-1","depth":1,"children":[]},{"title":"v2.53.0","slug":"v2-53-0","depth":1,"children":[]},{"title":"v2.52.0","slug":"v2-52-0","depth":1,"children":[]},{"title":"v2.51.0","slug":"v2-51-0","depth":1,"children":[]},{"title":"v2.50.2","slug":"v2-50-2","depth":1,"children":[]},{"title":"v2.50.1","slug":"v2-50-1","depth":1,"children":[]},{"title":"v2.50.0","slug":"v2-50-0","depth":1,"children":[]},{"title":"v2.49.0","slug":"v2-49-0","depth":1,"children":[]},{"title":"v2.48.0","slug":"v2-48-0","depth":1,"children":[]},{"title":"v2.47.1","slug":"v2-47-1","depth":1,"children":[]},{"title":"v2.47.0","slug":"v2-47-0","depth":1,"children":[]},{"title":"v2.46.0","slug":"v2-46-0","depth":1,"children":[]},{"title":"v2.45.1","slug":"v2-45-1","depth":1,"children":[]},{"title":"v2.45.0","slug":"v2-45-0","depth":1,"children":[]},{"title":"v2.44.1","slug":"v2-44-1","depth":1,"children":[]},{"title":"v2.44.0","slug":"v2-44-0","depth":1,"children":[]},{"title":"v2.43.0","slug":"v2-43-0","depth":1,"children":[]},{"title":"v2.42.2","slug":"v2-42-2","depth":1,"children":[]},{"title":"v2.42.1","slug":"v2-42-1","depth":1,"children":[]},{"title":"v2.42.0","slug":"v2-42-0","depth":1,"children":[]},{"title":"v2.41.0","slug":"v2-41-0","depth":1,"children":[]},{"title":"v2.40.1","slug":"v2-40-1","depth":1,"children":[]},{"title":"v2.40.0","slug":"v2-40-0","depth":1,"children":[]},{"title":"v2.39.0","slug":"v2-39-0","depth":1,"children":[]},{"title":"v2.38.3","slug":"v2-38-3","depth":1,"children":[]},{"title":"v2.38.2","slug":"v2-38-2","depth":1,"children":[]},{"title":"v2.38.1","slug":"v2-38-1","depth":1,"children":[]},{"title":"v2.38.0","slug":"v2-38-0","depth":1,"children":[]},{"title":"v2.37.2","slug":"v2-37-2","depth":1,"children":[]},{"title":"v2.37.1","slug":"v2-37-1","depth":1,"children":[]},{"title":"v2.37.0","slug":"v2-37-0","depth":1,"children":[]},{"title":"v2.36.3","slug":"v2-36-3","depth":1,"children":[]},{"title":"v2.36.2","slug":"v2-36-2","depth":1,"children":[]},{"title":"v2.36.1","slug":"v2-36-1","depth":1,"children":[]},{"title":"v2.36.0","slug":"v2-36-0","depth":1,"children":[]},{"title":"v2.35.0","slug":"v2-35-0","depth":1,"children":[]},{"title":"v2.34.0","slug":"v2-34-0","depth":1,"children":[]},{"title":"v2.33.1","slug":"v2-33-1","depth":1,"children":[]},{"title":"v2.33.0","slug":"v2-33-0","depth":1,"children":[]},{"title":"v2.32.4","slug":"v2-32-4","depth":1,"children":[]},{"title":"v2.32.3","slug":"v2-32-3","depth":1,"children":[]},{"title":"v2.32.2","slug":"v2-32-2","depth":1,"children":[]},{"title":"v2.32.1","slug":"v2-32-1","depth":1,"children":[]},{"title":"v2.32.0","slug":"v2-32-0","depth":1,"children":[]},{"title":"v2.31.0","slug":"v2-31-0","depth":1,"children":[]},{"title":"v2.30.0","slug":"v2-30-0","depth":1,"children":[]},{"title":"v2.29.0","slug":"v2-29-0","depth":1,"children":[]},{"title":"v2.28.1","slug":"v2-28-1","depth":1,"children":[]},{"title":"v2.27.6","slug":"v2-27-6","depth":1,"children":[]},{"title":"v2.27.5","slug":"v2-27-5","depth":1,"children":[]},{"title":"v2.27.4","slug":"v2-27-4","depth":1,"children":[]},{"title":"v2.27.2","slug":"v2-27-2","depth":1,"children":[]},{"title":"v2.27.1","slug":"v2-27-1","depth":1,"children":[]},{"title":"v2.27.0","slug":"v2-27-0","depth":1,"children":[]},{"title":"v2.26.1","slug":"v2-26-1","depth":1,"children":[]},{"title":"v2.26.0","slug":"v2-26-0","depth":1,"children":[]},{"title":"v2.25.0","slug":"v2-25-0","depth":1,"children":[]},{"title":"v2.24.0","slug":"v2-24-0","depth":1,"children":[]},{"title":"v2.23.0","slug":"v2-23-0","depth":1,"children":[]},{"title":"v2.22.0","slug":"v2-22-0","depth":1,"children":[]},{"title":"v2.21.0","slug":"v2-21-0","depth":1,"children":[]},{"title":"v2.20.0","slug":"v2-20-0","depth":1,"children":[]},{"title":"v2.19.2","slug":"v2-19-2","depth":1,"children":[]},{"title":"v2.19.1","slug":"v2-19-1","depth":1,"children":[]},{"title":"v2.19.0","slug":"v2-19-0","depth":1,"children":[]},{"title":"v2.19.0-nolpay.2","slug":"v2-19-0-nolpay-2","depth":1,"children":[]},{"title":"v2.19.0-nolpay.1","slug":"v2-19-0-nolpay-1","depth":1,"children":[]},{"title":"v2.18.0","slug":"v2-18-0","depth":1,"children":[]},{"title":"v2.17.3","slug":"v2-17-3","depth":1,"children":[]},{"title":"v2.17.2","slug":"v2-17-2","depth":1,"children":[]},{"title":"v2.17.1","slug":"v2-17-1","depth":1,"children":[]},{"title":"v2.17.0","slug":"v2-17-0","depth":1,"children":[]},{"title":"v2.17.0-RC11","slug":"v2-17-0-rc11","depth":1,"children":[]},{"title":"v2.17.0-RC10","slug":"v2-17-0-rc10","depth":1,"children":[]},{"title":"v2.17.0-RC9","slug":"v2-17-0-rc9","depth":1,"children":[]},{"title":"v2.17.0-RC8","slug":"v2-17-0-rc8","depth":1,"children":[]},{"title":"v2.17.0-RC7","slug":"v2-17-0-rc7","depth":1,"children":[]},{"title":"v2.17.0-RC6","slug":"v2-17-0-rc6","depth":1,"children":[]},{"title":"v2.17.0-RC5","slug":"v2-17-0-rc5","depth":1,"children":[]},{"title":"v2.17.0-RC4","slug":"v2-17-0-rc4","depth":1,"children":[]},{"title":"v2.17.0-RC3","slug":"v2-17-0-rc3","depth":1,"children":[]},{"title":"v2.16.6","slug":"v2-16-6","depth":1,"children":[]},{"title":"v2.16.5","slug":"v2-16-5","depth":1,"children":[]},{"title":"v2.17.0-RC2","slug":"v2-17-0-rc2","depth":1,"children":[]},{"title":"v2.16.4","slug":"v2-16-4","depth":1,"children":[]},{"title":"v2.16.3","slug":"v2-16-3","depth":1,"children":[]},{"title":"v2.17.0-RC1","slug":"v2-17-0-rc1","depth":1,"children":[]},{"title":"v2.16.2","slug":"v2-16-2","depth":1,"children":[]},{"title":"v2.16.1","slug":"v2-16-1","depth":1,"children":[]},{"title":"v2.16.0","slug":"v2-16-0","depth":1,"children":[]},{"title":"v2.15.1","slug":"v2-15-1","depth":1,"children":[]},{"title":"v2.15.0","slug":"v2-15-0","depth":1,"children":[]},{"title":"v2.14.1","slug":"v2-14-1","depth":1,"children":[]},{"title":"v2.14.0","slug":"v2-14-0","depth":1,"children":[]},{"title":"v2.13.1","slug":"v2-13-1","depth":1,"children":[]},{"title":"v2.12.1","slug":"v2-12-1","depth":1,"children":[]},{"title":"v2.12.0","slug":"v2-12-0","depth":1,"children":[]},{"title":"v2.10.1","slug":"v2-10-1","depth":1,"children":[]},{"title":"v2.10.0","slug":"v2-10-0","depth":1,"children":[]},{"title":"v2.9.1","slug":"v2-9-1","depth":1,"children":[]},{"title":"v2.8.1","slug":"v2-8-1","depth":1,"children":[]},{"title":"v2.8.0","slug":"v2-8-0","depth":1,"children":[]},{"title":"v2.7.0","slug":"v2-7-0","depth":1,"children":[]},{"title":"v1.16.0","slug":"v1-16-0","depth":1,"children":[]},{"title":"v2.6.0","slug":"v2-6-0","depth":1,"children":[]},{"title":"2.5.0","slug":"2-5-0","depth":1,"children":[]},{"title":"v2.4.0","slug":"v2-4-0","depth":1,"children":[]},{"title":"v2.3.0","slug":"v2-3-0","depth":1,"children":[]},{"title":"v2.2.1","slug":"v2-2-1","depth":1,"children":[]},{"title":"v2.2.0","slug":"v2-2-0","depth":1,"children":[]},{"title":"v2.1.0","slug":"v2-1-0","depth":1,"children":[]},{"title":"v2.0.1","slug":"v2-0-1","depth":1,"children":[]},{"title":"v2.0.0","slug":"v2-0-0","depth":1,"children":[]},{"title":"v1.15.0","slug":"v1-15-0","depth":1,"children":[]},{"title":"v1.14.0","slug":"v1-14-0","depth":1,"children":[]},{"title":"v1.12.1","slug":"v1-12-1","depth":1,"children":[]},{"title":"v1.12.0","slug":"v1-12-0","depth":1,"children":[]},{"title":"v1.11.1","slug":"v1-11-1","depth":1,"children":[]},{"title":"v1.11.0","slug":"v1-11-0","depth":1,"children":[]},{"title":"v1.10.0","slug":"v1-10-0","depth":1,"children":[]},{"title":"v1.9.2","slug":"v1-9-2","depth":1,"children":[]},{"title":"v1.9.1","slug":"v1-9-1","depth":1,"children":[]},{"title":"v1.9.0","slug":"v1-9-0","depth":1,"children":[]},{"title":"v1.8.0","slug":"v1-8-0","depth":1,"children":[]},{"title":"v1.7.0","slug":"v1-7-0","depth":1,"children":[]},{"title":"v1.6.0","slug":"v1-6-0","depth":1,"children":[]},{"title":"v1.5.2","slug":"v1-5-2","depth":1,"children":[]},{"title":"v1.5.1","slug":"v1-5-1","depth":1,"children":[]},{"title":"v1.5.0","slug":"v1-5-0","depth":1,"children":[]},{"title":"v1.4.0","slug":"v1-4-0","depth":1,"children":[]},{"title":"v1.3.0","slug":"v1-3-0","depth":1,"children":[]},{"title":"v1.2.0","slug":"v1-2-0","depth":1,"children":[]},{"title":"v1.1.2","slug":"v1-1-2","depth":1,"children":[]},{"title":"v1.1.1","slug":"v1-1-1","depth":1,"children":[]},{"title":"v1.1.0","slug":"v1-1-0","depth":1,"children":[]},{"title":"v1.0.1","slug":"v1-0-1","depth":1,"children":[]},{"title":"v1.0.0","slug":"v1-0-0","depth":1,"children":[]},{"title":"v1.0.0-beta.32","slug":"v1-0-0-beta-32","depth":1,"children":[]},{"title":"v1.0.0-beta.31","slug":"v1-0-0-beta-31","depth":1,"children":[]},{"title":"v1.0.0-beta.30","slug":"v1-0-0-beta-30","depth":1,"children":[]},{"title":"v1.0.0-beta.29","slug":"v1-0-0-beta-29","depth":1,"children":[]},{"title":"v1.0.0-beta.28","slug":"v1-0-0-beta-28","depth":1,"children":[]},{"title":"v1.0.0-beta.27","slug":"v1-0-0-beta-27","depth":1,"children":[]},{"title":"v1.0.0-beta.26","slug":"v1-0-0-beta-26","depth":1,"children":[]},{"title":"v1.0.0-beta.25","slug":"v1-0-0-beta-25","depth":1,"children":[]},{"title":"v1.0.0-beta.24","slug":"v1-0-0-beta-24","depth":1,"children":[]},{"title":"1.0.0-beta.23","slug":"1-0-0-beta-23","depth":1,"children":[]},{"title":"v1.0.0-beta.22","slug":"v1-0-0-beta-22","depth":1,"children":[]},{"title":"v1.0.0-beta.21","slug":"v1-0-0-beta-21","depth":1,"children":[]},{"title":"v1.0.0-beta.20","slug":"v1-0-0-beta-20","depth":1,"children":[]},{"title":"v1.0.0-beta.19","slug":"v1-0-0-beta-19","depth":1,"children":[]},{"title":"v1.0.0-beta.16-18","slug":"v1-0-0-beta-16-18","depth":1,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/primer-cc826789/f9b3e76a02542eba/js/codeblocklayout.js"],"subdomain":"primer-cc826789","siteName":"Primer","title":"Android SDK - Primer","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T15:07:00.676Z","originalFileLocation":"changelogs/android-sdk.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Primer\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Android SDK - Primer\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Primer\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://primer.io/docs/changelogs/android-sdk\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://primer-cc826789.mintlify.site/docs/_mintlify/api/og/v2?division=Mobile\u0026amp;title=Android+SDK\u0026amp;theme=115d40077fafa3c430405b4c\u0026amp;signature=ef55de44e897afe40dcdaf559f302ea8a1b117c7c49078d12d854210438882db\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Android SDK - Primer\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://primer-cc826789.mintlify.site/docs/_mintlify/api/og/v2?division=Mobile\u0026amp;title=Android+SDK\u0026amp;theme=115d40077fafa3c430405b4c\u0026amp;signature=ef55de44e897afe40dcdaf559f302ea8a1b117c7c49078d12d854210438882db\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/primer-cc826789/9meORDX7HOYVFtwE/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Primer\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF7C4F\">\u003clink data-mint-head rel=\"canonical\" href=\"https://primer.io/docs/changelogs/android-sdk\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/changelogs/android-sdk.md\">\u003clink data-mint-head rel=\"alternate\" type=\"application/rss+xml\" href=\"https://primer.io/docs/changelogs/android-sdk/rss.xml\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://primer.io/#organization\",\"name\":\"Primer\",\"url\":\"https://primer.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/primer-cc826789/fMxS38v0lFyMKyzD/logo/primer_logo.svg?fit=max\u0026auto=format\u0026n=fMxS38v0lFyMKyzD\u0026q=85\u0026s=0010b4ac2a8a90e656efd18fb57c9366\"}},{\"@type\":\"WebSite\",\"@id\":\"https://primer.io/docs#website\",\"name\":\"Primer\",\"url\":\"https://primer.io/docs\",\"publisher\":{\"@id\":\"https://primer.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://primer.io/docs/changelogs/android-sdk#webpage\",\"url\":\"https://primer.io/docs/changelogs/android-sdk\",\"name\":\"Android SDK\",\"dateModified\":\"2026-11-06T15:07:00.676Z\",\"isPartOf\":{\"@id\":\"https://primer.io/docs#website\"},\"breadcrumb\":{\"@id\":\"https://primer.io/docs/changelogs/android-sdk#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://primer.io/docs/changelogs/android-sdk#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"SDK changelogs\",\"item\":\"https://primer.io/docs/changelogs/web\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mobile\",\"item\":\"https://primer.io/docs/changelogs/ios-sdk\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Android SDK\",\"item\":\"https://primer.io/docs/changelogs/android-sdk\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://primer.io/docs/changelogs/android-sdk#article\",\"headline\":\"Android SDK\",\"name\":\"Android SDK\",\"url\":\"https://primer.io/docs/changelogs/android-sdk\",\"mainEntityOfPage\":{\"@id\":\"https://primer.io/docs/changelogs/android-sdk#webpage\"},\"dateModified\":\"2026-11-06T15:07:00.676Z\",\"publisher\":{\"@id\":\"https://primer.io/#organization\"},\"isPartOf\":{\"@id\":\"https://primer.io/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Primer\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Primer","nav":{"global":null,"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/home"}]},{"tab":"Documentation","pages":[{"title":"Documentation","href":"/get-started/overview"}]},{"tab":"API Reference","versions":[{"version":"v2.4","tag":"GA","anchors":[{"anchor":"Getting started","icon":"rocket","groups":[{"group":"Getting started","pages":[{"title":"Overview","href":"/api-reference/get-started/v2.4/overview"},{"title":"API lifecycle","sidebarTitle":"API lifecycle","href":"/api-reference/get-started/api-lifecycle"},{"title":"Authentication","sidebarTitle":"Authentication","href":"/api-reference/get-started/authentication"},{"title":"API Responses","sidebarTitle":"API responses","href":"/api-reference/get-started/api-responses"},{"title":"Idempotency Key","sidebarTitle":"Idempotency key","href":"/api-reference/get-started/idempotency-key"},{"title":"Request requirements","sidebarTitle":"Request requirements","href":"/api-reference/get-started/request-requirements"},{"title":"Configure Webhooks","sidebarTitle":"Configure webhooks","href":"/api-reference/get-started/configure-webhooks"}]}]},{"anchor":"API reference","icon":"book-open","groups":[{"group":"API reference","pages":[{"group":"Client Session API","pages":[{"title":"Retrieve a client session","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml get /client-session","href":"/api-reference/v2.4/api-reference/client-session-api/retrieve-a-client-session"},{"title":"Create a client session","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /client-session","href":"/api-reference/v2.4/api-reference/client-session-api/create-a-client-session"},{"title":"Update client session","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml patch /client-session","href":"/api-reference/v2.4/api-reference/client-session-api/update-client-session"}]},{"group":"Payments API","pages":[{"title":"Search \u0026 list payments","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml get /payments","href":"/api-reference/v2.4/api-reference/payments-api/search-\u0026-list-payments"},{"title":"Create a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments","href":"/api-reference/v2.4/api-reference/payments-api/create-a-payment"},{"title":"Authorize a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/authorize","href":"/api-reference/v2.4/api-reference/payments-api/authorize-a-payment"},{"title":"Capture a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/capture","href":"/api-reference/v2.4/api-reference/payments-api/capture-a-payment"},{"title":"Cancel a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/cancel","href":"/api-reference/v2.4/api-reference/payments-api/cancel-a-payment"},{"title":"Refund a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/refund","href":"/api-reference/v2.4/api-reference/payments-api/refund-a-payment"},{"title":"Resume a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/resume","href":"/api-reference/v2.4/api-reference/payments-api/resume-a-payment"},{"title":"Adjust authorized amount","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payments/{id}/adjust-authorization","href":"/api-reference/v2.4/api-reference/payments-api/adjust-authorized-amount"},{"title":"Get a payment","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml get /payments/{id}","href":"/api-reference/v2.4/api-reference/payments-api/get-a-payment"}]},{"group":"Payment Attempts API","pages":[{"title":"Approve a payment attempt","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payment-attempts/{id}/approve","href":"/api-reference/v2.4/api-reference/payment-attempts-api/approve-a-payment-attempt"},{"title":"Abort a payment attempt","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payment-attempts/{id}/abort","href":"/api-reference/v2.4/api-reference/payment-attempts-api/abort-a-payment-attempt"},{"title":"Resolve a payment attempt","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payment-attempts/{id}/resolve","href":"/api-reference/v2.4/api-reference/payment-attempts-api/resolve-a-payment-attempt"}]},{"group":"Payment Methods API","pages":[{"title":"Save a payment method token","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payment-instruments/{paymentMethodToken}/vault","href":"/api-reference/v2.4/api-reference/payment-methods-api/save-a-payment-method-token"},{"title":"List saved payment methods","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml get /payment-instruments","href":"/api-reference/v2.4/api-reference/payment-methods-api/list-saved-payment-methods"},{"title":"Delete a saved payment method","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml delete /payment-instruments/{paymentMethodToken}","href":"/api-reference/v2.4/api-reference/payment-methods-api/delete-a-saved-payment-method"},{"title":"Update the default saved payment method","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /payment-instruments/{paymentMethodToken}/default","href":"/api-reference/v2.4/api-reference/payment-methods-api/update-the-default-saved-payment-method"}]},{"group":"Primer Proxy API","pages":[{"title":"Forward a request to a PSP, substituting vaulted card data","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml get /{proxyPath}","href":"/api-reference/v2.4/api-reference/primer-proxy-api/forward-a-request-to-a-psp-substituting-vaulted-card-data"},{"title":"Forward a request to a PSP, substituting vaulted card data","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml put /{proxyPath}","href":"/api-reference/v2.4/api-reference/primer-proxy-api/forward-a-request-to-a-psp-substituting-vaulted-card-data-1"},{"title":"Forward a request to a PSP, substituting vaulted card data","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml post /{proxyPath}","href":"/api-reference/v2.4/api-reference/primer-proxy-api/forward-a-request-to-a-psp-substituting-vaulted-card-data-2"},{"title":"Forward a request to a PSP, substituting vaulted card data","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml delete /{proxyPath}","href":"/api-reference/v2.4/api-reference/primer-proxy-api/forward-a-request-to-a-psp-substituting-vaulted-card-data-3"},{"title":"Forward a request to a PSP, substituting vaulted card data","deprecated":null,"version":null,"openapi":"https://api.schemas.primer.io/api-reference/v2.4/openapi.yaml patch /{proxyPath}","href":"/api-reference/v2.4/api-reference/primer-proxy-api/forward-a-request-to-a-psp-substituting-vaulted-card-data-4"}]}]}]},{"anchor":"Webhooks","icon":"webhook","groups":[{"group":"Webhooks","pages":[{"group":"Payment Webhooks","pages":[{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /payment-status","playground":"none","title":"Payment Status Update","href":"/api-reference/endpoints/v2.4/payment-webhooks/payment-status-update"},{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /payment-refund","playground":"none","title":"Payment Refund","href":"/api-reference/endpoints/v2.4/payment-webhooks/payment-refund"},{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /payment-operation-failure","playground":"none","title":"Payment Operation Failure","href":"/api-reference/endpoints/v2.4/payment-webhooks/payment-operation-failure"}]},{"group":"Workflow Webhooks","pages":[{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /workflow-run-failed","playground":"none","title":"Workflow Run Failed","href":"/api-reference/endpoints/v2.4/workflow-webhooks/workflow-run-failed"}]},{"group":"Disputes \u0026 Chargebacks Webhooks","pages":[{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /dispute-opened","playground":"none","title":"Dispute Open","href":"/api-reference/endpoints/v2.4/dispute-and-chargebacks-webhooks/dispute-open"},{"openapi":"https://api.schemas.primer.io/api-reference/v2.4/webhooks.yaml post /dispute-status","playground":"none","title":"Dispute Status","href":"/api-reference/endpoints/v2.4/dispute-and-chargebacks-webhooks/dispute-status"}]}]}]},{"anchor":"Changelogs","icon":"lines-leaning","pages":[{"title":"Changelog","url":"/changelogs/api-changelog","href":"/api-reference/changelog"}]}]},{"version":"v2.3","tag":"Supported","pages":[{"title":"v2.3","href":"/api-reference/get-started/v2.3/overview"}]},{"version":"v2.2","tag":"Supported","pages":[{"title":"v2.2","href":"/api-reference/get-started/v2.2/overview"}]},{"version":"v2.1","tag":"Supported","pages":[{"title":"v2.1","href":"/api-reference/get-started/v2.1/overview"}]},{"version":"v2","tag":"Supported","pages":[{"title":"v2","href":"/api-reference/get-started/v2/overview"}]}]},{"tab":"SDK Reference","anchors":[{"anchor":"Web","icon":"globe","groups":[{"group":"Web","pages":[{"title":"SDK reference overview","sidebarTitle":"Overview","href":"/sdk/primer-checkout-web/sdk-reference-overview"},{"title":"SDK options reference","sidebarTitle":"SDK options","href":"/sdk/primer-checkout-web/sdk-options-reference"},{"title":"Styling variables","href":"/sdk/primer-checkout-web/styling-variables"},{"title":"Events reference","sidebarTitle":"Events reference","href":"/sdk/primer-checkout-web/events-reference"},{"title":"Apple Pay options","sidebarTitle":"Apple Pay","href":"/sdk/primer-checkout-web/apple-pay"},{"title":"PayPal options","sidebarTitle":"PayPal","href":"/sdk/primer-checkout-web/paypal"},{"title":"Google Pay options","sidebarTitle":"Google Pay","href":"/sdk/primer-checkout-web/google-pay"},{"title":"Klarna options","sidebarTitle":"Klarna","href":"/sdk/primer-checkout-web/klarna"},{"title":"Klarna via Adyen options","sidebarTitle":"Klarna via Adyen","href":"/sdk/primer-checkout-web/adyen-klarna"},{"group":"Components","pages":[{"title":"Checkout component","sidebarTitle":"\u003cprimer-checkout>","href":"/sdk/primer-checkout-web/components/primer-checkout"},{"title":"Provider component","sidebarTitle":"\u003cprimer-provider>","href":"/sdk/primer-checkout-web/components/primer-provider"},{"title":"Main component","sidebarTitle":"\u003cprimer-main>","href":"/sdk/primer-checkout-web/components/primer-main"},{"title":"Payment Method Component","sidebarTitle":"\u003cprimer-payment-method>","href":"/sdk/primer-checkout-web/components/primer-payment-method"},{"title":"Payment Method Container","sidebarTitle":"\u003cprimer-payment-method-container>","href":"/sdk/primer-checkout-web/components/primer-payment-method-container"},{"group":"Card Form Components","pages":[{"title":"Card form","sidebarTitle":"\u003cprimer-card-form>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-card-form"},{"title":"Billing Address","sidebarTitle":"\u003cprimer-billing-address>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-billing-address"},{"title":"Card Number Input","sidebarTitle":"\u003cprimer-input-card-number>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-card-number"},{"title":"CVV Input","sidebarTitle":"\u003cprimer-input-cvv>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-cvv"},{"title":"Card Expiry Input","sidebarTitle":"\u003cprimer-input-card-expiry>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-card-expiry"},{"title":"Cardholder Name Input","sidebarTitle":"\u003cprimer-input-card-holder-name>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-card-holder-name"},{"title":"Card Form Submit Button","sidebarTitle":"\u003cprimer-card-form-submit>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-card-form-submit"},{"title":"Input Label","sidebarTitle":"\u003cprimer-input-label>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-label"},{"title":"Input Wrapper","sidebarTitle":"\u003cprimer-input-wrapper>","href":"/sdk/primer-checkout-web/components/primer-card-form/primer-input-wrapper"}]},{"title":"Vault Manager Component","sidebarTitle":"\u003cprimer-vault-manager>","href":"/sdk/primer-checkout-web/components/primer-vault-manager"},{"title":"Show Other Payments Component","sidebarTitle":"\u003cprimer-show-other-payments>","href":"/sdk/primer-checkout-web/components/primer-show-other-payments"},{"title":"Error Message Container","sidebarTitle":"\u003cprimer-error-message-container>","href":"/sdk/primer-checkout-web/components/primer-error-message-container"}]}]}]},{"anchor":"iOS","icon":"apple","versions":[{"version":"3.0.0-beta","groups":[{"group":"iOS","pages":[{"title":"Installation","sidebarTitle":"Installation","href":"/sdk/ios-checkout/v3.0.0-beta/installation"},{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","href":"/sdk/ios-checkout/v3.0.0-beta/troubleshooting"},{"group":"Guides","pages":[{"title":"Handle the payment result","sidebarTitle":"Handle payment result","href":"/sdk/ios-checkout/v3.0.0-beta/guides/handle-payment-result"},{"title":"Apple Pay integration","sidebarTitle":"Apple Pay","href":"/sdk/ios-checkout/v3.0.0-beta/guides/apple-pay-integration"},{"title":"UIKit integration","sidebarTitle":"UIKit integration","href":"/sdk/ios-checkout/v3.0.0-beta/guides/uikit-integration"},{"title":"SwiftUI navigation","sidebarTitle":"SwiftUI navigation","href":"/sdk/ios-checkout/v3.0.0-beta/guides/swiftui-navigation"}]},{"group":"API Reference","pages":[{"title":"API Reference","sidebarTitle":"API Reference","href":"/sdk/ios-checkout/v3.0.0-beta/api/overview"},{"group":"Core API","pages":[{"title":"PrimerCheckout","sidebarTitle":"PrimerCheckout","href":"/sdk/ios-checkout/v3.0.0-beta/api/primer-checkout"},{"title":"PrimerCheckoutSession","sidebarTitle":"PrimerCheckoutSession","href":"/sdk/ios-checkout/v3.0.0-beta/api/primer-checkout-session"},{"title":"PrimerCheckoutPresenter","sidebarTitle":"PrimerCheckoutPresenter","href":"/sdk/ios-checkout/v3.0.0-beta/api/primer-checkout-presenter"},{"title":"PrimerCheckoutState","sidebarTitle":"PrimerCheckoutState","href":"/sdk/ios-checkout/v3.0.0-beta/api/primer-checkout-state"}]},{"group":"Card Form","pages":[{"title":"PrimerCardForm","sidebarTitle":"PrimerCardForm","href":"/sdk/ios-checkout/v3.0.0-beta/api/card-form/primer-card-form"},{"title":"PrimerCardFormSession","sidebarTitle":"PrimerCardFormSession","href":"/sdk/ios-checkout/v3.0.0-beta/api/card-form/card-form-session"},{"title":"CardFormDefaults","sidebarTitle":"CardFormDefaults","href":"/sdk/ios-checkout/v3.0.0-beta/api/card-form/card-form-defaults"},{"title":"Card Field Components","sidebarTitle":"Card Field Components","href":"/sdk/ios-checkout/v3.0.0-beta/api/card-form/card-field-components"}]},{"group":"Payment Methods","pages":[{"title":"PrimerPaymentMethods","sidebarTitle":"PrimerPaymentMethods","href":"/sdk/ios-checkout/v3.0.0-beta/api/payment-methods/primer-payment-methods"},{"title":"PrimerSelectionSession","sidebarTitle":"PrimerSelectionSession","href":"/sdk/ios-checkout/v3.0.0-beta/api/payment-methods/payment-methods-session"},{"title":"PaymentMethodsDefaults","sidebarTitle":"PaymentMethodsDefaults","href":"/sdk/ios-checkout/v3.0.0-beta/api/payment-methods/payment-methods-defaults"},{"title":"PrimerVaultedPaymentMethods","sidebarTitle":"PrimerVaultedPaymentMethods","href":"/sdk/ios-checkout/v3.0.0-beta/api/payment-methods/vaulted-payment-methods"}]},{"group":"Theming","pages":[{"title":"PrimerCheckoutTheme","sidebarTitle":"PrimerCheckoutTheme","href":"/sdk/ios-checkout/v3.0.0-beta/api/theming/primer-theme"},{"title":"Color Tokens","sidebarTitle":"Color Tokens","href":"/sdk/ios-checkout/v3.0.0-beta/api/theming/color-tokens"},{"title":"Spacing Tokens","sidebarTitle":"Spacing Tokens","href":"/sdk/ios-checkout/v3.0.0-beta/api/theming/spacing-tokens"},{"title":"Typography Tokens","sidebarTitle":"Typography Tokens","href":"/sdk/ios-checkout/v3.0.0-beta/api/theming/typography-tokens"},{"title":"Shape Tokens","sidebarTitle":"Shape Tokens","href":"/sdk/ios-checkout/v3.0.0-beta/api/theming/shape-tokens"}]},{"group":"Common Objects","pages":[{"title":"PrimerSettings","sidebarTitle":"PrimerSettings","href":"/sdk/ios-checkout/v3.0.0-beta/api/common/primer-settings"},{"title":"PrimerError","sidebarTitle":"PrimerError","href":"/sdk/ios-checkout/v3.0.0-beta/api/common/primer-error"},{"title":"Validation","sidebarTitle":"Validation","href":"/sdk/ios-checkout/v3.0.0-beta/api/common/validation-result"},{"title":"PrimerCardNetwork","sidebarTitle":"PrimerCardNetwork","href":"/sdk/ios-checkout/v3.0.0-beta/api/common/primer-card-network"},{"title":"PrimerCountry","sidebarTitle":"PrimerCountry","href":"/sdk/ios-checkout/v3.0.0-beta/api/common/primer-country"}]}]}]}]}]},{"anchor":"Android","icon":"android","versions":[{"version":"3.0.0-beta","groups":[{"group":"Android","pages":[{"title":"Installation","sidebarTitle":"Installation","href":"/sdk/android-checkout/v3.0.0-beta/installation"},{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","href":"/sdk/android-checkout/v3.0.0-beta/troubleshooting"},{"group":"API Reference","pages":[{"title":"API Reference","sidebarTitle":"API Reference","href":"/sdk/android-checkout/v3.0.0-beta/api/overview"},{"group":"Core API","pages":[{"title":"PrimerCheckoutController","sidebarTitle":"PrimerCheckoutController","href":"/sdk/android-checkout/v3.0.0-beta/api/primer-checkout-controller"},{"title":"PrimerCheckoutState","sidebarTitle":"PrimerCheckoutState","href":"/sdk/android-checkout/v3.0.0-beta/api/primer-checkout-state"},{"title":"Payment outcomes","sidebarTitle":"Payment outcomes","href":"/sdk/android-checkout/v3.0.0-beta/api/primer-checkout-event"},{"title":"PrimerCheckoutSheet","sidebarTitle":"PrimerCheckoutSheet","href":"/sdk/android-checkout/v3.0.0-beta/api/primer-checkout-sheet"},{"title":"PrimerCheckoutHost","sidebarTitle":"PrimerCheckoutHost","href":"/sdk/android-checkout/v3.0.0-beta/api/primer-checkout-host"}]},{"group":"Card Form","pages":[{"title":"PrimerCardForm","sidebarTitle":"PrimerCardForm","href":"/sdk/android-checkout/v3.0.0-beta/api/card-form/primer-card-form"},{"title":"PrimerCardFormController","sidebarTitle":"PrimerCardFormController","href":"/sdk/android-checkout/v3.0.0-beta/api/card-form/card-form-controller"},{"title":"CardFormDefaults","sidebarTitle":"CardFormDefaults","href":"/sdk/android-checkout/v3.0.0-beta/api/card-form/card-form-defaults"},{"title":"Card Field Components","sidebarTitle":"Card Field Components","href":"/sdk/android-checkout/v3.0.0-beta/api/card-form/card-field-components"}]},{"group":"Payment Methods","pages":[{"title":"PrimerPaymentMethods","sidebarTitle":"PrimerPaymentMethods","href":"/sdk/android-checkout/v3.0.0-beta/api/payment-methods/primer-payment-methods"},{"title":"PrimerPaymentMethodsController","sidebarTitle":"PrimerPaymentMethodsController","href":"/sdk/android-checkout/v3.0.0-beta/api/payment-methods/payment-methods-controller"},{"title":"PaymentMethodsDefaults","sidebarTitle":"PaymentMethodsDefaults","href":"/sdk/android-checkout/v3.0.0-beta/api/payment-methods/payment-methods-defaults"},{"title":"PrimerVaultedPaymentMethodsController","sidebarTitle":"VaultedPaymentMethodsController","href":"/sdk/android-checkout/v3.0.0-beta/api/payment-methods/vaulted-payment-methods-controller"}]},{"group":"Theming","pages":[{"title":"PrimerTheme","sidebarTitle":"PrimerTheme","href":"/sdk/android-checkout/v3.0.0-beta/api/theming/primer-theme"},{"title":"Color Tokens","sidebarTitle":"Color Tokens","href":"/sdk/android-checkout/v3.0.0-beta/api/theming/color-tokens"},{"title":"SpacingTokens","sidebarTitle":"SpacingTokens","href":"/sdk/android-checkout/v3.0.0-beta/api/theming/spacing-tokens"},{"title":"TypographyTokens","sidebarTitle":"TypographyTokens","href":"/sdk/android-checkout/v3.0.0-beta/api/theming/typography-tokens"},{"title":"Shape Tokens","sidebarTitle":"Shape Tokens","href":"/sdk/android-checkout/v3.0.0-beta/api/theming/shape-tokens"}]},{"group":"Common Objects","pages":[{"title":"PrimerSettings","sidebarTitle":"PrimerSettings","href":"/sdk/android-checkout/v3.0.0-beta/api/common/primer-settings"},{"title":"PrimerError","sidebarTitle":"PrimerError","href":"/sdk/android-checkout/v3.0.0-beta/api/common/primer-error"},{"title":"Validation","sidebarTitle":"Validation","href":"/sdk/android-checkout/v3.0.0-beta/api/common/validation-result"},{"title":"PrimerCardNetwork","sidebarTitle":"PrimerCardNetwork","href":"/sdk/android-checkout/v3.0.0-beta/api/common/primer-card-network"},{"title":"PrimerCountry","sidebarTitle":"PrimerCountry","href":"/sdk/android-checkout/v3.0.0-beta/api/common/primer-country"}]}]}]}]}]},{"anchor":"React Native","icon":"react","versions":[{"version":"v2.x.x","groups":[{"group":"React Native SDK","pages":[{"title":"React Native installation","sidebarTitle":"Installation","href":"/sdk/react-native/v2.x.x/installation"},{"group":"Primer","pages":[{"group":"Methods","pages":[{"title":"configure","href":"/sdk/react-native/v2.x.x/primer/methods/configure"},{"title":"showUniversalCheckout","href":"/sdk/react-native/v2.x.x/primer/methods/showUniversalCheckout"},{"title":"showVaultManager","href":"/sdk/react-native/v2.x.x/primer/methods/showVaultManager"},{"title":"showPaymentMethod","href":"/sdk/react-native/v2.x.x/primer/methods/showPaymentMethod"},{"title":"dismiss","href":"/sdk/react-native/v2.x.x/primer/methods/dismiss"}]}]},{"group":"PrimerHeadlessCheckout","pages":[{"group":"Assets manager","pages":[{"title":"getPaymentMethodResource","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodResource"},{"title":"getPaymentMethodResources","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodResources"},{"title":"getPaymentMethodAssets","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodAssets"},{"title":"getPaymentMethodAsset","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodAsset"},{"title":"getCardNetworkImage","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/assets-manager/getCardNetworkImage"}]},{"group":"Native UI manager","pages":[{"title":"constructor","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/native-ui-manager/constructor"},{"title":"configure","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/native-ui-manager/configure"},{"title":"showPaymentMethod","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/native-ui-manager/showPaymentMethod"}]},{"group":"Raw data manager","pages":[{"title":"constructor","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/constructor"},{"title":"configure","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/configure"},{"title":"getRequiredInputElementTypes","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/getRequiredInputElementTypes"},{"title":"setRawData","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/setRawData"},{"title":"submit","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/submit"},{"title":"cleanUp","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/raw-data-manager/cleanup"}]},{"group":"Component with redirect manager","pages":[{"title":"constructor","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/component-with-redirect-manager/constructor"},{"title":"provide","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provide"}]},{"group":"Klarna headless manager","pages":[{"title":"constructor","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/klarna-headless-manager/constructor"},{"title":"provide","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/klarna-headless-manager/provide"}]},{"group":"ACH headless manager","pages":[{"title":"constructor","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/ach-headless-manager/constructor"},{"title":"provide","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/ach-headless-manager/provide"}]},{"group":"Vault manager","pages":[{"title":"configure","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/vault-manager/configure"},{"title":"fetchVaultedPaymentMethods","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods"},{"title":"deleteVaultedPaymentMethod","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod"},{"title":"validate","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/vault-manager/validate"},{"title":"startPaymentFlow","href":"/sdk/react-native/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow"}]}]},{"group":"Common objects","pages":[{"title":"PrimerSettings","href":"/sdk/react-native/v2.x.x/common-objects/PrimerSettings"},{"title":"PrimerCheckoutData","href":"/sdk/react-native/v2.x.x/common-objects/PrimerCheckoutData"},{"title":"PrimerPaymentMethodTokenData","href":"/sdk/react-native/v2.x.x/common-objects/PrimerPaymentMethodTokenData"},{"title":"PrimerError","href":"/sdk/react-native/v2.x.x/common-objects/PrimerError"}]}]}]}]},{"anchor":"Legacy SDKs","icon":"clock-rotate-left","groups":[{"group":"Web SDK (v2.x.x)","pages":[{"group":"Getting started","pages":[{"title":"Web installation","sidebarTitle":"Installation","href":"/sdk/web/v2.x.x/installation"},{"title":"Handle redirects \u0026 deep links","sidebarTitle":"Handle redirects \u0026 deep links","href":"/sdk/web/v2.x.x/handle-redirects-and-deeplinks"}]},{"group":"Primer","pages":[{"group":"Methods","pages":[{"title":"showUniversalCheckout","href":"/sdk/web/v2.x.x/primer/methods/showUniversalCheckout"},{"title":"createHeadless","href":"/sdk/web/v2.x.x/primer/methods/createHeadless"},{"title":"showVaultManager","href":"/sdk/web/v2.x.x/primer/methods/showVaultManager"}]}]},{"group":"PrimerCheckout","pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/sdk/web/v2.x.x/primer-checkout/overview"},{"group":"Methods","pages":[{"title":"refreshClientSession","href":"/sdk/web/v2.x.x/primer-checkout/methods/refreshClientSession"},{"title":"setPaymentCreationEnabled","href":"/sdk/web/v2.x.x/primer-checkout/methods/setPaymentCreationEnabled"},{"title":"setTokenizationEnabled","href":"/sdk/web/v2.x.x/primer-checkout/methods/setTokenizationEnabled"},{"title":"submit","href":"/sdk/web/v2.x.x/primer-checkout/methods/submit"},{"title":"teardown","href":"/sdk/web/v2.x.x/primer-checkout/methods/teardown"}]}]},{"group":"PrimerHeadlessCheckout","pages":[{"group":"Methods","pages":[{"title":"start","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/start"},{"title":"refreshClientSession","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/refreshClientSession"},{"title":"createPaymentMethodManager","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/createPaymentMethodManager"},{"title":"getAssetsManager","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/getAssetsManager"},{"title":"createVaultManager","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/createVaultManager"},{"title":"configure","href":"/sdk/web/v2.x.x/primer-headless-checkout/methods/configure"}]},{"group":"Types","pages":[{"title":"HeadlessHostedInput","href":"/sdk/web/v2.x.x/primer-headless-checkout/types/HeadlessHostedInput"},{"title":"HeadlessPaymentMethodButton","href":"/sdk/web/v2.x.x/primer-headless-checkout/types/HeadlessPaymentMethodButton"}]}]},{"group":"CheckoutStyle","pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/sdk/web/v2.x.x/checkout-style/Overview"},{"title":"InputStyle","href":"/sdk/web/v2.x.x/checkout-style/InputStyle"},{"title":"BaseInputStyle","href":"/sdk/web/v2.x.x/checkout-style/BaseInputStyle"},{"title":"TextStyle","href":"/sdk/web/v2.x.x/checkout-style/TextStyle"},{"title":"SavedPaymentMethodButtonStyle","href":"/sdk/web/v2.x.x/checkout-style/SavedPaymentMethodButtonStyle"},{"title":"BaseSavedPaymentMethodButtonStyle","href":"/sdk/web/v2.x.x/checkout-style/BaseSavedPaymentMethodButtonStyle"},{"title":"SubmitButtonStyle","href":"/sdk/web/v2.x.x/checkout-style/SubmitButtonStyle"},{"title":"BaseSubmitButtonStyle","href":"/sdk/web/v2.x.x/checkout-style/BaseSubmitButtonStyle"}]},{"group":"Common objects","pages":[{"title":"PrimerClientError","href":"/sdk/web/v2.x.x/common-objects/PrimerClientError"}]},{"group":"Constants","pages":[{"title":"Card networks","sidebarTitle":"Card networks","href":"/sdk/web/v2.x.x/constants/card-networks"},{"title":"Payment method types","sidebarTitle":"Payment method types","href":"/sdk/web/v2.x.x/constants/payment-method-types"},{"title":"Payment instrument types","sidebarTitle":"Payment instrument types","href":"/sdk/web/v2.x.x/constants/payment-instrument-types"}]}]},{"group":"iOS SDK (v2.x.x)","pages":[{"group":"Getting started","pages":[{"title":"iOS installation","sidebarTitle":"Installation","href":"/sdk/ios/v2.x.x/installation"},{"title":"Handle redirects \u0026 deep links","sidebarTitle":"Handle redirects \u0026 deep links","href":"/sdk/ios/v2.x.x/handle-redirects-and-deeplinks"}]},{"group":"Primer","pages":[{"group":"Methods","pages":[{"title":"configure","href":"/sdk/ios/v2.x.x/primer/methods/configure"},{"title":"showUniversalCheckout","href":"/sdk/ios/v2.x.x/primer/methods/showUniversalCheckout"},{"title":"showVaultManager","href":"/sdk/ios/v2.x.x/primer/methods/showVaultManager"},{"title":"dismiss","href":"/sdk/ios/v2.x.x/primer/methods/dismiss"}]},{"group":"Delegates","pages":[{"title":"PrimerDelegate","href":"/sdk/ios/v2.x.x/primer/delegates/PrimerDelegate"}]},{"group":"Properties","pages":[{"title":"logger","href":"/sdk/ios/v2.x.x/primer/properties/logger"}]}]},{"group":"PrimerHeadlessUniversalCheckout","pages":[{"group":"Properties","pages":[{"title":"delegate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/properties/delegate"}]},{"group":"Methods","pages":[{"title":"start","href":"/sdk/ios/v2.x.x/primer-headless-checkout/methods/start"},{"title":"cleanUp","href":"/sdk/ios/v2.x.x/primer-headless-checkout/methods/cleanUp"}]},{"group":"Delegates","pages":[{"title":"PrimerHeadlessUniversalCheckoutDelegate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/delegates/PrimerHeadlessUniversalCheckoutDelegate"},{"title":"PrimerHeadlessUniversalCheckoutUIDelegate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/delegates/PrimerHeadlessUniversalCheckoutUIDelegate"}]},{"group":"Assets manager","pages":[{"title":"getPaymentMethodAssets","href":"/sdk/ios/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodAssets"},{"title":"getPaymentMethodAsset","href":"/sdk/ios/v2.x.x/primer-headless-checkout/assets-manager/getPaymentMethodAsset"},{"title":"getCardNetworkAsset","href":"/sdk/ios/v2.x.x/primer-headless-checkout/assets-manager/getCardNetworkAsset"},{"title":"getCardNetworkImage","href":"/sdk/ios/v2.x.x/primer-headless-checkout/assets-manager/getCardNetworkImage"}]},{"group":"Native UI manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/native-ui-manager/init"},{"title":"showPaymentMethod","href":"/sdk/ios/v2.x.x/primer-headless-checkout/native-ui-manager/showPaymentMethod"}]},{"group":"Raw data manager","pages":[{"title":"delegate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager/delegate"},{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager/init"},{"title":"configure","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager/configure"},{"title":"listRequiredInputElementTypes","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager/listRequiredInputElementTypes"},{"title":"submit","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager/submit"}]},{"group":"Raw data manager delegate","pages":[{"title":"PrimerHeadlessUniversalCheckoutRawDataManagerDelegate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/raw-data-manager-delegate/PrimerHeadlessUniversalCheckoutRawDataManagerDelegate"}]},{"group":"NOL pay manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/init"},{"title":"provideNolPayLinkedCardsComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkedCardsComponent"},{"title":"provideNolPayLinkCardComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkCardComponent"},{"title":"provideNolPayUnlinkCardComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayUnlinkCardComponent"},{"title":"provideNolPayPaymentComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayPaymentComponent"},{"title":"PrimerNolPaymentCard","href":"/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/PrimerNolPaymentCard"}]},{"group":"Component with redirect manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/init"},{"title":"provide","href":"/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provide"},{"title":"provideBanksComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provideBanksComponent"},{"title":"provideComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provideComponent"},{"title":"PrimerHeadlessMainComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/PrimerHeadlessMainComponent"}]},{"group":"Klarna headless manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/klarna-headless-manager/init"},{"title":"provideKlarnaComponent","href":"/sdk/ios/v2.x.x/primer-headless-checkout/klarna-headless-manager/provideKlarnaComponent"}]},{"group":"ACH headless manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/ach-headless-manager/init"},{"title":"provide","href":"/sdk/ios/v2.x.x/primer-headless-checkout/ach-headless-manager/provide"}]},{"group":"Vault manager","pages":[{"title":"init","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/init"},{"title":"configure","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/configure"},{"title":"fetchVaultedPaymentMethods","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods"},{"title":"deleteVaultedPaymentMethod","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod"},{"title":"validate","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/validate"},{"title":"startPaymentFlow","href":"/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow"}]}]},{"group":"Common objects","pages":[{"title":"PrimerSessionIntent","href":"/sdk/ios/v2.x.x/common-objects/PrimerSessionIntent"},{"title":"PrimerSettings","href":"/sdk/ios/v2.x.x/common-objects/PrimerSettings"},{"title":"PrimerPaymentMethodTokenData","href":"/sdk/ios/v2.x.x/common-objects/PrimerPaymentMethodTokenData"},{"title":"PaymentMethod","href":"/sdk/ios/v2.x.x/common-objects/PaymentMethod"},{"title":"PrimerError","href":"/sdk/ios/v2.x.x/common-objects/PrimerError"},{"title":"PrimerValidationError","href":"/sdk/ios/v2.x.x/common-objects/PrimerValidationError"}]}]},{"group":"Android SDK (v2.x.x)","pages":[{"title":"Android installation","sidebarTitle":"Installation","href":"/sdk/android/v2.x.x/installation"},{"group":"Primer","pages":[{"group":"Methods","pages":[{"title":"configure","href":"/sdk/android/v2.x.x/primer/methods/configure"},{"title":"showUniversalCheckout","href":"/sdk/android/v2.x.x/primer/methods/showUniversalCheckout"},{"title":"showVaultManager","href":"/sdk/android/v2.x.x/primer/methods/showVaultManager"},{"title":"showPaymentMethod","href":"/sdk/android/v2.x.x/primer/methods/showPaymentMethod"},{"title":"dismiss","href":"/sdk/android/v2.x.x/primer/methods/dismiss"},{"title":"cleanup","href":"/sdk/android/v2.x.x/primer/methods/cleanup"}]},{"group":"Listeners","pages":[{"title":"PrimerCheckoutListener","href":"/sdk/android/v2.x.x/primer/listeners/PrimerCheckoutListener"}]}]},{"group":"PrimerHeadlessUniversalCheckout","pages":[{"group":"Methods","pages":[{"title":"start","href":"/sdk/android/v2.x.x/primer-headless-checkout/methods/start"},{"title":"setCheckoutListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/methods/setCheckoutListener"},{"title":"setCheckoutUiListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/methods/setCheckoutUiListener"},{"title":"cleanup","href":"/sdk/android/v2.x.x/primer-headless-checkout/methods/cleanup"}]},{"group":"Listeners","pages":[{"title":"PrimerHeadlessUniversalCheckoutListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/listeners/PrimerHeadlessUniversalCheckoutListener"},{"title":"PrimerHeadlessUniversalCheckoutUiListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/listeners/PrimerHeadlessUniversalCheckoutUiListener"}]},{"group":"Assets Managers","pages":[{"title":"getPaymentMethodResources","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodResources"},{"title":"getPaymentMethodResource","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodResource"},{"title":"getPaymentMethodAssets","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodAssets"},{"title":"getPaymentMethodAsset","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodAsset"},{"title":"getCardNetworkAsset","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getCardNetworkAsset"},{"title":"getCardNetworkImage","href":"/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getCardNetworkImage"}]},{"group":"Native UI manager","pages":[{"title":"newInstance","href":"/sdk/android/v2.x.x/primer-headless-checkout/native-ui-manager/newInstance"},{"title":"showPaymentMethod","href":"/sdk/android/v2.x.x/primer-headless-checkout/native-ui-manager/showPaymentMethod"}]},{"group":"Raw Data manager","pages":[{"title":"newInstance","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/newInstance"},{"title":"configure","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/configure"},{"title":"getRequiredInputElementTypes","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/getRequiredInputElementTypes"},{"title":"setListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/setListener"},{"title":"setRawData","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/setRawData"},{"title":"submit","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/submit"},{"title":"cleanup","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager/cleanup"}]},{"group":"Raw Data Manager Listener","pages":[{"title":"PrimerHeadlessUniversalCheckoutRawDataManagerListener","href":"/sdk/android/v2.x.x/primer-headless-checkout/raw-data-manager-listener/PrimerHeadlessUniversalCheckoutRawDataManagerListener"}]},{"group":"NOL Pay manager","pages":[{"title":"init","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/init"},{"title":"provideNolPayLinkedCardsComponent","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkedCardsComponent"},{"title":"provideNolPayNfcComponent","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayNfcComponent"},{"title":"provideNolPayLinkCardComponent","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkCardComponent"},{"title":"provideNolPayUnlinkCardComponent","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayUnlinkCardComponent"},{"title":"provideNolPayPaymentComponent","sidebarTitle":"Provide nol Pay Payment Component","href":"/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayPaymentComponent"}]},{"group":"Component With Redirect manager","pages":[{"title":"init","href":"/sdk/android/v2.x.x/primer-headless-checkout/component-with-redirect-manager/init"},{"title":"provide","href":"/sdk/android/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provide"}]},{"group":"Klarna Headless manager","pages":[{"title":"init","href":"/sdk/android/v2.x.x/primer-headless-checkout/klarna-headless-manager/init"},{"title":"provideKlarnaComponent","href":"/sdk/android/v2.x.x/primer-headless-checkout/klarna-headless-manager/provideKlarnaComponent"}]},{"group":"ACH Headless manager","pages":[{"title":"init","href":"/sdk/android/v2.x.x/primer-headless-checkout/ach-headless-manager/init"},{"title":"provide","href":"/sdk/android/v2.x.x/primer-headless-checkout/ach-headless-manager/provide"}]},{"group":"Vault manager","pages":[{"title":"newInstance","href":"/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/newInstance"},{"title":"fetchVaultedPaymentMethods","href":"/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods"},{"title":"deleteVaultedPaymentMethod","href":"/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod"},{"title":"validate","href":"/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/validate"},{"title":"startPaymentFlow","href":"/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow"}]}]},{"group":"Logging","pages":[{"title":"PrimerLogger","href":"/sdk/android/v2.x.x/logging/PrimerLogger"}]},{"group":"Common objects","pages":[{"title":"PrimerSessionIntent","href":"/sdk/android/v2.x.x/common-objects/PrimerSessionIntent"},{"title":"PrimerSettings","href":"/sdk/android/v2.x.x/common-objects/PrimerSettings"},{"title":"PrimerCheckoutData","href":"/sdk/android/v2.x.x/common-objects/PrimerCheckoutData"},{"title":"PrimerPaymentMethodData","href":"/sdk/android/v2.x.x/common-objects/PrimerPaymentMethodData"},{"title":"PrimerPaymentMethodTokenData","href":"/sdk/android/v2.x.x/common-objects/PrimerPaymentMethodTokenData"},{"title":"PrimerError","href":"/sdk/android/v2.x.x/common-objects/PrimerError"},{"title":"PrimerValidationError","href":"/sdk/android/v2.x.x/common-objects/PrimerValidationError"},{"title":"PrimerInputValidationError","href":"/sdk/android/v2.x.x/common-objects/PrimerInputValidationError"}]}]}]},{"anchor":"Lifecycle","icon":"clock","groups":[{"group":"Lifecycle","pages":[{"title":"SDK lifecycle","sidebarTitle":"Overview","href":"/sdk/lifecycle"}]}]}]},{"tab":"Connections","pages":[{"title":"Connections","href":"/connections/processors/overview"}]},{"tab":"Changelogs","groups":[{"group":"API changelogs","pages":[{"title":"API Changelog","sidebarTitle":"API Changelog","href":"/changelogs/api-changelog"}]},{"group":"SDK changelogs","pages":[{"group":"Web","icon":"globe","pages":[{"title":"Web SDK changelogs","sidebarTitle":"Overview","icon":"list","href":"/changelogs/web"},{"title":"Primer checkout SDK","sidebarTitle":"Primer checkout SDK","icon":"sparkles","href":"/changelogs/primer-checkout-sdk"},{"title":"Web SDK","sidebarTitle":"Web SDK","icon":"code","href":"/changelogs/web-sdk"}]},{"group":"Mobile","icon":"mobile","pages":[{"title":"iOS SDK","sidebarTitle":"iOS SDK","icon":"apple","description":null,"href":"/changelogs/ios-sdk"},{"title":"Android SDK","sidebarTitle":"Android SDK","icon":"android","href":"/changelogs/android-sdk"},{"title":"React Native SDK","sidebarTitle":"React Native SDK","icon":"react","description":null,"href":"/changelogs/react-native-sdk"}]}]},{"group":"Migration guides","pages":[{"title":"Token migration","href":"/changelogs/migration-guides/token-migration"},{"title":"Token export","href":"/changelogs/migration-guides/token-export"},{"title":"API v2.3 to v2.4","sidebarTitle":"API v2.3 to v2.4","href":"/changelogs/migration-guides/API-2.3-to-2.4"},{"title":"Payment Status Webhooks","sidebarTitle":"Payment status webhooks","href":"/changelogs/migration-guides/payment-status-webhooks"},{"title":"Headless mobile v2.16 to v2.17","href":"/changelogs/migration-guides/headless-mobile-out-of-beta"},{"title":"Migrating from v0 to v1","sidebarTitle":"Primer Checkout - migrating from v0 to v1","href":"/changelogs/migration-guides/primer-js-v0-to-v1"},{"title":"Migrate to Primer Checkout","sidebarTitle":"Migrate to Primer Checkout","href":"/changelogs/migration-guides/migrate-to-primer-checkout"},{"title":"Migrate the manual flow to Primer Checkout","sidebarTitle":"Legacy manual flow → Primer Checkout manual flow","href":"/changelogs/migration-guides/manual-flow"}]}]}]},"basePath":"","title":"Android SDK - Primer","buildId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","deploymentId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","dynamics":["a74be98ba7","07c022d89b"],"chunks":["zoom-image-lightbox-CypZe82l.js","lightbox-handle-r17bVUz3.js","Frame-BDAj7nBh.js","DynamicMarkdown-Bq09mRwR.js"]}