# Se connecter à un lecteur Connectez votre application à un lecteur Stripe Terminal. > Si vous n’avez pas encore choisi de lecteur, comparez les [lecteurs Terminal](https://docs.stripe.com/terminal/payments/setup-reader.md) et sélectionnez celui qui répond le mieux à vos besoins. # Lecteurs Bluetooth Les lecteurs connectés par Bluetooth sont des appareils Bluetooth LE. Ils collectent les informations de paiement mais s’appuient sur un appareil mobile associé pour la communication avec Stripe. Suivez ces étapes pour connecter votre application à un lecteur de terminal à l’aide du Bluetooth : 1. [Détecter des lecteurs](https://docs.stripe.com/terminal/payments/connect-reader.md#discover-readers) 2. [Se connecter à un lecteur](https://docs.stripe.com/terminal/payments/connect-reader.md#connect-reader) > N’utilisez pas des paramètres d’appareil mobile pour associer votre lecteur. L’association du lecteur via les paramètres de l’appareil empêche sa connexion à votre application. ## Détecter les lecteurs [Côté client] - [discoverReaders (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)discoverReaders:delegate:completion:) - [BluetoothScanDiscoveryConfiguration (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPBluetoothScanDiscoveryConfiguration.html) Pour commencer, assurez-vous que votre lecteur est sous tension et à proximité. Puis, à partir de votre application, recherchez les lecteurs connectés par Bluetooth disponibles à proximité avec la méthode `discoverReaders`, à l’aide de la méthode `BluetoothScanDiscoveryConfiguration`. #### Swift ```swift import StripeTerminal class DiscoverReadersViewController: UIViewController, DiscoveryDelegate { var discoverCancelable: Cancelable? // ... // Action for a "Discover Readers" button func discoverReadersAction() throws { let config = try BluetoothScanDiscoveryConfigurationBuilder().build() // In addition to Terminal's completion block methods, Swift async alternatives are available. // See our Example app for usage examples: https://github.com/stripe/stripe-terminal-ios/tree/master/Example self.discoverCancelable = Terminal.shared.discoverReaders(config, delegate: self) { error in if let error = error { print("discoverReaders failed: \(error)") } else { print("discoverReaders succeeded") } } } // ... // MARK: DiscoveryDelegate func terminal(_ terminal: Terminal, didUpdateDiscoveredReaders readers: [Reader]) { // In your app, display the discovered readers to the user. // Call `connectReader` after the user selects a reader to connect to. } } ``` #### Proximité Bluetooth * (BBPOS Chipper 2X BT uniquement) Les filtres de proximité Bluetooth analysent les résultats pour renvoyer le lecteur le plus proche. Des voyants multicolores clignotent alors sur le lecteur détecté, ce qui permet à votre utilisateur de l’identifier facilement parmi de nombreux autres lecteurs. Une fois que le SDK a détecté un lecteur, il ne se connectera pas à un lecteur plus proche, à moins de désactiver le lecteur détecté. Notez que lorsque vous utilisez la proximité Bluetooth, le SDK renvoie deux fois le lecteur à votre application. La première fois, votre application reçoit un objet `Reader` contenant uniquement le numéro de série du lecteur. Après un bref délai, votre application reçoit le même objet `Reader` comportant de nouvelles informations, telles que le niveau de la batterie du lecteur. Nous vous recommandons d’afficher le lecteur détecté dans l’interface utilisateur de votre application. Cela permet à l’utilisateur de confirmer la connexion au lecteur ou de l’annuler s’il ne souhaite pas utiliser ce lecteur. #### Scan Bluetooth Le scan Bluetooth recherche tous les lecteurs les plus proches et renvoie à votre application une liste de lecteurs disponibles. Au fur et à mesure que le processus de recherche avance, le SDK continue à invoquer la méthode `DiscoveryDelegate.didUpdateDiscoveredReaders` avec la dernière liste des lecteurs les plus proches. Au cours du processus de détection, le `SCPConnectionStatus` du Terminal passe à l’état `SCPConnectionStatus.SCPConnectionStatusDiscovering`. La méthode de détection Bluetooth vous permet de définir un délai d’expiration afin de limiter la durée de détection. Cela permet d’économiser la batterie de l’appareil ou de déclencher un message d’erreur quand aucun appareil n’est trouvé. Dans votre application mobile, nous vous recommandons d’afficher une liste de lecteurs découverts avec des numéros de série mise à jour automatiquement afin d’aider les utilisateurs à identifier leur lecteur mobile. La propriété `label` n’est pas renseignée pour les lecteurs mobiles lors de la découverte du lecteur. Si vous avez besoin d’afficher des surnoms pour les lecteurs, maintenez votre propre mappage des numéros de série aux étiquettes dans votre application. #### Couplage Bluetooth Afin d’améliorer la sécurité et de se conformer à la réglementation européenne, Stripe utilise depuis novembre 2025 le processus de couplage Bluetooth par comparaison numérique pour les lecteurs de carte WisePad 3. Le processus de comparaison numérique vous oblige à vérifier une clé d’accès à la fois sur votre lecteur de carte et sur votre terminal de paiement lors du couplage. Après avoir mis à jour votre appareil avec la [dernière version du logiciel](https://docs.stripe.com/terminal/readers/bbpos-wisepad3.md#reader-software-releases), suivez ces étapes lorsque vous connectez votre WisePad 3 à une nouvelle application mobile. Une fois que votre terminal de paiement a détecté et affiché le lecteur WisePad 3 : 1. Vérifiez que le code à 6 chiffres correspond sur le WisePad 3 et sur le terminal de paiement. 2. Sélectionnez **Confirmer** sur le WisePad 3. 3. Sélectionnez **Couple** sur votre terminal de point de vente. > #### Remarque > > Vous ne devez effectuer le couplage par comparaison numérique que lorsque vous couplez un WisePad 3 avec un nouveau terminal de point de vente ou lorsque vous le recouplez avec un terminal de point de vente existant « oublié ». ## Se connecter à un lecteur [Côté client] - [connectReader (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)connectReader:connectionConfig:completion:) - [BluetoothConnectionConfiguration (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPBluetoothConnectionConfiguration.html) Pour vous connecter à un lecteur détecté, appelez la méthode `connectReader` depuis votre application. Transmettez toujours un objet lecteur issu des résultats de découverte les plus récents. Ne mettez pas en cache et ne réutilisez pas d’objets lecteur provenant d’une session de découverte précédente, car des objets obsolètes peuvent entraîner des échecs de connexion. Il n’est pas nécessaire d’enregistrer au préalable les lecteurs mobiles dans le Dashboard ou l’API. Vous devez plutôt associer votre lecteur mobile à un [emplacement](https://docs.stripe.com/api/terminal/locations.md) au moment de la connexion. Pour ce faire, créez et utilisez une `BluetoothConnectionConfiguration` en définissant le `locationId` sur l’identifiant d’emplacement correspondant lors de la connexion. #### Swift ```swift // Call `connectReader` with the selected reader and a connection config // to register to a location as set by your app. var connectionConfig: BluetoothConnectionConfiguration do { connectionConfig = try BluetoothConnectionConfigurationBuilder(delegate: yourMobileReaderDelegate, locationId: ""{{LOCATION_ID}}"") .build() } catch { // Handle the error building the connection configuration return } Terminal.shared.connectReader(selectedReader, connectionConfig: connectionConfig) { reader, error in if let reader = reader { print("Successfully connected to reader: \(reader)") } else if let error = error { print("connectReader failed: \(error)") } } ``` Pour que votre application fonctionne en arrière-plan et reste connectée au lecteur, [configurez-la](https://docs.stripe.com/terminal/payments/setup-integration.md?terminal-sdk-platform=ios#configure) pour inclure le mode d’arrière-plan. > #### Utiliser le mode veille > > Ne programmez pas votre application pour appeler `disconnectReader` afin d’économiser de l’énergie. Le lecteur assure une gestion efficace de l’alimentation à l’aide de son mode veille. ## Gérer les déconnexions des lecteurs - [MobileReaderDelegate (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Protocols/SCPMobileReaderDelegate.html) - [DisconnectReason (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Enums/SCPDisconnectReason.html) Des déconnexions du lecteur peuvent parfois se produire entre votre application et le lecteur. Par exemple, le lecteur peut se déconnecter de votre application si le câble USB qui le relie à votre appareil est déconnectéil est hors de portée ou sa batterie est déchargée. Vous pouvez simuler une déconnexion inattendue pendant le test en éteignant le lecteur. Le `MobileReaderDelegate` inclut une méthode `reader:didDisconnect:` qui fournit à votre application le `DisconnectReason` afin de vous aider à identifier la raison pour laquelle le lecteur s’est déconnecté. Pour traiter vous-même les déconnexions du lecteur, vous pouvez procéder comme suit : 1. Réglez `autoReconnectOnUnexpectedDisconnect` sur `false` pendant la connexion. 2. Traitez le rappel de déconnexion pour afficher dans l’application un message avertissant l’utilisateur que le lecteur s’est déconnecté de manière inattendue et lancer la détection et la connexion du lecteur. #### Swift ```swift import StripeTerminal class ReaderViewController: UIViewController, MobileReaderDelegate { override func viewDidLoad() { super.viewDidLoad() // Set the reader delegate when connecting to a reader } // ... func reader(_ reader: Reader, didDisconnect reason: DisconnectReason) { // Consider displaying a UI to notify the user and start rediscovering readers } } ``` ### Redémarrer le lecteur connecté - [rebootReader (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)rebootReader:.html) Les lecteurs M2 et BBPOS WisePad 3 de Stripe redémarrent automatiquement après 24 heures de fonctionnement. Vous pouvez cependant forcer le lecteur à redémarrer et réinitialiser sa minuterie de 24 heures à l’aide de l’API `rebootReader`. Après cette action, le lecteur se déconnecte du SDK, puis redémarre. Si vous utilisez la reconnexion automatique, le SDK tente de rétablir la connexion avec le lecteur. #### Swift ```swift Terminal.shared.rebootReader { error in if let error = error { // Placeholder for handling the error } else { // Reboot succeeded and the reader will disconnect. // If your app is using automatic reconnect the reconnect will begin. } } ``` #### Tentative de reconnexion automatique Lorsqu’un lecteur se déconnecte, nous tentons automatiquement une reconnexion par défaut et vous recommandons d’afficher dans votre application des notifications qui indiquent l’état du lecteur tout au long du processus. Pour afficher des notifications dans votre application lors de la reconnexion automatique, procédez comme suit : 1. Implémentez les rappels de reconnexion du lecteur dans le `MobileReaderDelegate`. 2. Transmettez le `MobileReaderDelegate` à votre `BluetoothConnectionConfiguration`. 3. Lorsque le SDK envoie [`reader:didStartReconnect:disconnectReason:`](https://stripe.dev/stripe-terminal-ios/docs/Protocols/SCPReaderDelegate.html#/c:objc\(pl\)SCPReaderDelegate\(im\)reader:didStartReconnect:disconnectReason:) à votre application, affichez un message indiquant que le lecteur a perdu la connexion et que la reconnexion est en cours. - Vous pouvez utiliser l’objet `Cancelable` pour arrêter la tentative de reconnexion à tout moment. 4. Lorsque le SDK indique que la reconnexion a réussi en envoyant [`readerDidSucceedReconnect:`](https://stripe.dev/stripe-terminal-ios/docs/Protocols/SCPReaderDelegate.html#/c:objc\(pl\)SCPReaderDelegate\(im\)readerDidSucceedReconnect:), affichez un message indiquant que la connexion a été rétablie et que le lecteur fonctionne normalement. 5. Si le SDK ne peut pas se reconnecter au lecteur et envoie à la fois [`readerDidFailReconnect:`](https://stripe.dev/stripe-terminal-ios/docs/Protocols/SCPReaderDelegate.html#/c:objc\(pl\)SCPReaderDelegate\(im\)readerDidFailReconnect:) et `reader:didDisconnect:`, affichez un message indiquant qu’une déconnexion inattendue s’est produite. #### Swift ```swift import StripeTerminal extension ReaderViewController: MobileReaderDelegate { // MARK: MobileReaderDelegate func reader(_ reader: Reader, didStartReconnect cancelable: Cancelable, disconnectReason: DisconnectReason) { // 1. Notified at the start of a reconnection attempt // Use cancelable to stop reconnection at any time } func readerDidSucceedReconnect(_ reader: Reader) { // 2. Notified when reader reconnection succeeds // App is now connected } func readerDidFailReconnect(_ reader: Reader) { // 3. Notified when reader reconnection fails // App is now disconnected } } ``` #### Reconnexion automatique au démarrage de l’application Stripe Terminal ne se reconnecte pas automatiquement à un lecteur au démarrage de votre application. Vous pouvez créer un flux de reconnexion en enregistrant les ID de lecteur et en essayant de vous connecter à un lecteur connu au démarrage. 1. Lorsque vous connectez un lecteur, enregistrez son numéro de série dans un emplacement de stockage de données persistant, tel que l’[API UserDefaults](https://developer.apple.com/documentation/foundation/userdefaults) (iOS). 1. Au lancement de votre application, recherchez un numéro de série enregistré dans l’emplacement de stockage persistant des données. Si vous en trouvez un, appelez la méthode `discoverReaders` afin que votre application puisse essayer de retrouver le lecteur. 2. Si le numéro de série enregistré correspond à l’un des lecteurs détectés, essayez de vous connecter à ce lecteur à l’aide de l’objet Reader correspondant renvoyé par l’appel à `discoverReaders`. Si le lecteur en question est introuvable, mettez fin au processus de recherche. Affichez une interface utilisateur pendant le processus de détection et de connexion pour indiquer qu’une reconnexion automatique est en cours. ## Mettre à jour le logiciel du lecteur [Côté client] - [MobileReaderDelegate (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Protocols/SCPMobileReaderDelegate.html) Votre application doit mettre à jour les lecteurs mobiles pour appliquer les éléments suivants : - des configurations régionales qui vous permettent de rester en règle avec les exigences des réseaux de cartes et des émetteurs - des mises à jour de sécurité L’installation des mises à jour obligatoires se lance lors de la connexion au lecteur. Vous ne pouvez pas utiliser le lecteur tant que la mise à jour n’est pas terminée. > Pour installer des mises à jour, le niveau de la batterie du lecteur doit être supérieur à 50 %. ### Mises à jour requises Lorsque les mises à jour immédiatement nécessaires sont disponibles pour le lecteur, le `MobileReaderDelegate` de l’intégration reçoit le rappel `didStartInstallingUpdate` avec un `ReaderSoftwareUpdate`. `ReaderSoftwareUpdate` fournit les détails nécessaires de la mise à jour, y compris une estimation de la durée totale de la mise à jour, indiquée par `durationEstimate`. Pendant le processus d’installation, le `connectionStatus` du Terminal passe à `connecting` pendant que la mise à jour s’installe sur le lecteur. Votre application doit avertir les utilisateurs qu’une mise à jour est en cours d’installation et afficher sa progression dans votre interface utilisateur. Expliquez clairement pourquoi la connexion peut prendre plus de temps que d’habitude. Si le processus de mise à jour requis échoue, Stripe communique l’erreur au `MobileReaderDelegate` avec `didFinishInstallingUpdate`. Vous ne pouvez pas vous reconnecter au lecteur après l’échec d’une mise à jour requise, sauf si les conditions suivantes sont remplies : - Le lecteur exécute la dernière version du logiciel pour l’emplacement au cours des 30 derniers jours. - La version du SDK iOS est supérieure ou égale à la version `3.5.0`. Si les conditions sont remplies, le processus de connexion aboutit, bien que la mise à jour requise soit incomplète. Lors de la prochaine connexion à ce lecteur, Stripe tente à nouveau d’effectuer la mise à jour requise jusqu’à ce qu’elle soit installée avec succès. #### Swift ```swift import UIKit import StripeTerminal class ReaderViewController: UIViewController, MobileReaderDelegate { // ... // MARK: MobileReaderDelegate func reader(_ reader: Reader, didStartInstallingUpdate update: ReaderSoftwareUpdate, cancelable: Cancelable?) { // Show UI communicating that a required update has started installing } func reader(_ reader: Reader, didReportReaderSoftwareUpdateProgress progress: Float) { // Update the progress of the installation } func reader(_ reader: Reader, didFinishInstallingUpdate update: ReaderSoftwareUpdate?, error: Error?) { // Report success or failure of the update } // ... } ``` Vous pouvez annuler les mises à jour requises à l’aide de l’objet `Cancelable`, ce qui entraîne également un échec de connexion au lecteur. Vous ne pouvez pas annuler les mises à jour uniquement incrémentielles en cours. ### Mises à jour facultatives Vous pouvez reporter les mises à jour facultatives jusqu’à la date indiquée, après quoi elles deviennent obligatoires. Le SDK vous informe des mises à jour facultatives via le `MobileReaderDelegate` chaque fois que le lecteur est connecté mais n’effectue pas de transaction. Si une mise à jour facultative est disponible, le `MobileReaderDelegate` de votre application reçoit le rappel `didReportAvailableUpdate` avec l’objet `ReaderSoftwareUpdate` contenant les détails de la mise à jour, y compris : - Temps estimé pour la fin de la mise à jour (`durationEstimate`) - Horodatage après lequel la mise à jour devient obligatoire (`requiredAt`) Dans votre application, signalez aux utilisateurs qu’une mise à jour est disponible et affichez un message les invitant à l’installer. Pour procéder à la mise à jour précédemment signalée avec `didReportAvailableUpdate`, appelez `Terminal.shared.installAvailableUpdate`. La mise à jour disponible est également stockée dans l’objet Reader sous la forme `reader.availableUpdate`. Pendant la durée de la mise à jour, empêchez l’utilisateur de quitter la page de votre application et invitez-le à garder le lecteur sous la main et sous tension jusqu’au terme de l’installation. Nous vous recommandons également d’afficher un indicateur visuel de la progression de la mise à jour. Le `MobileReaderDelegate` rapporte la progression de la mise à jour dans la méthode `didReportReaderSoftwareUpdateProgress`. Lorsque la date `requiredAt` d’une mise à jour facultative est dépassée, la mise à jour est installée la prochaine fois que le lecteur est connecté. #### Swift ```swift import UIKit import StripeTerminal class ReaderViewController: UIViewController, MobileReaderDelegate { // ... // MARK: MobileReaderDelegate func reader(_ reader: Reader, didReportAvailableUpdate update: ReaderSoftwareUpdate) { // An update is available for the connected reader. Show this update in your application. // Install this update using `Terminal.shared.installAvailableUpdate`. } } ``` Pour savoir comment vérifier si votre application gère les différents types de mises à jour possibles sur un lecteur, consultez la page [Test des mises à jour d’un lecteur](https://docs.stripe.com/terminal/references/testing.md#simulated-reader-updates). ## Prochaines étapes Vous avez connecté votre application au lecteur. Vous pouvez maintenant [encaisser votre premier paiement avec Stripe Terminal](https://docs.stripe.com/terminal/payments/collect-card-payment.md). Les nom et logo BBPOS et Chipper™ sont des marques ou marques déposées de BBPOS Limited aux États-Unis et/ou dans d’autres pays. Les nom et logo Verifone® sont des marques ou marques déposées de Verifone aux États-Unis et/ou dans d’autres pays. L’utilisation de ces marques n’implique aucune approbation de la part de BBPOS ou Verifone.