Skip to content
Case study 01 · Australian card-issuing platform

Virtual cards straight into Apple Pay and Google Pay.

For an Australian embedded-finance platform, I integrated push provisioning into Apple Pay and Google Pay, Apple Wallet’s own “add card” extensions and a native secure card view, so users can pay with a new card seconds after receiving it.

  • React Native
  • Swift
  • Kotlin
  • Apple Pay
  • Google Pay
Role
Mobile engineer
Timeline
Jul 2024 – Oct 2026
Stack
React Native, Swift, Kotlin, Apple Pay, Google Pay
2
wallets
2+ yrs
on the platform
1 tap
to add a card

The problem

The platform lets businesses issue branded prepaid Mastercards. Its consumer app lets people receive money as a gift and load it onto a virtual card. Users wanted that card in their phone wallet straight away, without typing a card number, and they needed to see the card details safely when shopping online.

My job was the integration work between the app, the card-tokenisation provider, Apple Pay, Google Pay and the platform’s own APIs.

What I built

  1. 1. Cards straight into Apple Pay and Google Pay

    I integrated a certified card-tokenisation SDK for in-app push provisioning, so the app never handles the full card number.

    • One tap to add. On iOS, the app opens Apple’s Add to Apple Pay sheet. On Android, it uses Google Pay’s push provisioning flow.
    • Knowing where the card already is. The app checks whether a card is already on the iPhone, on a paired Apple Watch or in Google Pay, and offers to add it to the devices that are missing it.
    • Handling every outcome. Cancelled sheets, failed attempts and cards waiting for verification all return the user to a clear state.
  2. 2. Adding the card from inside Apple Wallet

    I built Apple Wallet Issuer extensions, so a user can tap “+” in Wallet and add the card without opening the app.

    • A non-UI extension in Swift lists the cards that aren’t in Wallet yet, with their card art.
    • A UI extension handles sign-in when Wallet needs the user to confirm who they are.
    • Both can be switched off remotely, and the app and both extensions are signed and shipped together from CI.
  3. 3. Card details shown natively

    To show the card number and security code for online shopping, I integrated the provider’s secure card view through a native Swift screen bridged into React Native, so sensitive card data stays inside native code.

  4. 4. Sign-in, config and app health

    • Biometric sign-in with Face ID, Touch ID and fingerprint, plus a guided prompt to move existing users onto it.
    • Remote config and feature flags, so the team could turn features on and off and prompt users to update without a new release.
    • Monitoring with Datadog: real-user monitoring, crash reporting and screen tracking.
    • Analytics with Segment, sending events to the product and marketing tools.
    • Deep links with Branch.

Shipping it

Codemagic builds dev and production apps for both stores, with dev builds pointing the tokenisation SDK at its sandbox so testers never touch live cards. iOS builds go to TestFlight automatically, and Android builds publish to Google Play. I also kept the app passing store review as Apple and Google requirements changed, including privacy manifests for third-party SDKs and support for newer Android devices.

Client work. The client and product aren’t named, and details are described at a level the engagement allows.