> ## Documentation Index
> Fetch the complete documentation index at: https://primer.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Android SDK

<Update label="v2.51.0" description="2026-06-03">
  **✨ Improvements**

  * General fixes and improvements

  <Info>
    **Primer SDK now depends on `io.primer:klarna-android:1.3.0`**<br />
    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](https://github.com/klarna/klarna-mobile-sdk-android/blob/master/CHANGELOG.md)
    for more information.
  </Info>
</Update>

<Update label="v2.50.2" description="2026-06-03">
  **✨ Improvements**

  * General fixes and improvements
</Update>

<Update label="v2.50.1" description="2026-05-20">
  **✨ Improvements**

  * Improved payment method processing
  * Improved error handling in some areas

  **🔧 Fixes**

  * Fixes some issues with text color and dark mode theming
</Update>

<Update label="v2.49.0" description="2026-04-27">
  **🚀 New feature**

  * Improved payment method processing

  **✨ Improvements**

  * Add cvvLabel to CardNetwork Descriptor
</Update>

<Update label="v2.48.0" description="2026-02-24">
  **✨ Improvements**

  * Exposing more information through `onBinDataAvailable`
  * Added idempotency key as optional param to `continuePaymentCreation` in `PrimerPaymentCreationDecisionHandler`
</Update>

<Update label="v2.47.1" description="2026-02-04">
  **✨ Improvements**

  * Improved payment status polling stability through retry handling
</Update>

<Update label="v2.47.0" description="2026-01-16">
  **✨ Improvements**

  <Warning>
    **Primer SDK now depends on `io.primer:3ds-android:1.8.0`**<br />
    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**:<br />

    * 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.
  </Warning>

  **🔧 Fixes**

  * improved 3DS locale normalization
  * improved custom Locale handling in Drop-in
</Update>

<Update label="v2.46.0" description="2025-12-03">
  **✨ Improvements**

  * EFTPOS co-badged cards now leaves card selection up the vendor without user interaction

  <Warning>
    **Primer SDK now depends on `io.primer:3ds-android:1.7.0`**<br />
    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**:<br />

    * The 3DS SDK now follows the EU Directive 2019/882.
  </Warning>

  **🔧 Fixes**

  * fix a corner case when switching between different co-badged cards
  * fix navigation bar blur when edge-to-edge enabled
</Update>

<Update label="v2.45.1" description="2025-11-18">
  **✨ Improvements**

  * Fixed an issue where the payment redirect URL wasn’t loaded correctly when starting from
    a custom URL scheme.
</Update>

<Update label="v2.45.0" description="2025-11-12">
  **✨ Improvements**

  * Raised the minimum supported SDK version to `23`
  * Updated `play-services-wallet` dependency to `19.5.0`
</Update>

<Update label="v2.44.1" description="2025-10-21">
  **🔧 Fixes**

  * Fixed crash that occurred when user returned to 3DS screen using a deeplink.

  **✨ Improvements**

  * Reduced redundant data fetching to speed up loading and improve overall performance.
</Update>

<Update label="v2.44.0" description="2025-10-15">
  **🚀 New feature**

  * Add EFTPOS network support
</Update>

<Update label="v2.43.0" description="2025-09-23">
  <Warning>
    **Breaking Change**: This version removes support for legacy API versions. The SDK now requires API version 2.4 or later.
  </Warning>

  **⚠️ Legacy API Option Removed**

  The `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:**

  1. Ensure your backend integration supports API version 2.4
  2. Review the [Migration Guide](/changelogs/migration-guides/API-2.3-to-2.4) for detailed upgrade instructions

  For more information, see our [SDK reference](/sdk/android/v2.x.x/common-objects/PrimerSettings#param-api-version) and [API Reference](/api-reference/get-started/overview).

  **✨ Improvements**

  * Enhanced internal storage of analytics events.
</Update>

<Update label="v2.42.2" description="2025-09-04">
  **🔧 Fixes**

  * Fixed crash that occurred when switching payment methods after the `PrimerSessionIntent` parameter was changed
  * Fixed crash that could occur when calling `cleanup()` if the Drop-in dismissal event was not properly handled internally
</Update>

<Update label="v2.42.1" description="2025-09-02">
  **✨ Improvements**

  * 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.
</Update>

<Update label="v2.42.0" description="2025-08-29">
  **✨ Improvements**

  * Improvements to Klarna theme selection.

  <Info>
    **Primer SDK now depends on `io.primer:klarna-android:1.2.0`**<br />
    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](https://github.com/klarna/klarna-mobile-sdk-android/blob/master/CHANGELOG.md)
    for more information.
  </Info>

  * 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.
</Update>

<Update label="v2.41.0" description="2025-06-20">
  **✨ Improvements**

  * Primer SDK now depends on **`Kotlin 2.0.21`**

  <Warning>
    **Primer SDK now depends on `io.primer:3ds-android:1.6.2`**<br />
    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**:<br />

    * 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.
  </Warning>
</Update>

<Update label="v2.40.1" description="2025-06-11">
  **✨ Improvements**

  * Better edge-to-edge support in Drop-In integration.
  * Improvements to DI resolutions.
</Update>

<Update label="v2.40.0" description="2025-06-04">
  **✨ Improvements**

  * We have bumped `compile` and `target` versions to **`35`**
  * **Analytics:** We have reduced number of analytics events captured and sent to our server.
</Update>

<Update label="v2.39.0" description="2025-05-14">
  **✨ Improvements**

  * We have added `CardFormUIOptions.payButtonAddNewCard` to support the "Add New Card" option in the card form flow. Please check [our docs](/sdk/android/v2.x.x/common-objects/PrimerSettings#properties.uiOptions-properties.cardFormUIOptions) for more information
  * Introduced support for the 'Continue payment flow' workflow action to configure checkout outcome. See our [documentation](/workflows/apps/native-apps/primer-payments-app/continue-payment-flow-action#control-the-checkout-result-with-checkout-outcome) for more info.

  **🔧 Fixes**

  * Fixed a crash caused by misuse of CheckoutExitHandler.
</Update>

<Update label="v2.38.3" description="2025-04-29">
  **🔧 Fixes**

  * In certain scenarios, the SDK may crash if a deep link to a specific screen is triggered after a payment flow was already finalized.
</Update>

<Update label="v2.38.2" description="2025-04-17">
  **✨ Improvements**

  * **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.
</Update>

<Update label="v2.38.1" description="2025-04-14">
  **✨ Improvements**

  * **Klarna**: Updated Klarna SDK to `1.1.0`
  * **Klarna**: Improved styling support for Klarna components

  <Warning>
    ⚠️ **Primer SDK now supports BOM (Bill of Materials) via `io.primer:bom`**

    If 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`**
  </Warning>
</Update>

<Update label="v2.38.0" description="2025-03-24">
  **🚀 New feature**

  * 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](/sdk/android/v2.x.x/common-objects/PrimerSettings#properties.apiVersion), [Api Reference](/api-reference/get-started/overview)  and [Migration Guides](/changelogs/migration-guides/API-2.3-to-2.4).
</Update>

<Update label="v2.37.2" description="2025-03-21">
  **🔧 Fixes**

  * 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.
</Update>

<Update label="v2.37.1" description="2025-03-19">
  **🔧 Fixes**

  * 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.
</Update>

<Update label="v2.37.0" description="2025-03-14">
  **✨ Improvements**

  * **3DS Locale Propagation:** Resolved an issue where the 3DS SDK occasionally rejected propagated locale settings.
  * **iDEAL via Adyen:** iDEAL is now fully supported as a redirect-based payment method.

  **🔧 Fixes**

  * **3DS Flow Stability:** Fixed crashes that occurred when the 3DS flow failed while the app was running in the background.
</Update>

<Update label="v2.36.3" description="2025-02-11">
  **✨ Improvements**

  * We've increased the timeout for payment creation and handling for better stability.
</Update>

<Update label="v2.36.2" description="2025-02-10">
  **🔧 Fixes**

  * 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.
</Update>

<Update label="v2.36.1" description="2025-02-05">
  **🔧 Fixes**

  * **Drop-in**: fixed an issue causing crashes when calling `Primer.dismiss()` after the checkout sheet is already dismissed.
</Update>

<Update label="v2.36.0" description="2025-02-04">
  **✨ Improvements**

  * 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](/sdk/android/v2.x.x/common-objects/PrimerSettings#properties.apiVersion), [Api Reference](/api-reference/get-started/overview) and [Migration Guides](/changelogs/migration-guides/API-2.3-to-2.4). 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.
</Update>

<Update label="v2.35.0" description="2024-01-24">
  ****🧪 Experimental****

  * With this version it is possible to opt-in to test API v2.4(Beta). For more information see our [API Reference](/api-reference/get-started/overview)  and [Migration Guides](/changelogs/migration-guides/API-2.3-to-2.4). 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.
</Update>

<Update label="v2.34.0" description="2024-01-20">
  **🚀 New feature**

  * **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](/payment-services/cobadged-cards) 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.
