iOS SDK
🚀 New features
This release introduces Apple Pay merchant tokens, a powerful new feature that enables merchants to process recurring payments, subscriptions, and automatic reloads without being tied to specific customer devices.
Ready to get started? Follow our implementation guides to request merchant tokens (MPANs) and integrate this feature into your payment flow.
✨ Improvements
- Added support for MM/YY expiry date format
- Improved ApplePay error categorization
🔧 Fixes
- Reduce console noise for nil remoteUrl in ImageManager
- Reduce excessive validation logging
🛠️ Refactor
- Introduce default values for PrimerError
- Migrated many classes and files to async await
- Clean up UI event posting
🔧 Fixes
- Upgraded Primer3DS which includes a fix for missing CartesBancaires DirectoryServerID mapping.
✨ Improvements
- UIColor: Added
primer
prefix to gray color variables to improve naming consistency and avoid potential conflicts with other libraries.Migration Guide
UIColor.gray100
->UIColor.primerGray100
UIColor.gray200
->UIColor.primerGray200
UIColor.gray300
->UIColor.primerGray300
UIColor.gray400
->UIColor.primerGray400
UIColor.gray500
->UIColor.primerGray500
UIColor.gray600
->UIColor.primerGray600
UIColor.gray700
->UIColor.primerGray700
✨ Improvements
- We have added
CardFormUIOptions.payButtonAddNewCard
to support the “Add New Card” option in the card form flow. - Introduced support for the ‘Continue payment flow’ workflow action to configure checkout outcome. See our documentation for more info.
🔧 Fixes
- We have fixed a crash issue that occurred during NolPay initialization.
✨ Improvements
- We have made several cleanups and improvements across the SDK.
✨ Improvements
- 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.
🔧 Fixes
- We have fixed an issue which resulted in incorrect formatting of the currency strings in our UI for french locales.
🔧 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.
✨ Improvements
- We have made changes to our internal Analytics logging system which will result in fewer unnecessary logs being sent.
✨ 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, Api Reference and Migration Guides. The SDK will continue to use API v2.3 by default.
- Expanded Language Support: The iOS 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. This requires upgrading your
primer-sdk-3ds-ios
dependency to version2.4.2
. For more information on 3DS SDK version, see here.
🧪 Experimental
- 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
✨ Improvements
- API Timeout values have been updated to improve behaviour in the loading phases of the checkout.
🔧 Fixes
- We have fixed an issue where
PaymentInstrumentData.accountNumberLast4Digits
was incorrectly namedPaymentInstrumentData.accountNumberLastFourDigits
when exposed via thePrimerHeadlessUniversalCheckout
interface. Visit our SDK Reference for more information.
✨ Improvements
- It is now possible to vault ACH via Stripe payments, and pay with vaulted ACH via Stripe tokens. See our docs for more info.
- It is now possible to granularly control Apple Pay Billing and Shipping options. See our docs for more.
🔧 Fixes
- We have fixed an issue where the wrong error (
generic-underlying-errors
) was passed when a user cancelled a PayPal payment. Now, the correct error (payment-cancelled
) is reported. - We have updated the default background colour of the default theme for dark mode.
- The close button is now disabled for Klarna during payment processing.
- The success asset is now more prominent in dark mode.
🔧 Fixes
- Updated the 3DS SDK to version
2.4.1
which fixes a crashing issue. - Remove precondition on
presentPaymentMethod
which could cause a crash in certain scenarios.
✨ Improvements
- We have added additional dismissal controls to PrimerUIOptions. It is now possible to dismiss the Primer UI via gestures, an explicit close button, or both. See our SDK reference for more information.
🔧 Fixes
- Fixes for range or index out of bounds crash in the Card Form UI.
- Fixes for a crash in InternalCardComponentsManager.
🔧 Fixes
- Fixed an issue where Adyen Vipps would not fall back to the Web flow in the event that the Vipps mobile app was not installed.
- Fixed an issue where Adyen Blik was not present in PrimerHeadlessUniversalCheckout availablePaymentMethods.
- Various stability improvements.
✨ 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.
🔧 Fixes
- Fixed an issue where the PayPal flow was unusable in the Drop-In Universal Checkout
- Fixed an issue where
PrimerCheckoutData
was nil when reporting an error in payment creation.
✨ Improvements
- Improved initialization: We have strengthened the iOS SDK’s initialization process, ensuring it remains reliable even if users experience connectivity drops. These changes guarantee a smoother experience
- We have made improvements to our internal analytics to facilitate troubleshooting
🔧 Fixes
- Setting the
uiDelegate
viaPrimerHeadlessUniversalCheckout.current.start
now works as expected.
✨ 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 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.
✨ Improvements
Define merchant name on Apple Pay flow.
We now allow merchants to set a user-defined merchant name on the Apple Pay flow.
Details of the changes:
- Create a client session with the desired merchant name as shown here
- The iOS SDK will then show this name on the Apple Pay flow rather than the merchant name on your Primer account.
- Setting this value via PrimerSettings is now deprecated.
🔧 Fixes
- Fixed a crash that could occur when using PrimerSDK from multiple threads.
- Fixed a crash that could occur during Primer3DS initialization.
🔧 Fixes
- We have aligned the card expiry date validation logic between the Drop-In and Headless integrations, which were previously different.
- Fixed a bug in the Klarna Headless implementation where the correct events were not fired during a manual payment flow.
🔧 Fixes
- Fixed a bug in the Klarna Headless implementation where the correct events were not fired during a manual payment flow.
✨ 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.
- We have improved validation of the custom URL scheme setting used for payment methods with native UI.
🔧 Fixes
- We have improved the PayPal payment method token by providing additional data, including the payer’s first name, last name, and external payer ID. For more information, see our SDK reference docs
✨ Improvements
✨ Improvements
- We’ve simplified the way that we make network requests and improved how we log traces and analytics events when requests are made.
🔧 Fixes
- Fix Nol pay Xcode errors
- Addressed an intermittent build failure issue related to
PrimerHeadlessUniversalCheckout
not recognizingPrimerHeadlessNolPayManager
due to specific Xcode build settings and packaging nuances within CircleCI/Fastlane environments. - The update ensures compatibility with Xcode 15.2 and proper handling of nested classes and conditional imports, stabilizing the integration of PrimerNolPaySdk and PrimerSDK.
- Addressed an intermittent build failure issue related to
🔧 Fixes
- Fix Nol pay Xcode errors
- Build failure issue related to
PrimerHeadlessUniversalCheckout
not recognizingPrimerHeadlessNolPayManager
due to specific Xcode build settings and packaging nuances within CircleCI/Fastlane environments.
- Build failure issue related to
🚀 New feature
Klarna EMD support on Drop-in checkout**
We have extended our support for Klarna extra merchant data (EMD) to the Drop-in checkout.
Klarna payment categories have been expanded to allow support for all the available categories on Drop-In, including:
- Pay now
- Pay later: Pay in 30 days
- Pay over time: Pay in 3-4 instalments. First payment right away, then the rest in instalments (no interest)
- Fair financing: Instalment plans of 6, 12, 24, and 36 months with flexible payments (with interest)
Support for Klarna EMD on Drop-in Mobile Checkout
Klarna may request extra merchant data (EMD) based on the merchant segment or consumer services. This additional information helps Klarna enhance risk assessment and improve conversion rates.
You can now dynamically pass any relevant EMD package via the Client Session as described here. Available schemas are documented here.
✨ Improvements
Other Klarna Improvements
- The Klarna Drop-In integration now uses the same code as the headless integration under the hood, resulting in a more robust experience.
- Klarna Drop-In now has a fresh new design.
Upgraded 3DS SDK
This version of the SDK is compatible with v2.3.0
or greater of the Primer 3DS SDK
. See our docs for the full interoperability matrix
.
✨ Improvements
- Bumped minimum iOS version to 13.0
- This means that our SDK now works with apps that target iOS 13.0 and above
- The loading spinner appears more promptly in drop-in checkout after the user submits the payment
- Local card network identification is now significantly faster and more performant
✨ Improvements
- We have included support for Klarna Extra Merchant Data
- In this release we have added the
PrimerHeadlessUniversalCheckoutKlarnaManager
that provides access to theKlarnaComponent
. Using theKlarnaComponent
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. - We’ve made several internal improvements to our analytics service that improve its performance. This also fixes a memory leak that caused a crash in very specific circumstances for older versions of the SDK.
- In drop-in checkout, the card icon now updates correctly whenever the entered card number is changed.
✨ 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.
✨ Improvements since 2.20.1
- Fix NOL pay bug - fetching of the cards
- Implement new currency handling logic
- Update 3DS to the latest version
✨ Improvements since 2.20.0
- Fixes an issue where PrimerSDK had a dependency on KlarnaMobileSDK v2.2.2
💳 APMs support
iDEAL via Adyen
Adds the PrimerHeadlessUniversalCheckoutComponentWithRedirectManager
that provides access to BanksComponent
. Using the BanksComponent
you can easily:
- load list of all supported banks
- submit user’s selection
✨ Improvements since 2.19.0
- Throw error when using NativeUIManager for non-native payment method (#772)
- Improved Errors in the event Apple Pay cannot be presented.
🚀 New Features since 2.18.3
- In this release, our 3DS support has undergone significant enhancements, offering a multitude of improvements that improve the conversion rate of 3DS challenges.
Please note, with this update, compatibility requires the use of the 2.1.0 version of the 3DS SDK (
pod 'Primer3DS', '2.1.0'
) - We have also improved internal analytics by adding additional information to errors that the SDK can encounter. This will enable us to troubleshoot issues much quicker.
✨ Improvements since 2.18.2
- Fixed analytics issue causing high memory usage and occasional freeze
✨ Improvements since 2.18.1
- Fix phone validation
- Add local empty phone validation before sending the string to server
✨ Improvements since 2.18.0
- Fix State Machine for Nol Pay
- Developers can now move through steps as expected
🚀 New Features since 2.17.6
nol Pay
Adds the PrimerHeadlessNolPayManager
that provides following features:
- Listing Nol cars: Listing previously linked Nol payment cards using NolPayLinkedCardsComponent.
- Linking: Link the Nol card to a phone number using NolPayLinkCardComponent.
- Unlinking: Unlink previously linked Nol card using NolPayUnlinkCardComponent.
- Transactions: Execute payments using selected Nol payment cards NolPayPaymentComponent.
✨ Improvements since 2.17.5
- • Add UIKit import to Mock3DSService.swift - fixes Swift Package Manager compilation issue.
✨ Improvements since 2.17.2
- We’ve removed the UIKit import guards from all files
ℹ️ If you encounter any errors or warnings related to UIKit as a dependency, please submit a bug report here.
✨ Improvements since 2.17.1
- Fix issue where Cardholder Name field would not accept spaces in Headless Integration.
✨ Improvements since 2.17.0
- Fix Apple Pay crash
⚠️ If you are using Primer3DS
in your integration, make sure to bump it to v.1.2.0
For detailed documentation and migration guides, please refer to the links provided in the changelog.
🚀 New Features since 2.16.7
-
Headless Vault Manager
Add
PrimerHeadlessUniversalCheckout.VaultManager()
which returns an instance ofPrimerHeadlessUniversalCheckout.VaultManager
. It provides the following features:- Fetch a list of vaulted payment methods.
- Delete a vaulted payment method.
- Validate the additional data used to perform a payment (e.g., validate CVV).
- Perform a payment using a vaulted payment method.
-
Our 3DS service has been completely revamped.
Primer SDK now supports 3DS protocol version
2.2.0
. It includes the following enhancements:- Support 3DS weak validation.
- Support 3DS OOB flow.
- Improve 3DS reporting.
- Set the 3DS sanity check in
PrimerSettings
tofalse
when you are inDEBUG
mode, to disable the device check when testing on the simulator.
-
PrimerPaymentMethodAsset
now exposes the payment method’s friendly name -
Reintroduce showing a payment method directly with the Drop-In UI integration.
-
Support for iPay88
This version is adding support for iPay88 payments in Malaysia. Our documentation has been updated to reflect these changes. You can also find a Migration Guide detailing the changes.
✨ Improvements since 2.16.7
- Fix vaulted payment method on Drop In not getting tapped
- Enhance 3DS auth rates
- Fix checkout not rendering when there are vaulted payment methods
- Make performance improvements on raw data manager validation delegate
- Fix the scenario where the payment method’s image file is missing
- Print console warning when a
decisionHandler
is not implemented - Observability improvements
- Improves cancellation happening from 3rd party payment apps through deep links
- Fix Atome cancellation from within the web view
- Fix UI unresponsiveness happening on iOS 16.0.x in certain cases
✨ Improvements since 2.17.0-rc.16
- Fix vaulted payment method on Drop In not getting tapped
⚠️ If you are using Primer3DS
in your integration, make sure to bump it to v.1.2.0
✨ Improvements since 2.17.0-rc.15
- Enhance 3DS auth rates
✨ Improvements
Headless Vault Manager
Add PrimerHeadlessUniversalCheckout.VaultManager()
which returns an instance of PrimerHeadlessUniversalCheckout.VaultManager
. It provides the following features:
- fetch a list of vaulted payment methods
- delete a vaulted payment method
- validate the additional data used to perform a payment (e.g. validate CVV)
- perform a payment using a vaulted payment method
✨ Improvements since 2.17.0-rc.14
- Fix issue with Vipps getting presented
⚠️ This version has a know bug and won’t render the Universal Checkout if there’re vaulted payment methods for the user defined in the client session
⚠️ If you are also integrating Primer3DS
, make sure to install v.1.1.2 to avoid archiving issues with Xcode 14.3.1
✨ Improvements since 2.17.0-rc.12
- Apply fix on PayPal vaulting
- Fix Klarna archiving issue
✨ Improvements
⚠️ This version has a know bug and won’t render the Universal Checkout if there’re vaulted payment methods for the user defined in the client session
⚠️ If you are also integrating Primer3DS
, make sure to install v.1.1.2 to avoid archiving issues with Xcode 14.3.1
- 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
- Set 3DS sanity check in
PrimerSettings
tofalse
when you are inDEBUG
mode, to disable the device check when testing on the simulator.
Check out our detailed documentation here
✨ Improvements since 2.17.0-rc.11
- Minor fixes
🔧 Fixes
- Take into account tax and discount on Apple Pay items
- Prioritize merchant amount over total amount
- Only take into account surcharge when merchant amount is not set
🔧 Fixes
- Take into account tax and discount on Apple Pay items
- Prioritize merchant amount over total amount
- Only take into account surcharge when merchant amount is not set
🔧 Fixes
- Take into account tax and discount on Apple Pay items
- Prioritize merchant amount over total amount
- Only take into account surcharge when merchant amount is not set
🔧 Fixes
- Expose payment instrument data on tokenization callback
- Fix issue that prevented the client session from being updated when restarting headless checkout
- Make iPay88
userContact
optional
🔧 Fixes
- Fixed SDK crashing when Primer3DS is not included
- Fixed build issue due to iPay88 when archiving
⚠️ SDK is crashing on this version when Primer3DS pod is not included. Please update to 2.17.0-rc.9
version.
✨ Improvements since 2.17.0-rc.7
- Modify iPay88 validation rules
⚠️ SDK is crashing on this version when Primer3DS pod is not included. Please update to 2.17.0-rc.9
version.
✨ Improvements since 2.17.0-rc.6
- Improved analytics
⚠️ SDK is crashing on this version when Primer3DS pod is not included. Please update to 2.17.0-rc.9
version.
✨ Improvements since 2.17.0-rc.5
- Improved analytics
⚠️ SDK is crashing on this version when Primer3DS pod is not included. Please update to 2.17.0-rc.9
version.
✨ Improvements
PrimerPaymentMethodAsset
now exposes the payment method’s friendly name
✨ Improvements since 2.17.0-rc.4
- Improved analytics
- Fix scenario where payment method’s image file is missing
- Print console warning when a
decisionHandler
is not implemented
✨ Improvements
This version is adding support for iPay88 payments in Malaysia.
Our documentation has been updated to reflect these changes. You can also find a Migration Guide detailing the changes.
✨ Improvements since 2.17.0-rc.2
- Contains the features and improvements of 2.16.5
- Observability improvements
- Improves cancellation happening from 3rd party payment apps through deep links
- Fix Atome cancellation from within the webview
- Fix UI unresponsiveness happening on iOS 16.0.x on certain cases
- Fix iOS console warnings
🔧 Fixes
- Fix an issue that prevented 3DS from working with some card networks (AMEX, Maestro, Discover, and JCB)
- Fix an issue that prevented 3DS from working when the billing address is set or updated after the SDK is initialized with a client session
- Improve 3DS visibility
✨ 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 detailing the changes.
✨ Improvements since 2.17.0-rc.1
- Contains the features and improvements of 2.16.3 and 2.16.4
- Remove Google Pay from the list of payment methods
⚠️ This version introduces breaking changes for Headless Checkout
✨ 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 detailing the changes.
This release candidate will soon be merged into the main releases.
✨ Improvements since 2.16.2
- Contains the features and improvements of 2.16.1 and 2.16.2
- Remove Google Pay from the list of payment methods
🔧 Fixes
- Fixing the MBWay local asset loading
- Removed the
GENERATE_INFOPLIST_FILE
as part of thexcconfig
of thePrimerSDK
podspec as it was causing an issue upon archiving the hosting apps - Added
CODE_SIGNING_ALLOWED => NO
toxcconfig
inpodspec
to remove the Signing requirement introduced in Xcode 14+
🔧 Fixes
- Fixed the Contributing link in our SDK Readme
- Added the
GENERATE_INFOPLIST_FILE
as part of thexcconfig
of thePrimerSDK
podspec - Improved the Cardholder Name field availability in Card form
🔧 Fixes
- Fixed an issue with regards to the availability of retrieving some assets
- Small improvements in the way the Country selector in billing address gets loaded
🔧 Fixes
- Fixed 3DS on frictionless flows
- Sending analytics events with correct
sdkVersion
In this version we are obsoleting the 3DS vaulting via the PrimerSettings.PrimerCardPaymentOptions
.
Above flow is now obsoleted and 3DS will always follow workflows.
🔧 Fixes
- We have fixed wrong cardholder name checkout modules evaluations which resulted in not requesting cardholder name on headless
- We have fixed raw data validation callbacks not being fired on headless
🔧 Fixes
Fixing the Blik flow.
ℹ️ This fix solves the issue affecting versions from 2.7.0
to 2.13.0
. We recommend updating to this 2.13.1
version.
✨ Improvements
👌 Alongside the listed features below, we have performed improvements to our codebase.
💳 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 🙌
🔧 Fixes
Fixed on Headless Universal Checkout with ADYEN_BANCONTACT_CARD
flow failing on some scenarios.
✨ Improvements
👌 Alongside the listed features below, we have performed improvements to our codebase.
💳 APMs support
Bancontact via Adyen
In this version of the SDK we added the support for Bancontact Debit via Adyen.
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.
This update also bring an improvement of CardFormUIManager
, now accepting other Card inputs to perform payments.
In order to do so, you can now initialize the CardFormUIManager
with **public** **init**(paymentMethodType: String)
as opposed to its classic initializer which has been utilizing the standard PAYMENT_CARD
payment method type.
Apple Pay billing address
Last but not least, we are now capturing the billing address out of an Apple Pay payment.
To enable this feature, when configuring the Checkout with the PrimerSettings
, developers can setup PrimerApplePayOptions
with another parameter: isCaptureBillingAddressEnabled
. The SDK will take care of showing the option of adding the billing address and capture it.
✨ Improvements
👌
Alongside the listed features below, we have performed improvements to our codebase.
In this version of the SDK we improved the raw data validation in the Headless Universal Checkout flow.
✨ Improvements
👌 Alongside the listed features below, we have performed improvements to our codebase.
In this version of the SDK we added the support for Multibanco via Universal Checkout.
Multibanco Payment Method now is fully supported via Headless Universal Checkout (Beta) and the standard SDK implementation.
PromptPay is also now supported via Omise too 🙌.
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
`func primerHeadlessUniversalCheckoutDidReceiveAdditionalInfo(_ additionalInfo: PrimerCheckoutAdditionalInfo?)**
✨ Improvements
👌 Alongside the listed features below, we have performed improvements to our codebase.
The PrimerKlarnaSDK
is now also supported on Swift Package Manager. No changes are required if you’re integrating the PrimerSDK
with the SPM, since it’s going to add the Klarna SDK by default.
Also there’s a fix on the infinite loading with Xendit.
Try it out and let us know what do you think 🙌!
✨ Improvements
👌 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 iOS SDK (with CocoaPods, SPM will soon follow). It also add MultiBanco and MBWay support on Headless Universal Checkout raw data manager.
Also there’s a fix on local images not being returned by the HUC.
Try it out and let us know what do you think 🙌!
✨ Improvements
This release changes the way that Klarna is integrated, and switches on Klarna’s native iOS SDK (with CocoaPods, SPM will soon follow).
Try it out and let us know what do you think 🙌!
✨ Improvements
👌 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 👇
✨ Improvements
👌 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 🙌!
✨ Improvements
👌 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
, hence accessible via: .paymentMethod
.
In this version, we are no longer exposing the enum
, and return a plain String
instead.
- Internal codebase refactors
- Fix Danger check
- Fix checkout with Adyen iDeal
✨ Improvements
The 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 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 about the changes we made.
- Fix Klarna checkout
- Dummy APMs
✨ Improvements
The 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 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 clientTokenCallback
, onTokenizeSuccess
and onResumeSuccess
delegate functions:
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, :chef-kiss: - 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 ❤️
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.
💡 For more information on these callbacks, take a look at the Payment Lifecycle Callbacks section in our new and improved API reference
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 📚
🔨 Deprecation
The iOS 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 iOS SDK version 2 migration guide for a full list of the deprecations made.
- Add Klarna checkout
- Add the HUC beta feature
- Fix vaulting with PayPal
- Return error when vaulting without a customer id in the client session
- Added following APMs
- Coinbase
- Opennode
- 2c2p
- PayShop
- Minor codebase improvements
- Fix Apple Pay merchant name not showing
- Add the
Processor3DS
functionality
- Refactor Apple Pay cancellation flow
- Change primer error message to something generic
- Translations updates
- Better accents handling when uppercased text is presented
- Better handling of subunits for VND (Vietnamese Dong) currency
- Fixes cardholder name field not deleting characters
- Changes cardholder name field’s keyboard type
- Fixes Klarna tokenization when vaulting
- Fixes disabled user interaction on Dot Pay
- Fixes Klarna and Twint logos
- Added following APMs
- Paytrail
- Interac
- Client session validation improvement via dedicated BE API
- React Native bridge fixes
- PayPal logo aligned with other platforms
- Other UI improvements
- Adds payment method Blik
- Adds React Native helpers.
- Added right-to-left support
- Various bug fixes and enhancements
- Fix Apple Pay merchant name not showing
- Implements the Headless Universal Checkout for cards and APMs (except for Blik, Adyen Dot Pay and Adyen iDeal)
- Add missing localized strings
- Fix PayNow image color
- Fix compiler warnings
- Remove submodule responsible for localization because it was blocking SPM
- Make License file a resource
- Fix SPM import errors
- Improved UI for loading, success & error screens
- Fix APM redirect failing on some cases
- Remove some warnings
- Added the support for the 12 new languages;
- Danish
- Dutch
- French
- German
- Greek
- Italian
- Norwegian
- Polish
- Portuguese
- Spanish
- Swedish
- Turkish
- Improvements to payment method redirections
- Add Xfers
- Add payer info on PayPal
- Fix RN bug
- Tokenization will always return a
SINGLE_USE
token - Add locale in analytics
- Support for capturing postal code in card form and observing using client session actions
- Additional currencies and associated symbols
- Improved error handling
- Improvements to surcharge UI
- Autofocus on the next field in the card form feature added.
- Add Atome Payment Method in beta
- Fix replacing that was replacing country code.
- Ignore client session warning if client session has already modified the settings
- Fix bug with enum’s default case.
- Fixes dark mode colors
- Fixes searchfield return button tap bug
- Add missing ”+” on payment methods surcharge
- Changes amount in minor units in the example app
- Sort picker view rows in the example app alphabetically
- Fixes client token env issue
- Fixes Apaya redirection for subdomains
- Add tests
- Minor fixes
- Minor fixes
- Minor fixes
- Surcharge feature stable
- Adds surcharge functionality
- Adds client session actions (documentation)
- Fix laggy cardnumber field
- Various fixes
- Adds Bancontact, EPS, Giropay, iDeal and Sofort via Buckaroo
- Minor fixes on the Example app
- Minor fix on PayPal presentation
- Deprecates
amount
,currency
,countryCode
,customerId
,customer
,billingAddress
&orderItems
fromPrimerSettings
in favour of setting them in the client-session with POST/client-session
.
- Deprecates
PrimerTheme
and introducesPrimerThemeData
. - Restructure SDK theming
- Adds Payconiq, Giropay & Bancontact via PayNL, and iDeal & Bancontact via Mollie
- Focus on cardnumber field when opening card form
- Provide error when a payment method hasn’t been configured
- Provides the functionality to change the background view’s color
- Integrate with client session (documentation)
- Fixes Apaya redirection for subdomains
- Fixes status bar bug on Apaya webview
- Adds iDeal & DotPay view Adyen
- Fixes 3DS challenge not being presented when opted-in in scenes
- Hotfix for broken case, and its presentation.
- Adds payment methods
- iDeal
- Hoolah
- Ali Pay
- Trustly
- Giropay
- Twint
- Fixes Apaya crash when presenting and dismissing almost at the same moment.
- Fixes Apaya bug when dismissed.
- Add card network and validation icons on the card form
- Bug fixes
- Bump
- Fix Apple Pay bug on React Native
- Fix resume handler protocol in certain situations.
- Adds dynamic 3DS logic
- Applies minor fixes
- Fixes unknown payment method parse.
- Fixes SDK presentation when opted-in to
UISceneDelegate
- Fixes Swift Package Manager installation
- Deprecates
showCheckout(_ controller:, flow:)
in favour of:showUniversalCheckout(on:)
showVaultManager(on:)
showPaymentMethod(:, withIntent:, on: UIViewController)
- Applies minor fixes
- Fixes failing tests
✨ Improvements
- Phonenumber for Apaya can be passed in
PrimerSettings.Customer
- Minor fixes
✨ Improvements
- Add the Apaya payment method
- Fix card view validation
- Apply minor fixes
✨ Improvements
- Fix configuration parse bug on staging
- Add missing Klarna
tokenDetails
on tokenization - Fix bottom view bouncing when the keyboard was presented at the same time as a push animation
- Fix bottom view scrolling bug on universal checkout and vault manager
Breaking Changes
- Delegate function’s
clientTokenCallback
completion handler has been modified.
✨ Improvements
- Delegate functions
tokenAddedToVault
,onTokenizeSuccess
,onCheckoutDismissed
,checkoutFailed
are now optional. - Deprecate
authorizePayment
delegate function in favour ofonTokenizeSuccess
. - Fix return & cancel urls for PayPal checkout
✨ Improvements
- Add cancel error (
domain: "primer", code: 1500
) - Add UI tests
- Embed PromiseKit for future use
✨ Improvements
- Automatically redirect from Klarna to BankId (if installed)
- Fix UI bugs on universal checkout & vault
- Fix Apple Pay cancel from button
✨ Improvements
- Fix dismissing root view controller on error
- Fix flows
- Deprecate
authorizePayment
in favor ofonTokenizeSuccess
Features
- Add ApplePay
✨ Improvements
- Add ApplePay functionality.
- Add PENDING amount functionality on
OrderItem
. Initializer throws errors if not initialzied correctly. - Add payment networks
- Change the order of fields on the card form view.
- Modify extensions access levels.
- Use subclasses and extend them, if needed.
- Remove duplications and unused functionality.
✨ Improvements
countryCode
can be passed from the backend or, optionally, on the SDK. BackendcountryCode
has higher priority.- Fix wrong error description.
- Expose
LocaleData
and let it be set on thePrimerSettings
object. If noLocaleData
is provided the SDK will default to the system’sLocale
. - Modify classes, protocols and extensions access level.
✨ Improvements
- Validate
token
parameter on webview redirects - Catch
cancel
state on webview redirects - Refactor webview process, work with a completion handler instead of
viewWillDisappear
- Expose errors
- Move various functionalities from view controllers’ view life-cycle to more appropriate places
- All public facing API call are dispatched on the main queue (for now)
- Add & fix Klarna validations
- Fix missing
super()
calls - Add scheme variable for logging and default it to false
- Remove alerts
- Delegate methods are called on the main queue
- Remove unused variables. Modify one-liners to be more readable.
✨ Improvements
- Provide
isInitialLoadingHidden
param which hides the initial loading view - Refactor the success/failure view
- Expose errors trough the
checkoutFailed(with:)
delegate function - Update icons
Bug fixes
- Remove card scanner button
- From vault, move back to checkout if no card is present
- Remove
Add new card
from the vault manager - Replace
Klarna customer token
copy with user’s Klarna email
Bug fixes
- Fix Swift Package Manager bundled resources
- Fix Swift Package Manager localization strings
- Update Swift version to
5.3
✨ Improvements
- Introduce the Klarna payment method (in beta)
- The Vault Manager now supports vaulting PayPal
- Add Swift Package Manager integration support
- Various performance and size optimisation
Bug fixes
- Include toolbar above keyboard on date picker
- Fix buggy behaviour of RN bridge
- Improve the validation of the IBAN field in the Direct Debit form
⚠️
If you are also integrating Primer3DS
, make sure to install v.1.1.2 to avoid archiving issues with Xcode 14.3.1