Enabling Cards for Mobile Wallet
All cards (physical and virtual) can be configured for Mobile Wallet. Mobile Wallet enablement allows you to pay using your phone, via Apple, Google, or Samsung Pay. This setup can take around six weeks and requires some design and legal work.
Setup Process
- Notify your Customer Success Manager that you would like your cards to have Mobile Wallet functionality
- Send Mobile Wallet Metadata to Unit
- Mobile Wallet Card Art: The simplest way to do this is using the same card art you use for your physical card design. If you choose this route, you do not need to provide us with any new card art.
- If you choose to, you can design a new graphic for the Mobile Wallet cards. If you do this, please send a 1536x969px .png file in landscape orientation. Do not include the chip, cardholder name, PAN, expiration date, or rounded edges. Please include a white or Visa-blue Visa logo.
- Color Codes: The RGB color codes used in your card design [ex. White (255, 255, 255)]
- App Icon: A 100x100px .png file of your app icon, with the color going all the way to the edges (no rounded corners)
- Card Label: What would you like the card to be called when it’s added to the wallet?
- Sign or View Apple Mobile Wallet Terms and Conditions
- Unit sends T&C’s for you to sign. If you are issuing cards to businesses, you don’t need to sign, only view these terms. We get these T&C's directly from Apple and they are standard for all consumer BINs. There are no T&C's for Google or Samsung Pay, but we will set these up for you.
- Complete your Visa Cardholder Agreement
- Visa requires all customers to agree to these terms before adding a card to Mobile Wallet
- Publish your Privacy Policy and Terms and Conditions on your website
- Visa uses these in the setup of your Mobile Wallet and customers can access them via Mobile Wallet by clicking “Additional Information” on their cards
- Your Customer Success Manager will inform you when your cards are ready to add to wallet
Add to Mobile Wallet
Adding a card to a Mobile Wallet (e.g. Apple Pay, Google Pay) without the "Add to Mobile Wallet" integration requires scanning a physical card with a device camera or manually typing a card number into the Wallet. By implementing the "Add to Mobile Wallet" flow described below, your end customers can add their card to a digital wallet with one tap, from within your mobile app.
Benefits
Allowing your end customers to add their card to a digital wallet in seconds from within your app, immediately after creating a debit card (or any point thereafter), contributes to a decrease time-to-first-use and increases the potential interchange revenue by making it easier to use the card.
Customer Experience

- Within your mobile app, you'll add a button that will allow your end customer to add their card to their relevant mobile wallet.
- The customer will review and agree to terms and conditions, and then immediately be able to use the card from within the wallet.
Pre-requisites
-
You’ll need to have an executed NDA with Unit.
-
The functionality is only available for mobile applications (native iOS/Android, or using a technology like React native or Flutter)
-
If your cards have not been previously enabled for mobile wallet support, there are a few preliminary steps Unit can help you with.
- Your BINs will need to be configured to allow tokenization. If this is not already complete, contact your Customer Success Manager. Setting up your BIN for tokenization can take up to 4 weeks.
- You’ll need to provide mobile wallet card art (see the Card Issuance Guide for more information).
-
Your BINs will need to also be installed and configured for the mobile wallet SDK with Visa. Contact your Customer Success Manager to ensure this is configured. Setting up your BIN for SDK use takes 10-20 business days and must be complete before testing can begin.
Getting Started
Contact your Customer Success Manager to begin implementation on Add to Mobile Wallet functionality, including getting your BINs configured for the mobile wallet SDK with Visa.
Compliance
- Deposit Agreement: If your cards already support mobile wallets, no additional language needs to be incorporated.
- End Customer: Unit and Visa will ensure the correct terms and conditions are presented to and consented by your end customer before adding the card to their digital wallet.
- Partner Agreements: You may need to sign agreements with each digital wallet provider, see Tech Integration details below.
Tech Integration
-
End Customer User Interface
- Your user interface will need to instruct an end customer to add their debit card to a mobile wallet, according to their device type (iOS or Android).
- The correct terms for each wallet will be presented to and consented by your end customer.
-
Backend
- Review Unit’s API documentation for Add to Mobile Wallet.
- Contact Unit for Visa's In-App Provisioning SDK binaries, App ID
-
Sample Apps
- Unit provides three sample apps: Android, iOS and React Native
- Sample apps cannot be used with a simulator
- Available upon request
-
Testing: Once Unit has confirmed your BIN is configured for SDK use at Visa,
- Visa requires testing in production.
- The SDK imposes a limit of 7 provisioning attempts per device in a 24 hour period. Contact your Customer Success Manager if you encounter an issue.
- iOS apps should be distributed using TestFlight, no simulators.
iOS
Apple Pay Prerequirements
Request Apple Pay In-app provisioning entitlement
-
For each production instance of the app that will be used, get the Mobile App Name, Team ID, and Adam ID.
-
The Mobile App Name and the Adam ID can be found in the App Store Connect after selecting one of your apps:

-
The Team ID can be found in the Apple developer account under "Membership" section:

-
Email applepayentitlements@apple.com to request Apple Pay in-app provisioning entitlement.
- In the email, send Mobile App name, Team ID, and Adam ID for each production instance of the app.
- Once entitlement is granted by Apple, include the entitlement into provisioning profile
Setup your App in Apple Developer Portal once entitlement is granted by Apple
Add the in-app provisioning entitlement
- Sign in to your Apple developer account.
- Navigate to 'Certificates, Identifier & Profiles'.
- Select "Distribution" underneath the "Profiles" heading on the sidebar.
- Select the distribution iOS provisioning profile that will be used to deploy the app to the iTunes App Store.
- Select "Apple Pay In-App Provisioning Distribution" entitlement from the drop down to add the entitlement to the profile.
- Once the entitlement is added, follow the standard process to release the app into the App Store.
Add Wallet Capability
- Sign in to your Apple developer account.
- Navigate to 'Certificates, Identifier & Profiles'.
- Select "App IDs" underneath the "Identifiers" heading on the sidebar.
- Select the app identifier that will be used to deploy the app to the iTunes App Store.
- Under "Capabilities" tab, select the "Wallet" capability:
Integration steps
This section describes the technical steps needed to integrate with Visa's SDK and add a Unit card to the mobile Wallet.
Xcode setup verification
Wallet Capability
- Go to "Signing & Capabilities" tab of your target.
- Verify that Wallet capability is there.
In-App Provisioning entitlement
- Open your project
.entitlementfile in Xcode. - Add the Boolean key
com.apple.developer.payment-pass-provisioningis set to1(true).
Add Visa SDK to your Xcode project
-
Drag and drop the following frameworks into the XCode project:
- VisaPushProvisioning.xcframework
- VisaInAppModuleCore.xcframework
- VisaAnalytics.xcframework
- VisaFeatureModuleCore.xcframework
- VisaMobileFoundation.xcframework
- RLTMXProfiling.xcframework
- RLTMXProfilingConnections.xcframework
-
Select "Copy items if needed" (if not already selected) and click on "Finish".
-
Make sure "Embed & Sign" is selected for all the above XCFrameworks.
Visa SDK Configuration
Inside the application didFinishLaunchingWithOptions method in the AppDelegate.swift, configure VisaInAppCore as follows:
// Setup Visa SDK Config
let visaInAppConfig = VisaInAppConfig(environment: .Production, appId: "b8186bd9-fcba-b77a-11e3-1c0d2e5a3501")
do {
try VisaInAppCore.configure(config: visaInAppConfig)
} catch {
// handle error
}
Setup the environment (.Production or .Sandbox).
Add to Wallet flow
The following diagram demonstrates the Add to Wallet flow.
Below the diagram, you will find an explanation for each step in the flow.