</Update>

<Update label="v2.33.1" description="2024-12-20">
  **✨ Improvements**

  * Stability improvements.
</Update>

<Update label="v2.33.0" description="2024-12-19">
  **🚀 New feature**

  * **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`**](/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodResource) method to access these native resources seamlessly. If you are using Headless integration, make sure to check our updated [documentation](/checkout/headless#step-3-render-available-payment-methods-ui) about rendering of payment method buttons.

      <Note>
        Usage of Native Payment Method Button is a requirement for all new Android Google Pay API integrations that use a Google Pay payment button.
      </Note>

  * **ACH Vaulting via Stripe**: The ACH payment method through Stripe now supports a [vaulting flow](/connections/payment-methods/ach/stripe#prepare-the-sdk-for-vaulting), 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](/connections/payment-methods/google-pay/overview) 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:
    * [PrimerHeadlessUniversalCheckoutAssetsManager.getPaymentMethodAsset](/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodAsset)
    * [PrimerHeadlessUniversalCheckoutAssetsManager.getPaymentMethodAssets](/sdk/android/v2.x.x/primer-headless-checkout/assets-managers/getPaymentMethodAssets)
</Update>

<Update label="v2.32.4" description="2024-11-26">
  **🔧 Fixes**

  * We've fixed the issue that caused crashes when retrying a 3DS challenge while another challenge was still in progress.
</Update>

<Update label="v2.32.3" description="2024-11-21">
  **🔧 Fixes**

  * We've resolved the issue causing crashes when users were deeplinked multiple times from PayPal.
</Update>

<Update label="v2.32.2" description="2024-11-15">
  **🔧 Fixes**

  * Disable back buttons when payment is processing
</Update>

<Update label="v2.32.1" description="2024-11-13">
  **🔧 Fixes**

  * We've fixed the crashes that occurred when using Blik through Adyen's Drop-In in standalone mode.
  * We've resolved occasional crashes related to the "fragment not attached" issue in Drop-In.
</Update>

<Update label="v2.32.0" description="2024-10-28">
  **✨ Improvements**

  * 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](/checkout/drop-in/customization).
  * You can now use custom colour for input cursors by specifying `cursorColor` in `InputThemeData`

  <Warning>
    ⚠️ **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.
  </Warning>
</Update>

<Update label="v2.31.0" description="2024-09-20">
  **✨ Improvements**

  * Stripe ACH mandate template can now be configured either with a resource key or passing the full mandate text directly.
  * Better Spanish language support for Stripe ACH.
</Update>

<Update label="v2.30.0" description="2024-08-30">
  **✨ Improvements**

  **Stripe ACH is now available** ✨

  * 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](/connections/payment-methods/ach/stripe).
</Update>

<Update label="v2.29.0" description="2024-08-26">
  **🚀 New feature**

  Android SDK now support additional languages:

  * Finnish
  * Korean
  * Lithuanian
  * Catalan
  * Serbian
  * Ukrainian
  * Hebrew
  * Indonesian
</Update>

<Update label="v2.28.1" description="2024-08-08">
  **✨ Improvements**

  * **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](/sdk/android/v2.x.x/common-objects/PrimerSettings#properties.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.
</Update>

<Update label="v2.27.6" description="2024-06-25">
  **🔧 Fixes**

  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 `1.4.3` version of the 3DS SDK **(`io.primer:3ds-android:1.4.3`).**
</Update>

<Update label="v2.27.5" description="2024-06-25">
  **✨ Improvements**

  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.
</Update>

<Update label="v2.27.4" description="2024-06-12">
  **✨ Improvements**

  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 [here](/sdk/android/v2.x.x/common-objects/PrimerError).
</Update>

<Update label="v2.27.2" description="2024-05-07">
  **🔧 Fixes**

  * 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](/sdk/android/v2.x.x/common-objects/PrimerPaymentMethodTokenData).
</Update>

<Update label="v2.27.1" description="2024-04-24">
  **🔧 Fixes**

  * Improved internal dependency resolution for NolPay components when **PrimerHeadlessUniversalCheckout** is reinitialized.
</Update>

<Update label="v2.27.0" description="2024-04-09">
  **🚀 New feature**

  * **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](/connections/payment-methods/google-pay/drop-in#required-existing-payment-method) on how to enable this feature.
  * **PayPal**: We have improved the PayPal [payment method token](/sdk/android/v2.x.x/common-objects/PrimerPaymentMethodTokenData) by providing additional data, including the payer's first name, last name, and external payer ID.

  ****CVV recapture for saved cards****

  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 [here](/payment-services/save-payment-methods/).

  **✨ Improvements**

  Please 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`).
