Tap to Pay on iPhone beta
Accept all types of in-person, contactless payments right on your iPhone with no extra terminals or hardware needed. Accept physical debit and credit cards, Apple Pay, and other digital wallets. Tap to Pay on iPhone uses the built-in security and privacy features of iPhone to help protect your business and customer data.
This guide outlines how to set up Tap to Pay on iPhone. For the best results, merchants should implement code that prevents the screen or application from sleeping. If the screen or application sleeps while a transaction is in-flight, processing may be interrupted or fail. Additionally, ensure developer mode on the device is turned off before starting any transaction in production mode.
To use Tap to Pay on iPhone, you'll need to integrate with Moov's SDKs. Integration consists of two main phases:
- Onboard Terminal Applications – Register terminal applications then link them with a merchant
- Accept and Process Payments – Configure the merchant’s mobile application to process contactless payments
View Moov's full iOS SDK (MoovKit) documentation for more information.
Prerequisites & supported devices
Ensure the app is running on a compatible device and iOS version. You can use isPaymentCardSupported() to verify device compatibility.
- iPhone XS or newer
- iOS 16.0+ (US)
- Latest iOS version recommended for optimal performance
Integrate MoovKit
Moov's SDK to integrate Tap to Pay on iPhone functionality is available for download and you can find more details in the documentation.
Add MoovKit as a package dependency to your project via via Swift Package Manager.
|
|
Within the project you'll also need to embed the framework and link binary with libraries. See the MoovKit documentation for complete details.
And finally, add MoovKit to your project.
|
|
Request entitlement from Apple
Your application must request an entitlement from Apple for Tap to Pay on iPhone. You can request from your Apple Developer Account.
After receiving the entitlement, you should configure the entitlement in your project. View the full instructions on developer.apple.com.
|
|
Review Apple's guidelines
Before submitting your application, review Apple’s human interface guidelines to ensure your implementation follows all requirements to avoid any delays in the approval process.Implement terminal configuration provider
Implement a terminal configuration provider to initialize MoovKit. For production use, fetch the configuration from your backend. Below is a sample implementation, assuming PartnerClient
is implemented to interact with your backend API:
|
|
View the SDK documentation for more details and context.
Register application
Applications must be registered with Moov to be authorized to use MoovKit. The process for application registration is as follows:
- Create a TerminalApplication via the create terminal application endpoint
|
|
-
The application will move from
pending
toenabled
once approved. You can subscribe to theterminalAppRegistration.updated
webhook to be notified of the status updates -
Once the application is enabled, you must link the app's
TerminalApplication
to a merchant account via the link terminal application endpoint
|
|
Terms & condition acceptance
Merchants need to accept Apple's terms and conditions - once for each merchant identifier. Once the terms and conditions are accepted, any device using the same merchant identifier can use Tap to Pay on iPhone without accepting the terms and conditions again. The additional devices don’t need to use the same Apple account, or be signed in to Apple.
For the best user experience, it’s recommended to present the terms and conditions before the checkout experience.
View Apple's documentation for more information on terms and conditions.
Create transfer
- Once terms and conditions have been accepted, initialize the reader hardware.
|
|
- Create a payment session by calling
createSession(invalidateTerminalConfiguration:)
as early as possible to configure the device.
PaymentCardReaderSession
to handle the reading of payment card information. You create this session using the createSession(invalidateTerminalConfiguration:)
method of your Moov object. The initial configuration of the device can take up to two minutes, but subsequent requests typically take only a few seconds. Register an eventHandler:
to receive an asynchronous stream of events that you can use to display a progress UI to the merchant.
There are two main paths to accept EMV payments:
- Directly create a
transfer
from the SDK - Create an authorization via the SDK and create the
transfer
separately
This method accepts the EMV tap, authorizes the transaction with the card network, creates a transfer on the Moov platform, and returns the transfer ID.
|
|
This method accepts the EMV tap, authorizes the transaction with the card network, and returns a token which can be passed into the create transfer API.
|
|
Error handling
MoovKit communicates errors with your application via exceptions. View the documentation for the following error types:
If you encounter any issues, please create a support ticket and attach the SDK logs. Be sure to include:
- The SDK version and OS/device details
- A description of the steps that led to the error
- The relevant portion of the logs (compressed if large)
- Ensure any sensitive information (API keys, card details, or PII) is redacted
Tap to Pay on iPhone requires a supported payment app and the latest version of iOS. Update to the latest version by going to Settings > General > Software Update. Tap Download and Install. Some contactless cards may not be accepted by your payment app. Transaction limits may apply. The Contactless Symbol is a trademark owned by and used with permission of EMVCo, LLC. Tap to Pay on iPhone is not available in all markets. For Tap to Pay on iPhone countries and regions, see https://developer.apple.com/tap-to-pay/regions/.