eimzo_flutter 1.0.2 copy "eimzo_flutter: ^1.0.2" to clipboard
eimzo_flutter: ^1.0.2 copied to clipboard

Flutter plugin wrapping the official E-IMZO Mobile SDK for Uzbekistan electronic signatures. Supports PFX/QR/NFC ID-card/USB token signing and eimzo:// deep links.

eimzo_flutter #

Thin Flutter plugin that bootstraps the official E-IMZO Mobile SDK (eimzo-sdk-1.0.0.aar bundled inside) on the host activity. All signing / key-management UI is owned by the native SDK; the Flutter side just initializes it and receives eimzo://sign?... deep links.

Platform support #

Android iOS
✅ (minSdk 24) ✅ (iOS 16+)

Setup #

1. Add the dependency #

dependencies:
  eimzo_flutter: ^1.0.0

2. Android app/build.gradle #

android {
    compileSdk 34
    defaultConfig {
        minSdk 24
        targetSdk 34
    }
    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
    kotlinOptions { jvmTarget = '17' }
}

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
}
<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTop">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="eimzo" android:host="sign" />
    </intent-filter>
</activity>

Permissions (INTERNET, NFC, CAMERA, READ_EXTERNAL_STORAGE ≤ API 32) and the NFC / USB-host <uses-feature> declarations are merged in from the plugin manifest automatically.

4. Theme — must inherit Material Components #

The SDK's blocked-app screen requires a Material theme:

<style name="LaunchTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/launch_background</item>
</style>
<style name="NormalTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:windowBackground">?android:colorBackground</item>
</style>

5. iOS — minimum deployment target #

In ios/Podfile:

platform :ios, '16.0'
<!-- Camera (QR scanner) -->
<key>NSCameraUsageDescription</key>
<string>QR-kod skanerlash uchun kamera kerak</string>

<!-- NFC (ID-karta) -->
<key>NFCReaderUsageDescription</key>
<string>ID-karta orqali kalit o'qish uchun NFC kerak</string>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
  <string>65696D7A6F617070</string>  <!-- "eimzoapp" ASCII -->
</array>

<!-- eimzo:// deep links -->
<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLName</key>
    <string>YOUR.BUNDLE.ID.signing</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>eimzo</string>
    </array>
  </dict>
</array>

7. iOS — NFC entitlement #

Add to Runner.entitlements (create the file if missing and link it via Xcode → Signing & Capabilities → + Capability → Near Field Communication Tag Reading):

<key>com.apple.developer.nfc.readersession.formats</key>
<array><string>TAG</string></array>

Apple requires a one-time NFC entitlement approval on your Developer Portal account for production builds.

8. License #

The SDK is license-gated. Send your app's package name (Android) and bundle identifier (iOS) to info@yt.uz for approval. Unregistered apps automatically see the SDK's built-in blocked screen with an in-app email request form.

Usage #

import 'package:eimzo_flutter/eimzo_flutter.dart';
import 'package:flutter/foundation.dart';

class _AppState extends State<App> {
  final _eimzo = EimzoFlutter.instance;

  @override
  void initState() {
    super.initState();
    _bootstrap();
    _eimzo.onNewDeeplink().listen((link) {
      // handle eimzo://sign?qc=... while app is running
    });
  }

  Future<void> _bootstrap() async {
    final initial = await _eimzo.getInitialDeeplink(); // cold-start link
    final allowed = await _eimzo.init(
      config: const EimzoConfig(isTestMode: kDebugMode),
    );
    if (!allowed) return; // SDK is showing its blocked screen
    // ... proceed with normal app flow
  }
}

API #

  • EimzoFlutter.instance.init({EimzoConfig config})Future<bool> — runs EImzoSDK.checkLicenseAndInit on the host activity. Returns true if the app is licensed, false if the SDK has shown its blocked screen.
  • EimzoFlutter.instance.getInitialDeeplink()Future<String?> — the eimzo://sign?... URL the app was cold-started with (consume once).
  • EimzoFlutter.instance.onNewDeeplink()Stream<String> — broadcast stream of links delivered while the app is running.

EimzoConfig takes isTestMode (default false), and optional productionApiUrl / testApiUrl overrides.

EimzoException(code, message) wraps PlatformException errors from the native side.

License #

MIT

8
likes
0
points
1.06k
downloads

Publisher

unverified uploader

Weekly Downloads

Flutter plugin wrapping the official E-IMZO Mobile SDK for Uzbekistan electronic signatures. Supports PFX/QR/NFC ID-card/USB token signing and eimzo:// deep links.

Repository (GitHub)
View/report issues

Topics

#e-imzo #electronic-signature #uzbekistan #deep-link

License

unknown (license)

Dependencies

flutter

More

Packages that depend on eimzo_flutter

Packages that implement eimzo_flutter