{"title":"Understand the iOS Mobile solutions","category":"default","creationDate":1776961627,"content":"<p>This page explains various concepts that our Mobile solutions are based on. The focus is on how the Adyen Mobile SDK interacts with the plataforma de pagamentos da Adyen and with your POS app.<\/p>\n<h2 id=\"session\">Communication session<\/h2>\n<p>When you integrate the Mobile SDK into your POS app, the SDK has to communicate in a secure way with the plataforma de pagamentos da Adyen. To enable this, you must integrate a server-to-server POST  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/possdk\/latest\/post\/sessions\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/checkout\/possdk\/v68\/sessions<\/a> request to create a session. Your POS app needs to call your backend to trigger this request and get the session data.<\/p>\n<p>The SDK uses the session data from the response to authenticate with our payments platform. Because the session expires after some time, the SDK checks regularly if it needs to establish a new session.<\/p>\n<div class=\"hint--right\" data-hint=\"Establishing a session in the payment flow\">\n<p><img alt=\"\" src=\"\/user\/pages\/reuse\/pos-mobile-sdk\/communication-session\/ipp-mobile-authentication-flow.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/p>\n<\/div>\n<h2>SDK transaction flow<\/h2>\n<p>If you use or build a Mobile solution where our iOS Mobile SDK is integrated into your POS app, transactions take place as follows:<\/p>\n<ol>\n<li>\n<p>Optional but recommended: your POS app calls a warm-up function to speed up initiating transactions. <\/p>\n<\/li>\n<li>\n<p>Your POS app creates a Terminal API request that is serialized to JSON, or receives the Terminal API payment request from your backend.<\/p>\n<div class=\"sc-notice info\"><div>    \n<p><strong>Tip<\/strong><br \/>\nTo help you create Terminal API requests, we provide a <strong>TerminalAPIKit for iOS<\/strong> on <a href=\"https:\/\/github.com\/Adyen\/adyen-terminal-api-ios\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">GitHub<\/a>. Installation and usage instructions are in the repository's README.<\/p>\n<\/div><\/div>\n<\/li>\n<li>\n<p>The POS app passes the Terminal API request to the Mobile SDK.<\/p>\n<\/li>\n<li>\n<p>The SDK checks if the communication session is still valid, and if necessary establishes a new session.<\/p>\n<\/li>\n<li>\n<p>The transaction starts on the mobile device.<\/p>\n<\/li>\n<li>\n<p>The SDK passes the Terminal API response to your POS app.<\/p>\n<\/li>\n<\/ol>\n<div class=\"hint--right\" data-hint=\"Payment flow\">\n<p><img alt=\"\" src=\"\/user\/pages\/reuse\/pos-mobile-sdk\/sdk-flow\/ipp-mobile-sdk-flow-ios.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/p>\n<\/div>\n<h2>PIN transactions<\/h2>\n<p>It is possible to make PIN transactions in your Tap to Pay and card reader solution. Unlike traditional payment terminals with physical keypads, PIN entry on a mobile device requires specialized security measures to protect the shopper's data. To comply with <a href=\"\/pt\/point-of-sale\/mobile-android\/security\/#pci-mpoc-compliance-requirements\">PCI MPoC compliance requirements<\/a>, the PIN entry pad is not always centered on the mobile device screen. Instead, it appears in a random position as shown in the following examples. <\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: center;\"><\/th>\n<th style=\"text-align: center;\"><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: center;\">Bottom-left <br> <img alt=\"\" src=\"\/images\/0\/a\/1\/2\/6\/0a126dc999bdfc25bb7716739046edc544866a07-screen-enpin-pad-centered.png\" \/><\/td>\n<td style=\"text-align: center;\">Top-right <br> <img alt=\"\" src=\"\/images\/5\/4\/2\/9\/e\/5429e83cc2c07ff455d667848a990a152432ef1e-screen-enpin-pad-random.png\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>PIN transaction with a card reader in the US<\/h3>\n<p>You need an NYC1 card reader with PIN support <a href=\"\/pt\/point-of-sale\/mobile-ios\/requirements#card-readers\">for secure PIN transactions<\/a>.<\/p>\n<div class=\"notices green\">\n<p>NYC1 card readers with PIN support require Mobile SDK version 3.8.0 or later.<\/p>\n<\/div>\n<p>In the US, not all NYC1 card readers support PIN. You can check if your card reader supports PIN transactions in the following ways:<\/p>\n<ul>\n<li>By checking the <code>connectedDevice.type<\/code> property. The results can be:\n<ul>\n<li><strong>nyc1<\/strong> (card reader supports PIN)<\/li>\n<li><strong>nyc1SCR<\/strong> (card reader does not support PIN)<\/li>\n<\/ul><\/li>\n<li>In the <a href=\"\/pt\/point-of-sale\/mobile-ios\/understand#ui-for-card-reader-operations\">built-in UI<\/a>: If under <strong>Device Info<\/strong> the field <strong>Model<\/strong> is present, you have an NYC1-SCR card reader that does not support PIN. If the field <strong>Model<\/strong> is not present, you have an NYC1 that supports PIN.<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: center;\">Device info for NYC1-SCR<\/th>\n<th style=\"text-align: center;\">Device info for NYC1<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: center;\">Card reader not suitable for PIN <br> <img alt=\"\" src=\"\/images\/1\/3\/6\/e\/3\/136e3c4b5811358c7327bdc3858f3179f62f5ecc-screen-enios-scr.png\" \/><\/td>\n<td style=\"text-align: center;\">Card reader suitable for PIN <br> <img alt=\"\" src=\"\/images\/f\/0\/7\/6\/0\/f0760a5c1f7ed99b82ad638cf48cbdc8274408d9-screen-enios-scrp.png\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"notices red\">\n<p>NYC1-SCR card readers will no longer be available for order after February 1, 2026.<\/p>\n<\/div>\n<p>If you want to disable PIN support on your NYC1 card reader, <a href=\"\/pt\/point-of-sale\/mobile-ios\/requirements#card-readers\">refer to card reader requirements<\/a><\/p>\n<h2>UI for card reader operations<\/h2>\n<p>If your Mobile SDK solution uses NYC1 card readers as the payment interface, the people operating the readers need to:<\/p>\n<ul>\n<li>Connect their mobile device with the card reader through Bluetooth pairing.<\/li>\n<li>View an overview of card readers. For example, to switch to a different card reader.<\/li>\n<li>View details of the card reader they are using. For example, to check the battery charge level.<\/li>\n<li>Update the firmware of the card reader they are using.<\/li>\n<\/ul>\n<p>The SDK allows you to build your own UI for those tasks, but also provides a built-in UI as shown in the following examples.<\/p>\n<div class=\"row\" style=\"align-items: center;justify-content: center;\">\n<div class=\"col col-12 col-md-4\" style=\"background-color:transparent;;\"><p><img alt=\"\" src=\"\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/screen-EN_ios_pair-reader2x.png\"><\/p><\/div><div class=\"col col-12 col-md-4\" style=\"background-color:transparent;;\"><p><img alt=\"\" src=\"\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/screen-EN_ios_devices2x.png\"><\/p><\/div><div class=\"col col-12 col-md-4\" style=\"background-color:transparent;;\"><p><img alt=\"\" src=\"\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/screen-EN_ios_device-info2x.png\"><\/p><\/div><\/div>\n<p>The following sections provide some example built-in screens for specific tasks:<\/p>\n<ul>\n<li><a href=\"#bt-pairing\">Bluetooth pairing<\/a><\/li>\n<li><a href=\"#updating-card-reader\">Updating the card reader firmware<\/a><\/li>\n<\/ul>\n<p>If your solution uses the NYC1 card reader in combination with the NYC1 dock, users also need to connect to the card reader through USB and update the dock firmware. See <a href=\"#usb-dock\">UI for dock operations<\/a>.<\/p>\n<h3 id=\"bt-pairing\">Bluetooth pairing<\/h3>\n<p>The built-in UI screens guide the reader through the process of connecting their mobile device to a card reader through Bluetooth.<\/p>\n<p><img style=\"width: 300px;\" alt=\"\" src=\"\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/ios_pairing-reader.gif?decoding=auto&amp;fetchpriority=auto\" \/><\/p>\n<h3 id=\"updating-card-reader\">Updating the card reader firmware<\/h3>\n<p>The firmware of the card reader must be updated from time to time, to ensure secure transaction processing.<\/p>\n<div class=\"notices yellow\">\n<p>You must check for new firmware updates regularly, and update your card readers to the latest version.<\/p>\n<\/div>\n<p>Our built-in UI shows a <span style=\"color: red;\">red indicator<\/span> when a new firmware version is available for the connected card reader, and has an <strong>Update<\/strong> button to start the firmware update. A firmware update can fail when the card reader does not have an active Bluetooth connection when the update requires it. In this case the built-in UI shows instructions on how to reset the reader before retrying the update.<\/p>\n<p><img style=\"width: 300px;\" alt=\"\" src=\"\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/ios_reader-update.gif?decoding=auto&amp;fetchpriority=auto\" \/><\/p>\n<p>If you use your own custom UI, it is required that you <a href=\"\/pt\/point-of-sale\/mobile-ios\/build\/card-reader\/?tab=build_a_custom_ui_1_2#updating-card-reader\">build logic into your POS app<\/a> to check for new card reader firmware updates and handle the firmware update flow correctly within your POS app.<\/p>\n<h2 id=\"usb-dock\">UI for dock operations<\/h2>\n<p>If your Mobile SDK solution uses NYC1 card readers as the payment interface in combination with NYC1 docks, the people operating the readers need to:<\/p>\n<ul>\n<li>Connect their mobile device with the card reader through the dock.<\/li>\n<li>Update the firmware of the dock they are using.<\/li>\n<\/ul>\n<p>The SDK allows you to build your own UI for those tasks, but also provides a built-in UI.<\/p>\n<p>The following sections provide some example built-in screens for specific tasks:<\/p>\n<ul>\n<li><a href=\"#connecting-usb-dock\">Connecting to a dock<\/a><\/li>\n<li><a href=\"#updating-usb-dock\">Updating the dock firmware<\/a><\/li>\n<\/ul>\n<h3 id=\"connecting-usb-dock\">Connecting to a dock<\/h3>\n<p>In addition to Bluetooth, card readers can be connected through USB. The user's mobile device is connected to a dock using a USB-C cable, and the card reader is placed in the dock. The SDK recognizes the situation, and presents built-in UI screens to inform the reader about the USB connection.<\/p>\n<p><img alt=\"\" src=\"\/images\/6\/b\/c\/8\/e\/6bc8efc7de9546ed681de5c134d3c0ac17d0e382-screen-eniosdock2x.png\" \/><\/p>\n<p>Note that it is also possible to place the card reader in the dock but <a href=\"#bt-pairing\">connect the mobile device to the reader through Bluetooth<\/a>. In that case the dock and the user's mobile device are <em>not<\/em> connected with a USB-C cable. This is a way to charge the card reader through the dock in a countertop setup.<\/p>\n<h3 id=\"updating-usb-dock\">Updating the dock firmware<\/h3>\n<p>The firmware of the dock must be updated from time to time, to ensure secure transaction processing.<\/p>\n<p>Our built-in UI shows a <span style=\"color: red;\">red indicator<\/span> when a new firmware version is available for the connected dock, and has an <strong>Update<\/strong> button to start the firmware update.<\/p>\n<p><img style=\"width: 300px;\" alt=\"\" src=\"\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/ios_dock-update.gif?decoding=auto&amp;fetchpriority=auto\" \/><\/p>\n<p>If you use your own custom UI, it is required that you <a href=\"\/pt\/point-of-sale\/mobile-ios\/build\/card-reader\/?tab=build_a_custom_ui_1_2\">build logic into your POS app<\/a> to check for new dock firmware updates and handle the firmware update flow correctly within your POS app.<\/p>\n<h2>Next steps<\/h2>\n<div class=\"next-steps\" id=\"next-steps\" >\n<a href=\"\/point-of-sale\/mobile-ios\/build\" class=\"next-steps__step\" style=\"width:29%;\" target=\"_self\"><p class=\"next-steps__body\"><div style=\"text-align: center;\"><img src=\"\/user\/themes\/adyen\/images\/illustrations\/wrench.svg\"><h6 class=\"next-steps__title\">Build your solution<\/h6><p>Follow steps to build a Tap to Pay on iPhone or iOS card reader solution.<\/p><\/div><\/p><\/a><a href=\"\/point-of-sale\/mobile-ios\/manage\" class=\"next-steps__step\" style=\"width:29%;\" target=\"_self\"><p class=\"next-steps__body\"><div style=\"text-align: center;\"><img src=\"\/user\/themes\/adyen\/images\/illustrations\/settings.svg\"><h6 class=\"next-steps__title\">Manage your solution<\/h6><p>Enable and maintain your solution and keep the software up-to-date.<\/p><\/div><\/p><\/a><a href=\"\/point-of-sale\/mobile-ios\/troubleshooting\" class=\"next-steps__step\" style=\"width:29%;\" target=\"_self\"><p class=\"next-steps__body\"><div style=\"text-align: center;\"><img src=\"\/user\/themes\/adyen\/images\/illustrations\/close.svg\"><h6 class=\"next-steps__title\">Error handling<\/h6><p>Resolve errors on the mobile iOS device.<\/p><\/div><\/p><\/a><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/mobile-ios\/understand","articleFields":{"description":"Learn about the concepts that the mobile transaction flow is based on.","parameters":{"generic_sdk_name":"Mobile SDK","specific_sdk_name":"iOS Mobile SDK","platform":"iOS"},"type":"page","feedback_component":true,"filters_component":false},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/mobile-ios\/understand","title":"Understand the iOS Mobile solutions","content":"This page explains various concepts that our Mobile solutions are based on. The focus is on how the Adyen Mobile SDK interacts with the plataforma de pagamentos da Adyen and with your POS app.\nCommunication session\nWhen you integrate the Mobile SDK into your POS app, the SDK has to communicate in a secure way with the plataforma de pagamentos da Adyen. To enable this, you must integrate a server-to-server POST  \/checkout\/possdk\/v68\/sessions request to create a session. Your POS app needs to call your backend to trigger this request and get the session data.\nThe SDK uses the session data from the response to authenticate with our payments platform. Because the session expires after some time, the SDK checks regularly if it needs to establish a new session.\n\n\n\nSDK transaction flow\nIf you use or build a Mobile solution where our iOS Mobile SDK is integrated into your POS app, transactions take place as follows:\n\n\nOptional but recommended: your POS app calls a warm-up function to speed up initiating transactions. \n\n\nYour POS app creates a Terminal API request that is serialized to JSON, or receives the Terminal API payment request from your backend.\n    \nTip\nTo help you create Terminal API requests, we provide a TerminalAPIKit for iOS on GitHub. Installation and usage instructions are in the repository's README.\n\n\n\nThe POS app passes the Terminal API request to the Mobile SDK.\n\n\nThe SDK checks if the communication session is still valid, and if necessary establishes a new session.\n\n\nThe transaction starts on the mobile device.\n\n\nThe SDK passes the Terminal API response to your POS app.\n\n\n\n\n\nPIN transactions\nIt is possible to make PIN transactions in your Tap to Pay and card reader solution. Unlike traditional payment terminals with physical keypads, PIN entry on a mobile device requires specialized security measures to protect the shopper's data. To comply with PCI MPoC compliance requirements, the PIN entry pad is not always centered on the mobile device screen. Instead, it appears in a random position as shown in the following examples. \n\n\n\n\n\n\n\n\n\nBottom-left  \nTop-right  \n\n\n\nPIN transaction with a card reader in the US\nYou need an NYC1 card reader with PIN support for secure PIN transactions.\n\nNYC1 card readers with PIN support require Mobile SDK version 3.8.0 or later.\n\nIn the US, not all NYC1 card readers support PIN. You can check if your card reader supports PIN transactions in the following ways:\n\nBy checking the connectedDevice.type property. The results can be:\n\nnyc1 (card reader supports PIN)\nnyc1SCR (card reader does not support PIN)\n\nIn the built-in UI: If under Device Info the field Model is present, you have an NYC1-SCR card reader that does not support PIN. If the field Model is not present, you have an NYC1 that supports PIN.\n\n\n\n\nDevice info for NYC1-SCR\nDevice info for NYC1\n\n\n\n\nCard reader not suitable for PIN  \nCard reader suitable for PIN  \n\n\n\n\nNYC1-SCR card readers will no longer be available for order after February 1, 2026.\n\nIf you want to disable PIN support on your NYC1 card reader, refer to card reader requirements\nUI for card reader operations\nIf your Mobile SDK solution uses NYC1 card readers as the payment interface, the people operating the readers need to:\n\nConnect their mobile device with the card reader through Bluetooth pairing.\nView an overview of card readers. For example, to switch to a different card reader.\nView details of the card reader they are using. For example, to check the battery charge level.\nUpdate the firmware of the card reader they are using.\n\nThe SDK allows you to build your own UI for those tasks, but also provides a built-in UI as shown in the following examples.\n\n\nThe following sections provide some example built-in screens for specific tasks:\n\nBluetooth pairing\nUpdating the card reader firmware\n\nIf your solution uses the NYC1 card reader in combination with the NYC1 dock, users also need to connect to the card reader through USB and update the dock firmware. See UI for dock operations.\nBluetooth pairing\nThe built-in UI screens guide the reader through the process of connecting their mobile device to a card reader through Bluetooth.\n\nUpdating the card reader firmware\nThe firmware of the card reader must be updated from time to time, to ensure secure transaction processing.\n\nYou must check for new firmware updates regularly, and update your card readers to the latest version.\n\nOur built-in UI shows a red indicator when a new firmware version is available for the connected card reader, and has an Update button to start the firmware update. A firmware update can fail when the card reader does not have an active Bluetooth connection when the update requires it. In this case the built-in UI shows instructions on how to reset the reader before retrying the update.\n\nIf you use your own custom UI, it is required that you build logic into your POS app to check for new card reader firmware updates and handle the firmware update flow correctly within your POS app.\nUI for dock operations\nIf your Mobile SDK solution uses NYC1 card readers as the payment interface in combination with NYC1 docks, the people operating the readers need to:\n\nConnect their mobile device with the card reader through the dock.\nUpdate the firmware of the dock they are using.\n\nThe SDK allows you to build your own UI for those tasks, but also provides a built-in UI.\nThe following sections provide some example built-in screens for specific tasks:\n\nConnecting to a dock\nUpdating the dock firmware\n\nConnecting to a dock\nIn addition to Bluetooth, card readers can be connected through USB. The user's mobile device is connected to a dock using a USB-C cable, and the card reader is placed in the dock. The SDK recognizes the situation, and presents built-in UI screens to inform the reader about the USB connection.\n\nNote that it is also possible to place the card reader in the dock but connect the mobile device to the reader through Bluetooth. In that case the dock and the user's mobile device are not connected with a USB-C cable. This is a way to charge the card reader through the dock in a countertop setup.\nUpdating the dock firmware\nThe firmware of the dock must be updated from time to time, to ensure secure transaction processing.\nOur built-in UI shows a red indicator when a new firmware version is available for the connected dock, and has an Update button to start the firmware update.\n\nIf you use your own custom UI, it is required that you build logic into your POS app to check for new dock firmware updates and handle the firmware update flow correctly within your POS app.\nNext steps\n\nBuild your solutionFollow steps to build a Tap to Pay on iPhone or iOS card reader solution.Manage your solutionEnable and maintain your solution and keep the software up-to-date.Error handlingResolve errors on the mobile iOS device.\n","type":"page","locale":"pt","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Terminais","lvl2":"iOS Mobile solutions","lvl3":"Understand the iOS Mobile solutions"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/point-of-sale","lvl2":"https:\/\/docs.adyen.com\/pt\/point-of-sale\/mobile-ios","lvl3":"\/pt\/point-of-sale\/mobile-ios\/understand"},"levels":4,"category":"In-person payments","category_color":"green","tags":["Understand","Mobile","solutions"]},"articleFiles":{"screen-EN_ios_device-info2x.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/screen-EN_ios_device-info2x.png\" \/>","screen-EN_ios_devices2x.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/screen-EN_ios_devices2x.png\" \/>","screen-EN_ios_dock2x.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/images\/1\/7\/8\/1\/6\/17816a1bab79a987570c150a35010f5c7f2ee07f-screen-eniosdock2x.png\" \/>","screen-EN_ios_pair-reader2x.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/screen-EN_ios_pair-reader2x.png\" \/>","ios_dock-update.gif":"<img style=\"width: 300px;\" alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/ios_dock-update.gif?decoding=auto&amp;fetchpriority=auto\" \/>","ios_pairing-reader.gif":"<img style=\"width: 300px;\" alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/ios_pairing-reader.gif?decoding=auto&amp;fetchpriority=auto\" \/>","ios_reader-update.gif":"<img style=\"width: 300px;\" alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/03.point-of-sale\/56.mobile-ios\/05.understand\/ios_reader-update.gif?decoding=auto&amp;fetchpriority=auto\" \/>"}}