</Update>

<Update label="v2.26.1" description="2024-04-05">
  **✨ Improvements**

  * 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.
</Update>

<Update label="v2.26.0" description="2024-03-07">
  **✨ Improvements**

  * 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`](/sdk/android/v2.x.x/primer-headless-checkout/klarna-headless-manager/provideKlarnaComponent#return).
    Using the `KlarnaComponent` you can seamlessly integrate Klarna, with a custom payment category selection UI.
    Consult the [guide](/connections/payment-methods/klarna/headless?platform=android) to get a sense of how to seamlessly integrate Klarna.

  <Warning>
    ⚠️ **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.
  </Warning>
</Update>

<Update label="v2.25.0" description="2024-02-15">
  **✨ Improvements**

  * 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.
</Update>

<Update label="v2.24.0" description="2024-02-06">
  **✨ Improvements**

  * 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.
</Update>

<Update label="v2.23.0" description="2024-01-30">
  **✨ Improvements**

  We've enhanced our logging capabilities to provide more comprehensive insights. Specifically, when the [PrimerLogLevel](/sdk/android/v2.x.x/logging/PrimerLogger#parameters.logLevel) 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](/sdk/android/v2.x.x/logging/PrimerLogger#implementing-your-own-custom-logger) 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](https://apiref.primer.io/reference/create_client_side_token_client_session_post#request.body.order.fees) was not being correctly deserialized by the SDK.
</Update>

<Update label="v2.22.0" description="2024-01-18">
  **💳 APMs support**

  **iDEAL via Adyen**

  Adds the `PrimerHeadlessUniversalCheckoutComponentWithRedirectManager` that provides access to [`BanksComponent`](/sdk/ios/v2.x.x/primer-headless-checkout/component-with-redirect-manager/provide#common-api-and-available-components-supported-types.BanksComponent). Using the `BanksComponent` you can easily:

  * load list of all supported banks
  * submit user's selection

  Consult the [guide](/connections/payment-methods/ideal/adyen-headless) to get a sense of how to seamlessly integrate iDEAL via Adyen.
</Update>

<Update label="v2.21.0" description="2023-12-15">
  **✨ Improvements**

  * 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`)
