Guide de migration du SDK Terminal
Découvrez comment migrer vers la dernière version en date du SDK de Stripe Terminal.
Les SDK Stripe Terminal pour iOS et Android ont été mis à jour avec un certain nombre de changements majeurs au niveau des API et du comportement, dont certains nécessitent que vous mettiez à jour votre intégration avec le SDK Stripe Terminal. Nous apportons régulièrement des modifications aux mises à jour de versions majeures susceptibles d’affecter le fonctionnement ou le comportement de votre intégration, afin d’améliorer la cohérence entre nos SDK et de simplifier la logique et l’intégration de votre application. Ce guide vous présente les dernières modifications pour vous aider à mettre à niveau votre intégration.
Note
Vous créez une nouvelle intégration à Stripe Terminal ? Consultez la page Conception d’une intégration pour savoir quelles sont les premières étapes.
Migrer vers la version 4.0.0
Voici quelques éléments à retenir concernant les SDK 4.0.0 de Stripe Terminal pour iOS et Android :
- Enregistrement des cartes bancaires après paiement dans le monde entier
- Les utilisateurs peuvent désormais enregistrer les cartes bancaires après paiement en dehors des États-Unis grâce à la mise à jour du processus de collecte du consentement du client pour l’enregistrement des informations de la carte sur les appareils de point de vente.
- Prise en charge des paiements des commandes par courrier/par téléphone (MOTO) sur les lecteurs intelligents Preview
- Cette fonctionnalité est en version bêta. Pour y accéder, contactez nos équipes par e-mail via stripe-terminal-betas@stripe.com.
- Mises à jour vers la version minimale des plateformes iOS prises en charge
- Permet la reconnexion automatique du lecteur en cas de déconnexion inattendue par défaut pour les lecteurs mobiles et Tap to Pay, améliorant ainsi la résilience du lecteur
- Consolidation des fonctionnalités de connexion des lecteurs et des rappels de déconnexion pour tous les types de lecteurs
Si votre application utilise actuellement une version du SDK Terminal pour iOS antérieure à 4.0.0, vous devrez procéder à quelques modifications pour effectuer la mise à niveau et accepter les paiements avec carte présente dans le monde entier. Pour obtenir une liste détaillée des modifications apportées entre la version 3.9.1 et la version 4.0.0, veuillez consulter le journal des modifications du SDK.
Mettez à jour votre version minimale prise en charge vers iOS 14 ou une version plus récente
Nous mettons régulièrement à jour la version minimale prise en charge de nos SDK afin de rationaliser nos efforts d’assistance aux développeurs.
Les versions 3.X existantes du SDK Terminal iOS continueront de prendre en charge les appareils exécutant iOS 13 et versions ultérieures.
Mettre à jour les cartes bancaires après l’intégration de PaymentIntents
Si vous enregistrez un moyen de paiement après un PaymentIntent réussi en personne, vous devez mettre les mises à jour suivantes à votre intégration :
Lors de la création de Terminal PaymentIntents, transmettez le paramètre setup_future_usage, qui informe Stripe que vous souhaitez effectuer des paiements futurs avec la même carte.
Vous devez également transmettre allow_redisplay avec la valeur
always
oulimited
dansSCPCollectConfiguration
. Transmettezalways
si vous voulez que la carte bancaire enregistrée du client lui soit présentée dans tous les futurs flux de paiement, etlimited
si elle ne peut être utilisée que dans le contexte de l’utilisation initialement prévue, comme un abonnement.Découvrez comment enregistrer des cartes après un paiement.
Mettre à jour les cartes bancaires sans paiement avec l’intégration de SetupIntents
Pour garantir une intégration cohérente entre les SetupIntents et les PaymentIntents, ainsi qu’entre les transactions en personne et en ligne, nous avons supprimé, dans la collectSetupIntentPaymentMethod
de SCPTerminal
, le paramètre customerConsentCollected
qui était auparavant requis pour toutes les transactions SetupIntent, et nous l’avons remplacé par le paramètre allowRedisplay
.
Découvrez comment enregistrer directement les informations sans débiter le client.
Adapter votre utilisation de discoverReaders
Nous avons ajouté une nouvelle valeur enum,
discovering
, à SCPConnectionStatus pour représenter le moment où la découverte du lecteur est en cours. Assurez-vous que votre intégration peut gérer ce nouvel état et fournir des informations pertinentes à vos clients.Nous avons amélioré la gestion de plusieurs opérations simultanées de découverte de lecteurs. Auparavant, le fait d’appeler plusieurs fois discoverReaders avait pour effet de mettre les opérations en file d’attente. Désormais, lorsqu’une nouvelle opération discoverReaders est appelée alors qu’une opération existante est déjà en cours, le SDK annule cette dernière et renvoie une erreur SCPErrorCanceledDueToIntegrationError. La nouvelle opération discoverReaders démarre alors immédiatement.
La découverte de lecteurs intelligents et de lecteurs Tap to Pay appelle désormais le bloc d’achèvement
discoverReaders
à la fin de l’opération. Ce changement reflète le fait que la découverte de lecteurs pour ces types de lecteurs n’est pas une opération de longue durée.
Mettre à jour l’utilisation des connexions de votre lecteur
Afin de garantir un modèle d’intégration cohérent pour la découverte et la connexion des lecteurs, nous avons consolidé toutes les méthodes de connexion des lecteurs précédentes (
connectBluetoothReader
,connectInternetReader
,connectLocalMobileReader
) dans connectReader. Le type de connexion exact est toujours déterminé par la configuration de connexion transmise.Pour les lecteurs mobiles et les lecteurs Tap to Pay, le paramètre
ReaderDelegate
a été supprimé de la méthodeconnectReader
et déplacé à la place dansconnectionConfig
, remplaçantSCPReconnectionDelegate
. À l’instar des autres types de lecteurs, le paramètreInternetConnectionConfiguration
des lecteurs intelligents s’attend désormais à ce qu’unInternetReaderDelegate
lui soit transmis, ce qui permet d’alerter votre intégration en cas d’événements tels que la déconnexion d’un lecteur.
Type de lecteur | Configuration de la connexion | Lecteur délégué |
---|---|---|
Lecteur mobile | SCPBluetoothConnectionConfiguration | SCPMobileReaderDelegate |
Lecteur intelligent | SCPInternetConnectionConfiguration | SCPInternetReaderDelegate |
Tap to Pay | SCPTapToPayConnectionConfiguration | SCPTapToPayReaderDelegate |
Avant
// Call `connectBluetoothReader` with the selected reader and a connection config // to register to a location as set by your app. let connectionConfig: BluetoothConnectionConfiguration do { connectionConfig = try BluetoothConnectionConfigurationBuilder(locationId:
).build() } catch { // Handle the error building the connection configuration return } Terminal.shared.connectBluetoothReader(selectedReader, delegate: readerDelegate, connectionConfig: connectionConfig) { reader, error in if let reader = reader { print("Successfully connected to reader: \(reader)") } else if let error = error { print("connectBluetoothReader failed: \(error)") } }"{{LOCATION_ID}}"
Après
// Call `connectReader` with the selected reader and a connection config // to register to a location as set by your app. let connectionConfig: BluetoothConnectionConfiguration do { connectionConfig = try BluetoothConnectionConfigurationBuilder(delegate: yourMobileReaderDelegate, locationId:
) .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)") } }"{{LOCATION_ID}}"
Pour en savoir plus, consultez notre documentation sur la connexion à un lecteur.
La reconnexion automatique est désormais activée par défaut pour les lecteurs mobiles et Tap to Pay
Pour accroître la résilience de l’intégration de votre terminal avec les lecteurs mobiles et Tap to Pay, nous avons activé la reconnexion automatique par défaut lorsqu’un lecteur se déconnecte inopinément.
Nous vous recommandons d’afficher des notifications dans votre application pour informer les utilisateurs de l’état du lecteur tout au long du processus de reconnexion. Pour gérer les méthodes de reconnexion des lecteurs, nous avons supprimé le
SCPReconnectionDelegate
. Ses responsabilités ont été intégrées dans les ReaderDelegate respectifs. UtilisezMobileReaderDelegate
pour les lecteurs mobiles etTapToPayReaderDelegate
pour les lecteurs Tap to Pay afin de gérer les événements de reconnexion.Si vous avez mis en œuvre votre propre logique de reconnexion des lecteurs et que vous souhaitez conserver ce comportement, vous pouvez désactiver la reconnexion automatique en attribuant la valeur
false
à setAutoReconnectOnUnexpectedDisconnect.
Avant
import StripeTerminal extension ReaderViewController: ReconnectionDelegate { // MARK: ReconnectionDelegate func terminal(_ terminal: Terminal, didStartReaderReconnect cancelable: Cancelable) { // 1. Notified at the start of a reconnection attempt // Use cancelable to stop reconnection at any time } func terminalDidSucceedReaderReconnect(_ terminal: Terminal) { // 2. Notified when reader reconnection succeeds // App is now connected } func terminalDidFailReaderReconnect(_ terminal: Terminal) { // 3. Notified when reader reconnection fails // App is now disconnected } }
Après
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 } }
Pour en savoir plus et obtenir des extraits de code, consultez notre documentation sur la tentative de reconnexion automatique.
Mettre à jour la gestion de la déconnexion des lecteurs
- Pour être informé de la déconnexion d’un lecteur, nous avons consolidé les rappels de déconnexion de tous les types de lecteurs en supprimant
terminal:didReportUnexpectedReaderDisconnect:
duSCPTerminalDelegate
. Utilisezreader:didDisconnect:
dans le cadre de ReaderDelegates pour être informé de la déconnexion d’un lecteur. Pour les lecteurs mobiles, le paramètre SCPDisconnectReason peut aider à identifier le motif de la déconnexion.
Lorsque la reconnexion automatique est activée, les méthodes -readerDidFailReconnect:
et reader:didDisconnect:
sont appelées si le SDK ne parvient pas à se reconnecter au lecteur et que celui-ci se déconnecte.
Avant
import StripeTerminal class ReaderViewController: UIViewController, TerminalDelegate { override func viewDidLoad() { super.viewDidLoad() Terminal.shared.delegate = self } // ... // MARK: TerminalDelegate func terminal(_ terminal: Terminal, didReportUnexpectedReaderDisconnect reader: Reader) { // Consider displaying a UI to notify the user and start rediscovering readers } }
Après
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 } }
Pour en savoir plus, consultez notre documentation sur la gestion manuelle des déconnexions.
Mettre à jour votre intégration de l’acceptation des paiements
- Vous pouvez désormais annuler
confirmPaymentIntent
en utilisant l’objetCancelable
renvoyé. Ceci est utile pour les paiements par code QR, dont le processus de confirmation est asynchrone. De même,confirmSetupIntent
etconfirmRefund
peuvent désormais être annulés. - Nous avons amélioré la sécurité des types et la cohérence entre les SDK mobiles en mettant à jour la façon dont les
paymentMethodTypes
sont spécifiés dansSCPPaymentIntentParameters
etSCPSetupIntentParameters
. Auparavant, ce paramètre était représenté par un tableau de chaînes (par exemple, [“card_present”]). Il utilise désormais les valeurs d’énumération deSCPPaymentMethodType
. - Pour améliorer le flux d’annulation des PaymentIntents et des SetupIntents, l’appel de
Terminal::cancelPaymentIntent
ouTerminal::cancelSetupIntent
annule également tout traitement de paiement en cours. Il n’est plus nécessaire d’annuler séparément les opérations de paiement telles que.
avant d’annuler le PaymentIntent.collectPaymentMethod - La valeur null peut désormais être attribuée à
SCPSetupIntent.
, par cohérence avecstripeId SCPPaymentIntent.
. Bien que la valeurstripeId stripeId
soit toujours présente, assurez-vous que votre code gère en toute sécurité le cas oùSCPSetupIntent.
pourrait êtrestripeId null
afin d’éviter une erreur de compilation.
Adapter l’utilisation pour le renommage et la fin de prise en charge
BluetoothReaderDelegate
a été renommé enMobileReaderDelegate
.- Dans
SCPReaderSoftwareUpdate,
nous avons renomméSCPUpdateTimeEstimate
enSCPUpdateDurationEstimate
etestimatedUpdateTime
endurationEstimate
pour mieux représenter leur intention. - Dans
SCPOfflineDetails
, qui représente les informations de paiement disponibles lorsqu’un paiement est créé ou confirmé hors ligne, nous avons remplacé le nom du paramètrecollectedAt
correspondant à l’heure à laquelle le paiement hors ligne a eu lieu parstoredAt
, afin de nous aligner sur les conventions de dénomination du SDK Terminal pour Android. - Nous avons renommé « local mobile » et « apple built in » en « Tap To Pay » dans tous les noms de fonctions et codes d’erreur du SDK.