bemobi_smartcheckout_flutter 0.1.1
bemobi_smartcheckout_flutter: ^0.1.1 copied to clipboard
Flutter SDK for Bemobi Smart Checkout: digital wallets, callbacks, customization, and deep link integration.
Bemobi Smart Checkout Flutter SDK #
SDK Flutter para integração com o Smart Checkout, oferecendo uma solução robusta e flexível para pagamentos digitais, incluindo suporte a carteiras digitais, callbacks, customização visual e integração via deep link.
⚠️ Aviso de retrocompatibilidade
A classe
BemobiSDK
foi substituída pela nova API unificadaSmartCheckout
introduzida na versão0.1.0
.Por enquanto está mantida a retrocompatibilidade para integrações que utilizam a API anterior, mas recomenda-se migrar o quanto antes para a nova implementação.
Sumário #
- Recursos
- Instalação
- Carteiras digitais
- Configuração
- Uso básico
- Customização visual
- Ações customizadas
- Conversão de string para enums
- Integração com deep link
- Exemplo completo
- Informações adicionais
Recursos #
- Callbacks para sucesso, erro e fechamento.
- Compatível com Apple Pay e Google Pay.
- Personalização visual do bottom sheet.
- Suporte a deep link para Android e iOS.
Instalação #
- Adicione a dependência no seu
pubspec.yaml
:
dependencies:
bemobi_smartcheckout_flutter: ^0.1.1
- Execute:
flutter pub get
Carteiras digitais #
Configuração das carteiras digitais #
iOS (Apple Pay)
No arquivo ios/Runner/Runner.entitlements
:
<key>com.apple.developer.in-app-payments</key>
<array>
<string>merchant.seu.identificador</string>
</array>
Android (Google Pay)
No arquivo android/app/src/main/AndroidManifest.xml
:
<meta-data
android:name="com.google.android.gms.wallet.api.enabled"
android:value="true" />
Configuração #
Parâmetros de configuração #
A configuração da sessão de checkout é feita via SmartCheckout.config
:
final config = SmartCheckout.config(
environment: SmartCheckout.environment.production, // or .sandbox, .development
sessionCode: 'a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d', // optional
partnerKey: 'abc-1234', // optional ([a-z]{3}-[0-9]{4})
deepLink: Uri.parse('https://smart-checkout.bemobi.com/callback/abc-1234'), // optional
initialHeightFraction: 0.8, // optional (0.0 to 1.0)
style: SmartCheckout.style.rounded, // or .flat (optional)
);
Os ambientes disponíveis são:
- SmartCheckout.environment.sandbox
- SmartCheckout.environment.development
- SmartCheckout.environment.production
Os estilos disponíveis são:
- SmartCheckout.style.rounded
- SmartCheckout.style.flat
Callbacks #
Você pode definir handlers para os principais eventos do fluxo de checkout:
onSuccess(Map<String, dynamic> result)
: chamado quando o pagamento é concluído com sucesso.onError(Map<String, dynamic> error)
: chamado em caso de erro.onClose()
: chamado quando o bottom sheet é fechado.
Exemplo:
final callbacks = SmartCheckout.callbacks(
onSuccess: (result) => print('Checkout completed successfully: $result'),
onError: (error) => print('Checkout error: $error'),
onClose: () => print('Checkout closed'),
);
Uso básico #
Para abrir o checkout em um modal bottom sheet:
SmartCheckout.showBottomSheet(
context: context,
config: config,
callbacks: callbacks,
);
Customização visual #
O visual do bottom sheet pode ser customizado via o parâmetro style
:
SmartCheckout.style.rounded
: bordas arredondadas (padrão).SmartCheckout.style.flat
: bordas retas.
Você também pode ajustar a altura inicial do bottom sheet com initialHeightFraction
(valor entre 0.0 e 1.0).
Ações customizadas #
Você pode registrar um handler para ações customizadas disparadas pelo fluxo do checkout:
SmartCheckout.setCustomActionHandler((payload) {
print('Custom action received: $payload');
});
Conversão de string para enums #
Se você precisa converter uma string em algum dos enums utilizados, use os métodos utilitários estáticos:
final environment = SmartCheckout.parseEnvironmentFrom('production'); // SmartCheckout.environment.production
final style = SmartCheckout.parseStyleFrom('rounded'); // SmartCheckout.style.rounded
Se o valor informado for inválido, será lançado um ArgumentError.
Integração com deep link #
Android #
No arquivo android/app/src/main/AndroidManifest.xml
, adicione o seguinte intent-filter
na sua Activity principal (substitua abc-1234
pelo seu identificador do parceiro):
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="smart-checkout.bemobi.com" />
<data android:path="/callback/abc-1234" />
</intent-filter>
Importante: Para o deep link funcionar corretamente com o domínio smart-checkout.bemobi.com
, informe ao suporte:
- Package Name
- SHA-256 Certificate Fingerprint
iOS #
No Xcode, adicione ao arquivo ios/Runner/Runner.entitlements
:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:smart-checkout.bemobi.com</string>
<string>webcredentials:smart-checkout.bemobi.com</string>
</array>
Importante: Para o deep link funcionar corretamente com o domínio smart-checkout.bemobi.com
, informe ao suporte:
- App ID (Team ID + Bundle Identifier)
Exemplo de uso do deep link #
Utilizando a biblioteca app_links:
class _MyHomePageState extends State<MyHomePage> {
StreamSubscription<Uri>? _deepLinkListener;
@override
void initState() {
super.initState();
_deepLinkListener = AppLinks().uriLinkStream.listen((uri) {
// Example opening the checkout from the deep link
final config = SmartCheckout.config(
environment: SmartCheckout.environment.production,
deepLink: uri,
);
SmartCheckout.showBottomSheet(
context: context,
config: config,
callbacks: callbacks,
);
});
}
@override
void dispose() {
_deepLinkListener?.cancel();
super.dispose();
}
}
A estrutura do deep link segue o padrão:
https://smart-checkout.bemobi.com/callback/{partnerKey}
Onde {partnerKey}
é o identificador do parceiro no formato [a-z]{3}-[0-9]{4}:
https://smart-checkout.bemobi.com/callback/abc-1234
Exemplo completo #
import 'package:bemobi_smartcheckout_flutter/bemobi_smartcheckout_flutter.dart';
void openCheckout(BuildContext context) {
final config = SmartCheckout.config(
environment: SmartCheckout.environment.production,
sessionCode: 'a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d',
partnerKey: 'abc-1234',
deepLink: Uri.parse('https://smart-checkout.bemobi.com/callback/abc-1234'),
initialHeightFraction: 0.9,
style: SmartCheckout.style.rounded,
);
final callbacks = SmartCheckout.callbacks(
onSuccess: (result) => print('Checkout completed successfully: $result'),
onError: (error) => print('Checkout error: $error'),
onClose: () => print('Checkout closed'),
);
SmartCheckout.showBottomSheet(
context: context,
config: config,
callbacks: callbacks,
);
}
Informações adicionais #
- Saiba mais sobre o Smart Checkout e soluções de negócio em: https://bemobi.com/pt/smart-checkout-pt/