How Push Provisioning works
Introduction
Push Provisioning allows a cardholder to add their card to a digital wallet directly from your app, streamlining the process and enhancing the user experience. Here’s how it works:
-
User Initiates the Process
The cardholder taps the "Add to Wallet" button from within your app. This triggers the Push Provisioning workflow. -
Card Tokenisation
The card details are securely tokenized by Weavr. Tokenization replaces sensitive card information with a unique identifier (token) that can be safely used for transactions by the different parties involved. -
Secure Communication with Wallet Provider
The tokenised card data is sent to the respective digital wallet provider (i.e. Apple Pay or Google Pay) through a secure channel. -
Verification and Approval
The wallet provider verifies the tokenised data with the card issuer or network. This step ensures the card is valid and authorised to be provisioned. -
Card Added to Wallet
Upon successful verification, the card is added to the digital wallet, ready for use in contactless payments (by tapping the phone), or online transactions.
By integrating Push Provisioning into your app using Weavr’s Mobile SDK, you can offer a seamless and secure way for users to add their cards to digital wallets, reducing friction and enhancing the overall user experience.
Implementation overview
You need the following pre-requisites before you can call the SDK to provision a card:
- Your app allow-listed by Token Service Providers (TSPs) and Digital Wallets.
- An access token (representing the user's identity).
- The card data.
- The card artwork, which needs to comply with the following rules:
- Be either vector PDF (recommended) or a raster PNG file
- Have a resolution of 1536 x 969
- Size no larger than 4 MB
- Have square (not rounded) corners
- Exclude elements that are only relevant for physical cards (such as the card number, hologram, chip)
- Must be in landscape orientation
- Contactless indicator may be added (indicating NFC payments can be made).
- The status of the card within the digital wallet.
Note that the specific SDK methods to achieve the journey outlined below are platform dependent. There are specific implementation guides for Android, iOS and ReactNative.
Authenticating your user
In order to provision a card from your app, you must have a valid access token of a logged-in user that authenticates your user within our system.
You can obtain an access token via POST /login_with_password
in conjunction with the appropriate mobile login component; or via the mobile Biometric Authentication Component.
Fetching card data
Next, you will need the card data to provision it in your frontend. This data can be fetched via the GET /managed_cards
endpoint.
You must ensure that the card can be provisioned by checking the properties within the digitalWallets
key:
pushProvisioningEnabled
andwalletsEnabled
true.artworkReference
has an appropriately approved code (e.g. XXX001). Approval should be coordinated with our Support team.
From the data received, the following properties need to be passed to the SDK during the provisioning flow:
- Card
id
. - Card
friendlyName
as the card description. cardNumberLastFour
as the card's last four digits.nameOnCard
as the card holder's name.
Check if the card can be added to the digital wallet
Before the card can be provisioned, you need to confirm via getCardStatus
, that the card is in a valid state to be provisioned.
If it is not, you should hide the "Add to Wallet" button, and display to the user that the card has already been added.
The brand guidelines for Apple and Google wallets are both quite strict. Make sure you follow the platform documentation closely to avoid having your app rejected during app reviews.
Additionally, each platform has its own nuances regarding card states, refer to the platform documentation for more details.
Triggering the provisioning process
Once you have the relevant data, and you have checked that the card can be provisioned, you may display the "Add to Wallet" button to the user.
Upon interaction, the button triggers the provisioning flow: