

Before you start
Overview
| Component | Role |
|---|---|
| Partner App | Displays the Add to Wallet button and integrates the SDK |
| MeaWallet SDK | Handles wallet provisioning logic |
| Apple Pay / Google Pay APIs | Perform tokenization and wallet provisioning |
| Rain | Provides configuration, credentials, and card data |
Supported platforms
- iOS: Apple Wallet
- Android: Google Wallet
Integration checklist
Apple Pay
Sign the Apple Pay Program Manager Agreement
Receive configuration file and credentials
- SDK configuration file
- Repository credentials
Provide Apple app information
| Field | Notes |
|---|---|
| Team Name | |
| Team ID | Production |
| Adam ID | Production |
| Apple ID | |
| Bundle ID | Production |
| Country of business headquarters | |
| App framework | React Native or Native |
Production activation
- Rain will notify MeaWallet to activate your config to production.
- MeaWallet activates your production provisioning environment.
- MeaWallet promotes your configuration to production.
Install the MeaWallet SDK
Implement push provisioning and Wallet Extensions
MppCardDataParameters, use cardId and cardSecret from Rain, not encrypted card data. See Apple Pay implementation notes for details.Enable Card Continuity
Implement Apple Pay marketing requirements

Submit validation video
- Push provisioning flow
- Wallet Extensions
- Card Continuity behavior
- Apple Pay marketing materials
Test in Production
Google Pay
Request Google push provisioning API access
Receive configuration file and credentials
- SDK configuration file
- Repository credentials
Review the MeaWallet docs
Production activation
- Rain will notify MeaWallet to activate your config to production.
- MeaWallet activates your production provisioning environment.
- MeaWallet promotes your configuration to production.
Install the MeaWallet SDK
Implement push provisioning
Test in Production
Common integration mistakes
Using Unified push provisioning for Google Pay
Google Pay integrations must use Legacy push provisioning. Unified push provisioning is not currently supported by Rain.Running the iOS app directly from Xcode
Push provisioning will fail if the app is run directly from Xcode. The app must be installed via TestFlight.Testing with sandbox cards
Visa does not support sandbox push provisioning. The full flow must be tested with production cards.Implementation notes
Apple Pay
When initializingMppCardDataParameters, use the method that accepts cardId and cardSecret, not encrypted card data. This removes the need for partners to implement their own encryption.
Retrieve these values from the Rain API:
Google Pay
When configuring Google Pay push provisioning, use Legacy push provisioning, not Unified push provisioning. See the Google Pay push provisioning docs. Credential handling: Key exchange for secure card credentials is handled by MeaWallet, not the partner backend. Your mobile app should passcardId and cardSecret (or the encrypted PAN payload). MeaWallet generates the required provisioning payload internally.
Whitelisting issues: Some partners have encountered provisioning errors due to incomplete Google whitelisting. If provisioning fails, confirm your app package name and SHA-256 certificate fingerprint are correctly registered with Google.
Testing
Push provisioning must be tested using production cards. Visa does not support sandbox provisioning, so the full flow cannot be validated in a development environment.iOS
Push provisioning must be tested through TestFlight. Provisioning will not work if the app is run directly from Xcode.Integration notes
- No Rain API integration is needed for provisioning itself. Push provisioning runs through the MeaWallet SDK; Rain provides the configuration file, credentials, and card processor details.
- Push provisioning is required, but doesn’t block go-live. Production testing can continue while your implementation is in progress.
- One configuration file covers both wallets. A single MeaWallet configuration supports Apple Pay and Google Pay; tell MeaWallet which platforms you support so the configuration is promoted to production correctly.
- Provisioning outcomes surface on the
card.notificationwebhook. Successful tokenizations appear oncard.updated(statusChangeReason: wallet_provisioned), and declined provisioning attempts arrive ascard.notificationevents withreasonCode: PROVISIONING_DECLINEDand a decision reason. Failures inside the Apple or Google flow that never reach a decision are not exposed. - Sandbox testing isn’t available. Visa doesn’t provide sandbox cards for provisioning, so the full flow must be tested in production on a small set of cards.
- Regional availability is Apple’s and Google’s call. If Apple Pay isn’t supported in the user’s region, provisioning fails with an iOS error that Rain can’t override.
Provisioning flow
Troubleshooting
Provisioning blocked by Apple/Google risk engine
Wallet providers operate internal risk engines that may block provisioning attempts. Common triggers include:- Too many wallet add attempts in a short period
- Repeated failed provisioning attempts
- Device flagged by Apple or Google
- Region mismatch between device and card
- Historical wallet fraud signals
Region mismatch
All Rain cards are issued from Puerto Rico. Wallet providers evaluate several signals when determining provisioning eligibility:- Device region
- Apple/Google account region
- SIM country
- IP address
- Risk history