braintree_native_ui 0.4.0
braintree_native_ui: ^0.4.0 copied to clipboard
Plugin nativo para tokenizar cartão, rodar 3DS2 e coletar device data com Braintree usando UI própria.
braintree_native_ui #
Plugin Flutter/FlutterFlow para integração nativa com o Braintree (Android/iOS) sem Drop‑in, pensado para apps em larga escala. Tokeniza cartão, executa 3DS2, coleta device data, Apple Pay/Google Pay, PayPal (Vault/Checkout) e faz cache local de metadados não sensíveis (bandeira, últimos 4 dígitos, validade). Também permite armazenar o authorization (client token ou tokenization key) no dispositivo.
Recursos #
- Tokenização de cartão (Android/iOS)
- 3D Secure 2
- Coleta de device data (fraude)
- Apple Pay (iOS) e Google Pay (Android)
- PayPal Vault e Checkout
- Cache local de metadados: bandeira, últimos 4, validade (no máximo 5 itens)
- Armazenamento local do authorization (client token / tokenization key)
- Sem necessidade de editar Podfile ou build.gradle do app (dependências ficam no plugin)
Instalação #
pubspec.yaml
:
dependencies:
braintree_native_ui: ^0.4.0
http: ^1.2.2 # opcional, para fetchAndCacheClientToken()
No iOS, rode pod install
no projeto do app após atualizar dependências.
Uso rápido #
import 'package:braintree_native_ui/braintree_native_ui.dart';
final bnui = BraintreeNativeUi();
// 1) Obter authorization (client token via seu backend) e salvar
final token = await bnui.fetchAndCacheClientToken(
endpoint: Uri.parse('https://sua.api/client-token'),
// headers: {'Authorization': 'Bearer <jwt>'},
// body: {'customerId': '123'},
tag: 'main',
);
// 2) Tokenizar cartão (o plugin salva bandeira/últimos 4/validade automaticamente)
final nonce = await bnui.tokenizeCard(
authorization: token,
number: '4111111111111111',
expirationMonth: '12',
expirationYear: '2030',
cvv: '123',
);
// 3) 3DS (opcional)
final verified = await bnui.performThreeDSecure(
authorization: token,
nonce: nonce!,
amount: '10.00',
);
// 4) Apple Pay / Google Pay / PayPal
await bnui.requestApplePayPayment(
authorization: token,
merchantIdentifier: 'merchant.com.seu.id',
countryCode: 'US',
currencyCode: 'USD',
amount: '10.00',
);
await bnui.requestGooglePayPayment(
authorization: token,
amount: '10.00',
currencyCode: 'USD',
);
final ppVaultNonce = await bnui.requestPayPalVault(authorization: token);
final ppCheckoutNonce = await bnui.requestPayPalCheckout(
authorization: token,
amount: '10.00',
currencyCode: 'USD',
);
// 5) Ler metadados salvos para exibir no UI (FlutterFlow-friendly)
final cards = await bnui.getCachedCards();
// Ex.: [{type: 'card', brand: 'visa', last4: '1111', expirationMonth: '12', expirationYear: '2030'}]
Observações importantes #
- Client token não pode ser gerado no dispositivo. Gere no seu servidor com o SDK Server oficial da Braintree e entregue ao app (use
fetchAndCacheClientToken()
oucacheAuthorization()
). - Nunca armazene número completo ou CVV. O plugin armazena apenas metadados não sensíveis (bandeira, últimos 4, validade) após a tokenização.
- Nonces devem ser enviados ao seu backend para criar transações ou vault.
- “Transferir dinheiro entre usuários” exige lógica no servidor (ex.: capturas, split/payouts via PayPal/Braintree). O app móvel não move fundos sozinho.
- Apple Pay requer Merchant ID e entitlements; Google Pay requer configuração prévia. As dependências são incluídas no plugin; não é necessário editar Podfile ou build.gradle do app.
Veja example/
para um app de demonstração.
Licença #
MIT. Veja LICENSE
.