Bemobi Smart Checkout Logo

SDK Bemobi Smart Checkout Flutter

SDK Flutter para integração com o Bemobi Smart Checkout, oferecendo uma solução simples e robusta para pagamentos.

Features

  • Integração simples com Smart Checkout
  • Suporte a callbacks de sucesso e erro
  • Ambiente de teste e produção
  • Bridge JavaScript-Flutter
  • Exemplo de implementação incluso

Getting started

  1. Adicione a dependência no seu pubspec.yaml:
dependencies:
  bemobi_smartcheckout_flutter: ^0.0.XX
  1. Configure as carteiras digitais (opcional):

Para Apple Pay (ios/Runner/Runner.entitlements):

<key>com.apple.developer.in-app-payments</key>
<array>
  <string>merchant.seu.identificador</string>
</array>

Para Google Pay (android/app/src/main/AndroidManifest.xml):

<meta-data
  android:name="com.google.android.gms.wallet.api.enabled"
  android:value="true" />
  1. Importe o pacote:
import 'package:bemobi_smartcheckout_flutter/bemobi_smartcheckout_flutter.dart';
  1. Inicialização e encerramento

Para iniciar a SDK com as configurações necessárias, chame a função BemobiSDK.initialize no void main() da sua aplicação:

void main() {
  BemobiSDK.initialize();
  runApp(const MyApp());
}

E para liberar os recursos utilizados pela SDK, chame a função BemobiSDK.dispose no void dispose() do estado da tela principal da aplicação:

@override
void dispose() {
  BemobiSDK.dispose();
  super.dispose();
}

Android

No arquivo android/app/src/main/AndroidManifest.xml adicione o intent-filter abaixo substituindo o {{PACKAGE}} pelo identificador do seu pacote.

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <activity android:name=".MainActivity">
            <!-- Adicione o intent-filter abaixo para habilitar o deep link -->
            <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="bsc-callback.bemobi.com" />
                <data android:pathPattern="/{{PACKAGE}}/..*" />
            </intent-filter>
            <!-- Fim do intent-filter -->
        </activity>
    </application>
</manifest>

OBS: Para o deep link funcionar corretamente com o domínio bsc-callback.bemobi.com, informe ao suporte da SDK as seguintes informações do seu aplicativo:

  • SHA-256 Certificate Fingerprint
  • Package Name

iOS

No Xcode adicione o arquivo ios/Runner/Runner.entitlements no target Runner com o seguinte conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <!-- Adicione as associações de domínio abaixo para habilitar o deep link -->
    <key>com.apple.developer.associated-domains</key>
    <array>
        <string>applinks:bsc-callback.bemobi.com</string>
        <string>webcredentials:bsc-callback.bemobi.com</string>
    </array>
    <!-- Fim das associações de domínio -->
</dict>
</plist>

OBS: Para o deep link funcionar corretamente com o domínio bsc-callback.bemobi.com, informe ao suporte da SDK as seguintes informações do seu aplicativo:

  • App ID
  • Bundle Identifier

Implementation example

Exemplo usando a biblioteca app_links:

class _MyHomePageState extends State<MyHomePage> {
  StreamSubscription<Uri>? _deepLinkListener;

  @override
  void initState() {
    super.initState();
    _deepLinkListener = AppLinks().uriLinkStream.listen((uri) {
      final data = DeepLinkData.fromUri(uri);
      // Implemente aqui sua lógica de integração do deep link...
    });
  }

  @override
  void dispose() {
    _deepLinkListener?.cancel();
    super.dispose();
  }
}

Usage

Exemplo básico de uso:

BemobiSDK.setCustomActionHandler((payload) {
  print('📱 Received custom action: $payload');
});

await BemobiSDK.startCheckout(
  context: context,
  environment: 'development',
  sessionCode: 'seu-codigo-de-sessao',
  navigateToPath: '/caminho_interno_checkout',
  onSuccess: (result) {
    print('Pagamento realizado com sucesso: $result');
  },
  onError: (error) {
    print('Erro no pagamento: $error');
  },
  onClose: () {
    print('Checkout fechado');
  },
);