</Update>

<Update label="v2.20.0" description="2023-12-12">
  **💳 APMs support**

  In 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.

  **Deprecations**

  **PrimerHeadlessUniversalCheckoutCardComponentsManager** has been deprecated and will no longer receive ongoing maintenance and will be removed in the future.
</Update>

<Update label="v2.19.2" description="2023-11-14">
  **✨ Improvements**

  * We have improved empty phone number validation for nol Pay
</Update>

<Update label="v2.19.1" description="2023-11-07">
  **💳 APMs support**

  **nol Pay**

  Added 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`
</Update>

<Update label="v2.19.0" description="2023-11-06">
  **💳 APMs support**

  **nol Pay**

  nol Pay payment method is now considered stable. Please check our [integration guide](/connections/payment-methods/nol-pay/headless) in order to seamlessly integrate nol Pay.

  **✨ Improvements**

  We 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](/sdk/android/v2.x.x/logging/PrimerLogger).
</Update>

<Update label="v2.19.0-nolpay.2" description="2023-10-30">
  **✨ Improvements**

  * 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](/connections/payment-methods/nol-pay/headless) to get a sense of how to seamlessly integrate nol Pay.
</Update>

<Update label="v2.19.0-nolpay.1" description="2023-10-19">
  **💳 APMs support**

  **nol Pay**

  Adds the `PrimerHeadlessUniversalCheckoutNolPayManager` that provides following features:

  * **Listing Nol cars**: Listing previously linked Nol payment cards using [NolPayLinkedCardsComponent](/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkedCardsComponent).
  * **NFC Scanning**: Allows your application to scan NFC Nol payment cards using [NolPayNfcComponent](/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayNfcComponent).
  * **Linking**: Link the Nol card to a phone number using [NolPayLinkCardComponent](/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkCardComponent).
  * **Unlinking**: Unlink previously linked Nol card using [NolPayUnlinkCardComponent](/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayUnlinkCardComponent).
  * **Transactions**: Execute payments using selected Nol payment cards [NolPayPaymentComponent](/sdk/android/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayPaymentComponent).

  Consult the [guide](/connections/payment-methods/nol-pay/headless) to get a sense of how to seamlessly integrate nol Pay.
</Update>

<Update label="v2.18.0" description="2023-10-19">
  **✨ Improvements**

  * In previous versions we have used Koin for Dependency Injection inside of our SDK. Starting from this release, Koin was removed as transitive dependency.
</Update>

<Update label="v2.17.3" description="2023-09-07">
  **✨ Improvements**

  * 3DS will be conditionally triggered in case `Google Pay` method returns `PAN_ONLY` token in Headless integration
</Update>

<Update label="v2.17.2" description="2023-08-17">
  **✨ Improvements**

  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.2.0` from now on.

  <Warning>
    ⚠️ **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.**
  </Warning>
</Update>

<Update label="v2.17.1" description="2023-08-09">
  **✨ Improvements**

  * Removed requirements for `amount` in client session when vaulting PayPal
</Update>