Step 1 - Hold a strong reference to VisaPushProvisioningInterface
var vpInterface: VisaPushProvisioningInterface?
Step 2 - Initialize the VisaPushProvisioningInterface instance and implement the VisaPushProvisioningListener
Initialize the VisaPushProvisioningInterface instance in the init() method of your class:
vpInterface = VisaPushProvisioningInterfaceFactory.createPushProvisioningInterface(listener: self)
Declare the VisaPushProvisioningListener methods, we will implement them later:
func initializationSuccess(pushProvisioningInterface: VisaPushProvisioningInterface, response: VPInitResponse) { }
func initializationFailure(pushProvisioningInterface: VisaPushProvisioningInterface, error: VPError) { }
func supportedWalletSuccess(pushProvisioningInterface: VisaPushProvisioningInterface, response: VPSupportedWalletResponse) { }
func supportedWalletFailure(pushProvisioningInterface: VisaPushProvisioningInterface, error: VPError) { }
func cardProvisioningSuccess(pushProvisioningInterface: VisaPushProvisioningInterface, response: VPCardProvisioningResponse) { }
func cardProvisioningFailure(pushProvisioningInterface: VisaPushProvisioningInterface, error: VPError) { }
Step 3 - Initialize Visa SDK and get the signedNonce
Call to initialize() method
self.vpInterface?.initialize()
Handle initialization callbacks of the VisaPushProvisioningListener
func initializationSuccess(pushProvisioningInterface: VisaPushProvisioningInterface, response: VPInitResponse) {
// Get the signedNonce
let signedNonce = response.signedNonce
}
func initializationFailure (pushProvisioningInterface: VisaPushProvisioningInterface, error: VPError) {
// handle error
}
Step 4 - Get wallet payload from Unit API
Get the mobile wallet encrypted payload for a specified Unit card from Unit API. Read more details in Unit get mobile wallet payload docs.
Step 5 - Get supported wallets
Call to getSupportedWallets(request: VPSupportedWalletRequest) method using the payload from step 4
let request = VPSupportedWalletRequest(encPayload: payload)
self.vpInterface?.getSupportedWallets(request: request)
Handle getSupportedWallets callbacks of the VisaPushProvisioningListener
func supportedWalletSuccess(pushProvisioningInterface: VisaPushProvisioningInterface, response: VPSupportedWalletResponse) {
let wallet = response.wallets[0]
}
func supportedWalletFailure(pushProvisioningInterface: VisaPushProvisioningInterface, error: VPError) {
// handle error
}
Step 6 - Start card provisioning
Call to startCardProvisioning(request: VPSupportedWalletRequest, initialView: UIViewController) method
// use a supported wallet to initialize the VPCardProvisioningRequest
let request = VPCardProvisioningRequest(walletCode: wallet.code, walletName: wallet.name)
// call to startCardProvisioning() with the request and a UIViewController to show the Apple Pay screen on
// if your current class is a UIViewController, you can pass 'self'
self.vpInterface?.startCardProvisioning(request: request, initialView: self)
Handle startCardProvisioning callbacks of the VisaPushProvisioningListener
func cardProvisioningSuccess(pushProvisioningInterface: VisaPushProvisioningInterface, response: VPCardProvisioningResponse) {
// update wallet status for Wallet
// provisioning flow completed, you can update the UI
}
func cardProvisioningFailure(pushProvisioningInterface: VisaPushProvisioningInterface, error: VPError) {
// handle error
}
iOS - Add to Wallet Sample App
Steps Before running the sample app
- Open the
UnitAddToWalletSampleApp.xcworkspaceproject located inUnitAddToWalletSampleAppfolder. - Open
UNConstants.swiftfile. - Set the
customerTokenvariable with your Unit customer token:
static let customerToken: String? = YOUR_CUSTOMER_TOKEN
- Set the
cardIdvariable with your Unit's cardId:
static let cardId: String? = YOUR_CARD_ID
- In
UnitAddToWalletSampleAppfolder, runpod installin the command line.
Apple In-App Provisioning Entitlement
Important: In order to fully demonstrate the add to wallet flow, you should set your app bundle identifier that granted access of In-App provisioning from apple. If you didn't grant it yet, you can follow the following steps to simulate the flow on a simulator:
Setup to run on a simulator
- Open
UnitAddToWalletSampleApp.entitlementsfile. - Add the
com.apple.developer.payment-pass-provisioningentitlement to the dictionary. - Set the added entitlement type to Boolean and set its value to
1.
For example:
<dict>
<key>com.apple.developer.payment-pass-provisioning</key>
<true/>
...
</dict>
Running the sample app
- After running the sample app, your customer card should appear on screen.
- Tap on the "Add To Apple Wallet" button.
- See the logs printed in your screen for more details.
Android
If you elect to support Google Pay push provisioning, the following represents some of the steps that are required by Google.
Google Pay Prerequirements
- Create an account in the Google Developer Portal, if one does not already exist, and make sure you have access to this link. if you don't have access, then you should request access.
- Ensure that you (and any mobile app providers/developers) have executed any required CTA agreements, as well as the Google NDA, via the Google Developer Portal
- Verify that your client BIN(s) are token eligible and set up to support the Google Pay wallet type (Unit can assist with this step)
Google's step-by-step instructions for apps that intend to use Google Pay
Steps that are required before the start of the Visa Digital Enablement SDK integration
Step 1: UX/branding review
-
Optional: You may download Google's sample app to further understand the branding guidelines
-
Review and adhere to Google's branding and user experience requirements
-
Option 1: Use Unit's common Visa presentation, located in the provided zip directory under unit-common-README.md.
-
Option 2: Set the assets independently:
- Download the Assets
- Add the assets to your project
- Follow the instructions mentioned here
-
-
Create a slide deck of images with one screen per page of the full user journey of your app starting from the login screen. Here's an example of an app that follows the guidelines:

-
Complete the user experience branding review with Google (watch the requirements and then fill this form) with the following information:
-

You should receive a response to your request within 2 business day.