From 13e184ddf64403fe1bfae1e7b4482ac4c13adb26 Mon Sep 17 00:00:00 2001 From: Cesar Sosa <101717495+cesar-sosa-hol@users.noreply.github.com> Date: Thu, 12 Feb 2026 00:17:18 +0100 Subject: [PATCH 1/2] update version --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f10b217..aa58e4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## Changelog +### v2026.2.1 Feb 12, 2026 + +* Fix SDK to Android SDK 2.3.4 and iOS to 2.3.1 + ### v2025.2.1 Feb 19, 2025 * Address NPM dependency issue diff --git a/package.json b/package.json index 4f592ef..e030cab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mobile-payments-sdk-react-native", - "version": "2025.9.1", + "version": "2026.2.1", "description": "Mobile Payments SDK plug-in for React Native. Enables developers to build secure in-person payment solutions.", "source": "./src/index.tsx", "main": "./lib/commonjs/index.js", From 89376ab357a839d9e522ead52221fce9186c702c Mon Sep 17 00:00:00 2001 From: Cesar Sosa Date: Fri, 13 Feb 2026 20:29:06 +0100 Subject: [PATCH 2/2] fix issues and add tap to pay --- example/src/Screens/HomeScreen.tsx | 17 +++++++++++------ example/src/Screens/PermissionsScreen.tsx | 2 +- ios/Mappers.swift | 11 ++++------- ios/MobilePaymentsSdkReactNative.swift | 2 -- src/models/enums.ts | 1 + 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/example/src/Screens/HomeScreen.tsx b/example/src/Screens/HomeScreen.tsx index a8c7448..421d416 100644 --- a/example/src/Screens/HomeScreen.tsx +++ b/example/src/Screens/HomeScreen.tsx @@ -11,14 +11,19 @@ import { type PaymentParameters, type PromptParameters, ProcessingMode, - type Failure, } from 'mobile-payments-sdk-react-native'; import React, { useState } from 'react'; -import { View, Text, Image, StyleSheet, TouchableOpacity } from 'react-native'; +import { + View, + Text, + Image, + StyleSheet, + TouchableOpacity, +} from 'react-native'; +import { SafeAreaView } from 'react-native-safe-area-context'; import uuid from 'react-native-uuid'; import LoadingButton from '../components/LoadingButton'; import HeaderButton from '../components/HeaderButton'; -import { SafeAreaView } from 'react-native-safe-area-context'; const HomeView = () => { const navigation = useNavigation(); @@ -121,8 +126,8 @@ const styles = StyleSheet.create({ backgroundColor: 'white', }, header: { - justifyContent: 'space-between', flexDirection: 'row', + marginBottom: 50, paddingLeft: 16, paddingRight: 16, }, @@ -131,8 +136,7 @@ const styles = StyleSheet.create({ }, content: { alignItems: 'center', - flex: 1, - justifyContent: 'center', + flex: 9, paddingLeft: 16, paddingRight: 16, }, @@ -148,6 +152,7 @@ const styles = StyleSheet.create({ marginBottom: 32, }, mockButton: { + flex: 1, alignItems: 'center', }, mockReaderText: { diff --git a/example/src/Screens/PermissionsScreen.tsx b/example/src/Screens/PermissionsScreen.tsx index ed42a9f..40eb9e1 100644 --- a/example/src/Screens/PermissionsScreen.tsx +++ b/example/src/Screens/PermissionsScreen.tsx @@ -7,6 +7,7 @@ import { Alert, Platform, } from 'react-native'; +import { SafeAreaView } from 'react-native-safe-area-context'; import DismissButton from '../components/DismissButton'; import PermissionRow from '../components/PermissionRow'; import { @@ -28,7 +29,6 @@ import { } from 'react-native-permissions'; import LoadingButton from '../components/LoadingButton'; import BuildConfig from 'react-native-build-config'; -import { SafeAreaView } from 'react-native-safe-area-context'; export const requestBluetooth = () => { requestMultiple( diff --git a/ios/Mappers.swift b/ios/Mappers.swift index c03c2eb..8d3c7e9 100644 --- a/ios/Mappers.swift +++ b/ios/Mappers.swift @@ -18,6 +18,10 @@ class Mappers { additionalPayments = AdditionalPaymentMethods.all } else if (additionalPaymentsRawArray.contains("KEYED")) { additionalPayments = AdditionalPaymentMethods.keyed + } else if (additionalPaymentsRawArray.contains("TAP_TO_PAY")) { + additionalPayments = AdditionalPaymentMethods.tapToPay + } else if (additionalPaymentsRawArray.contains("CASH")) { + additionalPayments = AdditionalPaymentMethods.cash } guard let prompt = PromptMode(rawValue: promptMode) else { return .failure(.cannotCreatePrompt) @@ -45,13 +49,6 @@ class Mappers { processingMode: processingMode ) } - else if let idempotencyKey = paymentParameters["idempotencyKey"] as? String { - paymentParams = PaymentParameters( - idempotencyKey: idempotencyKey, - amountMoney: amountMoney, - processingMode: processingMode - ) - } guard let paymentParams else { diff --git a/ios/MobilePaymentsSdkReactNative.swift b/ios/MobilePaymentsSdkReactNative.swift index f3d0e39..440d16e 100644 --- a/ios/MobilePaymentsSdkReactNative.swift +++ b/ios/MobilePaymentsSdkReactNative.swift @@ -579,8 +579,6 @@ extension MobilePaymentsSdkReactNative: PaymentManagerDelegate { switch paymentError { case .deviceTimeDoesNotMatchServerTime: errorMessage = "The local device time is out of sync with the server time, which could lead to inaccurate payment reporting. Check your device's time and attempt your action again." - case .idempotencyKeyReused: - errorMessage = "The idempotency key used for this payment has already been used. Review previous payments to ensure you are not processing a duplicate payment, and then try again with a new idempotency key." case .invalidPaymentParameters: errorMessage = "The PaymentParameters provided were invalid. Check the request details and try the payment again." case .invalidPaymentSource: diff --git a/src/models/enums.ts b/src/models/enums.ts index 278066e..24bc82f 100644 --- a/src/models/enums.ts +++ b/src/models/enums.ts @@ -7,6 +7,7 @@ export enum AccountType { export enum AdditionalPaymentMethodType { ALL = 'ALL', KEYED = 'KEYED', + TAP_TO_PAY = 'TAP_TO_PAY', } export enum AuthorizationState {