<Update label="v2.17.0" description="2023-07-28">
  <Warning>
    ⚠️ This version introduces breaking changes for Headless Checkout.
    A migration guide for this can be found [here](/changelogs/android-sdk).
  </Warning>

  **Headless Vault Manager**

  Add `PrimerHeadlessUniversalCheckoutVaultManager.newInstance()` which returns an instance of `PrimerHeadlessUniversalCheckoutVaultManager`. It provides the following features:

  * [fetch a list](/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods) of vaulted payment methods
  * [delete](/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod) a vaulted payment method
  * [validate](/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/validate) the additional data used to perform a payment (e.g. validate CVV)
  * [perform a payment](/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow) using a vaulted payment method

  **3DS Service**

  Our 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](/payment-services/3d-secure/get-started#android)

  **💳 APMs support**

  **Cards via iPay88**

  In 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`.
</Update>

<Update label="v2.17.0-RC11" description="2023-07-17">
  * Improvements to deeplink handling for PayPal and Redirect based payment methods
</Update>

<Update label="v2.17.0-RC10" description="2023-07-10">
  **Headless Vault Manager**

  Add `PrimerHeadlessUniversalCheckoutVaultManager.newInstance()` which returns an instance of `PrimerHeadlessUniversalCheckoutVaultManager`. It provides the following features:

  * [fetch a list](/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods) of vaulted payment methods
  * [delete](/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod) a vaulted payment method
  * [validate](/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/validate) the additional data used to perform a payment (e.g. validate CVV)
  * [perform a payment](/sdk/android/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow) using a vaulted payment method
</Update>

<Update label="v2.17.0-RC9" description="2023-06-13">
  <Note>
    ⚠️ This version introduces breaking changes for Headless Checkout
  </Note>

  **🔧 Fixes**

  * Fixed bug where calling `submit` method of `PrimerHeadlessUniversalCheckoutCardComponentsManager` would return error due to wrong formatting of expiry date.

  **🤹 Breaking changes**

  `PrimerCardComponentsManagerListener` has been renamed to `PrimerHeadlessUniversalCheckoutCardComponentsManagerListener`.
</Update>

<Update label="v2.17.0-RC8" description="2023-06-08">
  **✨ Improvements**

  * Reintroduce showing a payment method directly with the Drop In UI integration

  **🔧 Fixes**

  * Apply fix on PayPal vaulting
  * Resolved bug where Drop In UI could be launched multiple times at same time
</Update>

<Update label="v2.17.0-RC7" description="2023-05-29">
  <Note>
    ⚠️ This version introduces breaking changes for Headless Checkout
  </Note>

  **✨ Improvements**

  * Our 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](/payment-services/3d-secure/get-started#android)

  **🔧 Fixes**

  * Resolved internal analytics crashes.
</Update>

<Update label="v2.17.0-RC6" description="2023-05-10">
  <Note>
    ⚠️ This version introduces breaking changes for Headless Checkout
  </Note>

  **✨ Improvements**

  * Koin dependency has been bumped to version `3.3.3`
</Update>

<Update label="v2.17.0-RC5" description="2023-04-10">
  <Note>
    ⚠️ This version introduces breaking changes for Headless Checkout
  </Note>

  **✨ Improvements**

  * Better interoperability with `Java` when using Primer SDK
  * Internal SDK improvements

  **🤹 Breaking changes**

  The package name for the `PrimerHeadlessUniversalCheckoutNativeUiManager` has been changed to `io.primer.android.components.manager.nativeUi`.
</Update>

<Update label="v2.17.0-RC4" description="2023-03-29">
  <Note>
    ⚠️ This version introduces breaking changes for Headless Checkout
  </Note>

  **✨ Improvements**

  * `PrimerPaymentMethodAsset` now exposes the payment method's friendly name
</Update>

<Update label="v2.17.0-RC3" description="2023-03-14">
  <Note>
    ⚠️ This version introduces breaking changes for Headless Checkout
  </Note>

  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  **💳 APMs support**

  **Cards via iPay88**

  In 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.

  **🚀 Improvements**

  In 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.
</Update>

<Update label="v2.16.6" description="2023-03-13">
  **🚀 Improvements**

  * Improved handling of payment cancellations for `Atome`

  **🔧 Fixes**

  * Fixed bug that caused some of the expiry dates not being validated correctly
</Update>

<Update label="v2.16.5" description="2023-03-07">
  **🚀 Improvements**

  * Improved internal analytics for 3DS events
  * Improved internal analytics for headless integration
</Update>

<Update label="v2.17.0-RC2" description="2023-02-23">
  <Note>
    ⚠️ This version introduces breaking changes for Headless Checkout
  </Note>

  **✨ Improvements**

  It'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](/checkout/headless#android) has been updated to reflect these changes. You can also find a [Migration Guide](/changelogs/migration-guides/headless-mobile-out-of-beta) 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.
</Update>

<Update label="v2.16.4" description="2023-02-09">
  **🚀  Improvements**

  * Thai translations have been improved and updated.
</Update>

<Update label="v2.16.3" description="2023-02-07">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  **New languages**

  * Malay
  * Thai
  * Mandarin Chinese
</Update>

<Update label="v2.17.0-RC1" description="2023-01-23">
  <Note>
    ⚠️ This version introduces breaking changes for Headless Checkout
  </Note>

  **✨ Improvements**

  It'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](/checkout/headless#android) has been updated to reflect these changes. You can also find a [Migration Guide](/changelogs/migration-guides/headless-mobile-out-of-beta) detailing the changes.

  This release candidate will soon be merged into the main releases.
</Update>

<Update label="v2.16.2" description="2023-01-20">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  **🚀 New feature**

  * Google Pay payments now support native 3DS.

  **🔧 Fixes**

  * Drop-In can now be intialized with `0` amount.
  * Particular flows that use `showPaymentMethod` have been improved.
</Update>

<Update label="v2.16.1" description="2022-12-29">
  **🔧 Fixes**

  * 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.

      <Warning>
        ⚠️ **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.**
      </Warning>
</Update>

<Update label="v2.16.0" description="2022-12-20">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  **💳 APMs support**

  **Cards via iPay88**

  In 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.

      <Warning>
        ⚠️ **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.**
      </Warning>

  * We have added a way to capture billing address using Google Pay. You will need to pass `captureBillingAddress = true` to `PrimerGooglePayOptions`
</Update>

<Update label="v2.15.1" description="2022-11-29">
  **🔧 Fixes**

  * 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.
</Update>

<Update label="v2.15.0" description="2022-11-17">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  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.

  <Warning>
    ⚠️

    **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.**
  </Warning>

  **🔧 Fixes**

  * We have fixed certain redirection issues for payment methods using Buckaroo as PSP
</Update>

<Update label="v2.14.1" description="2022-11-11">
  **🚀 Improvement**

  * Aligned the `RN_ANDROID` on Analytics `sdkType`
</Update>

<Update label="v2.14.0" description="2022-10-27">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  In this version of the SDK we have removed options to pass 3DS vaulting flag **`is3DSOnVaultingEnabled`**

  Above flow is now obsoleted and 3DS will always follow workflows.
</Update>

<Update label="v2.13.1" description="2022-10-26">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  **💳 APMs support**

  **Retail Outlets via Xendit**

  In 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](https://www.notion.so/52426f47b9b04f808a6b88ee51301196?pvs=21) 🙌

  **🔧 Fixes**

  * Fix initialization for Universal Checkout.

  <Note>
    This fix solves the issue affecting version `2.13.0`. We recommend updating to this `2.13.1` version.
  </Note>
</Update>

<Update label="v2.12.1" description="2022-10-10">
  **🔧 Fixes**

  Fixed raw card data formatting in some scenarios.
</Update>

<Update label="v2.12.0" description="2022-10-06">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  **💳 APMs support**

  **Bancontact via Adyen support**

  In 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.
</Update>

<Update label="v2.10.1" description="2022-09-30">
  **🔧 Fixes**

  Fixed crashes on payment method screens in case of process death.
</Update>

<Update label="v2.10.0" description="2022-09-23">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  In this version we have improved performances of our Headless Universal Checkout.

  **🔧 Fixes**

  Fixed 3DS data mapping that was causing it to fail.
</Update>

<Update label="v2.9.1" description="2022-09-17">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  **💳 APMs support**

  In 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 `PromptPayCheckoutAdditionalInfo`

  `fun onAdditionalInfoReceived(info: PrimerCheckoutAdditionalInfo) = Unit`

  **🚀 Improvements**

  We have fixed a crash on billing address country selector screen.
</Update>

<Update label="v2.8.1" description="2022-09-13">
  **🚀 Improvements**

  We have fixed a bug where cardholder name field was loosing focus when billing address checkout module was enabled.
</Update>

<Update label="v2.8.0" description="2022-09-08">
  **🚀 Improvements**

  We have removed some transitive dependencies from our code. This will result in smaller size of you application when Primer SDK is imported.
</Update>

<Update label="v2.7.0" description="2022-09-01">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  This release changes the way that **Klarna** is integrated, and switches on Klarna's native Android SDK.

  **💳 APMs support**

  **Drop-in**

  * Added support for **Multibanco** via Adyen.

  **Headless**

  * Added support for **Multibanco** via Adyen.
  * Added support for **MbWay** via Adyen.

  **🚀 Improvements**

  We have removed some transitive dependencies from our code. This will result in smaller size of you application when Primer SDK is imported.
</Update>

<Update label="v1.16.0" description="2022-09-01">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  This release changes the way that Klarna is integrated, and switches on Klarna's native Android SDK.
</Update>

<Update label="v2.6.0" description="2022-08-24">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  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 👇

  ![Screen Recording 2022-08-23 at 18.56.53.gif](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)
</Update>

<Update label="2.5.0" description="2022-08-16">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  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 🙌!
</Update>

<Update label="v2.4.0" description="2022-08-10">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  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.
</Update>

<Update label="v2.3.0" description="2022-07-29">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  **💳 APMs support**

  Fast and PromptPay via Rapyd

  <Frame caption="Payment Prompts">
    <img src="https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/prompt_pay.webp?fit=max&auto=format&n=2gUFYKfNb_svpxsN&q=85&s=caf9dacee7f363931db1e4233e6ad89d" width="902" height="1152" data-path="images/changelogs/android/prompt_pay.webp" />

    <img src="https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/Screen_Shot_2022-07-28_at_20.24.07.webp?fit=max&auto=format&n=2gUFYKfNb_svpxsN&q=85&s=50774127e47d73eab842b0e81082792d" width="512" height="594" data-path="images/changelogs/android/Screen_Shot_2022-07-28_at_20.24.07.webp" />
  </Frame>
</Update>

<Update label="v2.2.1" description="2022-07-15">
  **🚀 Improvements**

  We have added some small improvements to the SDK.
</Update>

<Update label="v2.2.0" description="2022-07-13">
  **✨ Improvements**

  <Note>
    👌 Alongside the listed features below, we have performed improvements to our codebase.
  </Note>

  **💳 APMs support**

  Grab Pay, Poli and GCash via Rapyd

  <Frame caption="Payment Prompts">
    <img src="https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/grab_pay.webp?fit=max&auto=format&n=2gUFYKfNb_svpxsN&q=85&s=c47a61c0c9a3fa037819ac3c24e77dc2" width="351" height="408" data-path="images/changelogs/android/grab_pay.webp" />

    <img src="https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/poli_pay.webp?fit=max&auto=format&n=2gUFYKfNb_svpxsN&q=85&s=62c824e5c25a4df91c3960df27d81b56" width="356" height="348" data-path="images/changelogs/android/poli_pay.webp" />
  </Frame>

  **Billing address support 🧾**

  We can now capture the billing address before performing a payment.

  <Frame caption="Payment Prompts">
    <img src="https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/billing_address.webp?fit=max&auto=format&n=2gUFYKfNb_svpxsN&q=85&s=279a1f7f2e5a6f136bff95c5e002fa6b" width="512" height="1081" data-path="images/changelogs/android/billing_address.webp" />

    <img src="https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/android/find_country.webp?fit=max&auto=format&n=2gUFYKfNb_svpxsN&q=85&s=27013d64c73c6da67cab7d4a76915c94" width="512" height="1081" data-path="images/changelogs/android/find_country.webp" />
  </Frame>
</Update>

<Update label="v2.1.0" description="2022-07-07">
  **✨ Improvements**

  *The version 2 of the Headless Universal Checkout is out!*

  <Note>
    💡 Take a look at the [migration guide](/changelogs/migration-guides/sdk-v1-to-v2#android) for updating your integration to version 2.
  </Note>

  **✨ Payments created automatically**

  Primer Headless Universal Checkout | SDK

  Starting 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](https://www.notion.so/Android-SDK-8b4bd28444eb4af283678c9f2b5f46fe?pvs=21) about the changes we made.
</Update>

<Update label="v2.0.1" description="2022-06-20">
  **💳 Dummy Payment Methods**

  Universal Checkout | Payment Methods

  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 😎

  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](https://dashboard.primer.io/payments).

  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.

  <Note>
    💡 Primer's Dummy Payment Methods will come preconfigured with all new sandbox accounts.
  </Note>
</Update>

<Update label="v2.0.0" description="2022-06-08">
  **✨ Improvements**

  *The version 2 of the SDK is out!*
  *This includes a simplified way to integrate Primer*

  <Tip>
    📚 Take a look at the [migration guide](/changelogs/migration-guides/sdk-v1-to-v2#android) for updating your integration to version 2.
  </Tip>

  **✨ Payments created automatically**

  Universal Checkout | SDK

  Creating 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:

  ```kotlin Kotiln theme={"dark"}
  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 💆

  <Accordion title=" For the nerds ❤️">
    *Payment lifecycle callbacks*

    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.

    <Note>
      💡 For more information on these callbacks, take a look at the **Payment Lifecycle Callbacks** section in our new and improved [API reference](https://www.notion.so/API-Reference-e58ee6d184ff4cd7ae2f90c6b28aaaba?pvs=21)
    </Note>

    *Manual payment handling*

    For 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](/checkout/advanced/manual-payment-creation#android-kotlin) 📚
  </Accordion>
</Update>

**🔨 Deprecation**

The Android SDK's move to version 2 has brought a lot of exciting changes and along with these changes, some deprecations.

<Note>
  📚 Please take a look at our Android SDK version 2 [migration guide](/changelogs/migration-guides/sdk-v1-to-v2#android) for a full list of the deprecations made.
</Note>

<Update label="v1.15.0" description="2022-05-23">
  **New payment methods**

  * Added support for Coinbase
  * Added support for OpenNode
  * Added support for 2c2p
</Update>

<Update label="v1.14.0" description="2022-05-11">
  * We have added support for 3DS processor
</Update>

<Update label="v1.12.1" description="2022-04-04">
  * Added support for the RN bridge
</Update>

<Update label="v1.12.0" description="2022-03-29">
  **New payment methods**

  * Added support for Blik

  **✨ Improvements**

  * Dark mode support
  * Fixes in analytics
  * Various performance fixes
</Update>

<Update label="v1.11.1" description="2022-03-17">
  Improvements the Headless Universal Checkout - Beta for cards and APMs (except for Blik, Adyen Dot Pay and Adyen iDeal)
</Update>

<Update label="v1.11.0" description="2022-03-16">
  **New payment methods**

  * Added support for P24 via Mollie
  * Added support for Giropay via Mollie
  * Added support for EPS via Mollie
  * Added support for P24 via PayNL
  * Added support for EPS via PayNL

  **✨ Improvements**

  * Implements the Headless Universal Checkout - Beta for cards and APMs (except for Blik, Adyen Dot Pay and Adyen iDeal)
</Update>

<Update label="v1.10.0" description="2022-03-04">
  **✨ Improvements**

  * Implements the Headless Universal Checkout - Beta for cards and APMs (except for Blik, Adyen Dot Pay and Adyen iDeal
</Update>

<Update label="v1.9.2" description="2022-02-10">
  **✨ Improvements**

  * Improvements to amount calculation
</Update>

<Update label="v1.9.1" description="2022-02-02">
  **✨ Improvements**

  * Improvements to payment method redirections
</Update>

<Update label="v1.9.0" description="2022-02-01">
  **New languages**

  * Danish
  * German
  * Greek
  * Spanish
  * French
  * Italian
  * Norwegian
  * Dutch
  * Polish
  * Portuguese
  * Swedish
  * Turkish

  **✨ Improvements**

  * Improvements to payment method redirections
</Update>

<Update label="v1.8.0" description="2022-01-27">
  **New payment methods**

  * Added support for Xfers payment method.

  **✨ Improvements**

  * Improvements to PayPal tokenization flow
  * Improvements to payment method redirections
  * Added autofocus feature in card form
  * `isVaulted` flag added to `PaymentMethodToken`
  * Performance improvements
</Update>

<Update label="v1.7.0" description="2022-01-11">
  **✨ Improvements**

  * Improvements to tokenization flow
  * Improvements to surcharge UI
  * Support for capturing postal code in card form and observing using client session actions
  * Support for hiding cardholder name in card form
</Update>

<Update label="v1.6.0" description="2021-12-22">
  **New payment methods**

  * Added support for Atome payment method in beta
</Update>

<Update label="v1.5.2" description="2021-12-13">
  Removed deprecated `fetchSavedPaymentInstruments` and `getSavedPaymentMethods` methods
</Update>

<Update label="v1.5.1" description="2021-12-08">
  * Added support for easier integration with Java
  * Better support for Android S
  * Minor UI improvements
  * Surcharge feature now stable
</Update>

<Update label="v1.5.0" description="2021-12-02">
  **✨ Improvements**

  * Adds beta version of surcharging
</Update>

<Update label="v1.4.0" description="2021-11-30">
  **✨ Improvements**

  * New payment methods:  iDEAL, Giropay, Sofort, EPS and Bancontact via Buckaroo
</Update>

<Update label="v1.3.0" description="2021-11-24">
  **✨ Improvements**

  * Added further support for SDK customisation when generating client session.

    [Settings Migration Guide](https://www.notion.so/Settings-Migration-Guide-899484f3dd2149998c2b8f64b00d4f34?pvs=21)

  * New payment methods: Bancontact & iDEAL via Mollie and Giropay & Payconiq via PayNL

  * Added loading payment methods screens
</Update>

<Update label="v1.2.0" description="2021-11-17">
  **✨ Improvements**

  * Added `Primer.cleanup` method. `*This method should be called when disposing the listener in order to free Primer SDK resource.*`
  * Added Adyen payment methods (Vipps, Mobilepay, iDEAL, Dotpay)
  * Additional improvements for PayPal error handling
</Update>

<Update label="v1.1.2" description="2021-11-12">
  **✨ Improvements**

  * Updated to 3DS **1.1.0** version
  * Stability improvements
</Update>

<Update label="v1.1.1" description="2021-11-04">
  **✨ Improvements**

  Added further stability improvements for 3DS flow
</Update>

<Update label="v1.1.0" description="2021-11-03">
  **✨ Improvements**

  * Improved 3DS handling (VAULT/CHECKOUT)
  * Deprecated `PrimerSettings.order` and `PrimerSettings.customer` in favour of configuration set through client session creation
  * Added Adyen AMPs (Giropay, Twint, Trustly, Sofort, Alipay)
</Update>

<Update label="v1.0.1" description="2021-10-12">
  **✨ Improvements**

  * `fetchSavedPaymentInstruments` method has been `deprecated`
  * Improved card form layout and default theming.
  * Enabled 3DS testing in all environments.
</Update>

<Update label="v1.0.0" description="2021-09-28">
  **✨ Improvements**

  * 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](https://www.notion.so/Quick-Start-Universal-Checkout-11aa02b96f9645c6ac587877a0798af2?pvs=21) for further info. `Primer.initialize()` is now deprecated.
</Update>

<Update label="v1.0.0-beta.32" description="2021-10-12">
  **✨ Improvements**

  * Improved `Apaya` redirect url schema logic.
</Update>

<Update label="v1.0.0-beta.31" description="2021-09-22">
  **✨ Improvements**

  * Added support to pre-fill `Apaya` phone number. Please see [documentation](https://www.notion.so/Apaya-5c864da879334584906c4ff12749daa8?pvs=21) for integration steps.
</Update>

<Update label="v1.0.0-beta.30" description="2021-09-06">
  **✨ Improvements**

  * Added support for `Apaya` payment method. Please see [documentation](https://www.notion.so/Apaya-5c864da879334584906c4ff12749daa8?pvs=21) for integration steps.
</Update>

<Update label="v1.0.0-beta.29" description="2021-08-20">
  **✨ Improvements**

  * Added beta support for 3DS dependency.
  * Stability improvements & networking fixes.
</Update>

<Update label="v1.0.0-beta.28" description="2021-08-20">
  ## (ignore)
</Update>

<Update label="v1.0.0-beta.27" description="2021-07-24">
  **✨ Improvements**

  * Fixes issue with card number validation for American Express.
</Update>

<Update label="v1.0.0-beta.26" description="2021-06-29">
  **✨ Improvements**

  * Issue when pressing Android back button after displaying payment flow with `doNotShowUi = true` addressed.
  * Improvements to Klarna payment flow error handling & stability.
  * Optional `completionHandler` added to `TokenizationSuccess` event. Call this to complete flow with error/success screen after completing payment action.
</Update>

<Update label="v1.0.0-beta.25" description="2021-06-29">
  ## (ignore)
</Update>

<Update label="v1.0.0-beta.24" description="2021-06-21">
  **✨ Improvements**

  * 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.
</Update>

<Update label="1.0.0-beta.23" description="2021-06-14">
  **✨ Improvements**

  * Bug fixes for PayPal flows.
  * 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.
</Update>

<Update label="v1.0.0-beta.22" description="2021-05-31">
  **✨ Improvements**

  **✨ Improvements**

  * 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 error handling & SDK stability.
</Update>

<Update label="v1.0.0-beta.21" description="2021-05-31">
  ## (ignore)
</Update>

<Update label="v1.0.0-beta.20" description="2021-05-27">
  **✨ Improvements**

  * 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.
</Update>

<Update label="v1.0.0-beta.19" description="2021-05-18">
  **✨ Improvements**

  * Major improvements to UI for checkout view and managing saved payments.
  * 1-click checkout enabled in default (universal) checkout view.
  * Improved success screens with some customisability.
  * Delete/select saved payment methods enhanced.
  * Overall improvements to stability and UX.
  * No updates to Klarna & direct debit flows.
</Update>

<Update label="v1.0.0-beta.16-18" description="2021-05-10">
  n/a (testing Maven Central)

  * 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](/connections/payment-methods/ach/stripe).
</Update>
