minfo_sdk 2.3.1 copy "minfo_sdk: ^2.3.1" to clipboard
minfo_sdk: ^2.3.1 copied to clipboard

Minfo SDK for Flutter - AudioQR powered engagement platform

Minfo_sdk #

Multi-platform SDK for AudioQR-powered engagement. Connect users to campaigns via inaudible audio watermarks embedded in TV, radio, cinema, and physical spaces.

1. Features #

The SDK handles the complete AudioQR "connection" process:

  1. Activation: The SDK activates the microphone and listens for audible signals (TV/Radio).
  2. Decoding: The Cifrasoft engine processes the signal in real-time.
  3. Resolution: The SDK queries Minfo servers to retrieve the associated campaign data.
  4. Control: You manage your own UI and user experience.

2. Step-by-Step Implementation #

Flutter (Your Platform) #

  1. Add the SDK as a local dependency in pubspec.yaml

  2. Configurations:

    Android - configured in your AndroidManifest.xml:

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    

    iOS - configured in your Info.plist:

    <key>NSMicrophoneUsageDescription</key>
    <string>We need microphone access to detect AudioQR signals.</string>
    
  3. Install dependencies: flutter pub get

  4. Initialize in main.dart:

    import 'package:minfo_sdk/minfo_sdk.dart';
    
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
         
      await MinfoSdk.initialize(publicApiKey: 'your_public_key', privateApiKey: 'your_private_key');
         
      runApp(MyApp());
    }
    
  5. Listen for campaigns:

// Start Scanning: The startScan method automatically handles runtime permission requests for both iOS and Android.
MinfoSdk.instance.startScan(
  onResult: (result) {
      print('Detected: ${result.name}');
// result contains all campaign info (image, url, colors, etc.)
   },
  onError: (error) {
      print('Error: $error');
   },
);
//Stop Scanning
await MinfoSdk.instance.stop();

3. Campaign Data Structure #

When a campaign is detected, you receive a CampaignResult object with:

class CampaignResult {
  final int audioId;              // Detected audio ID
  final String? campaignUrl;      // Campaign URL
  final String? name;     // Campaign name
  final String? campaignDescription; // Campaign description
  final String? image;    // Campaign image URL
  final Map<String, dynamic>? campaignData; // Full campaign data
  final Map<String, dynamic>? metadata;     // Additional metadata
  final DateTime timestamp;       // Detection timestamp
  final String? error;           // Error message if any

  bool get isSuccess;            // True if campaign found
  bool get hasError;             // True if error occurred

// Note: Additional fields may be available but not documented here
// Check the actual implementation for complete field list
}

4. Architecture Overview #

The SDK relies on communication between Flutter and native engines:

  1. Flutter requests startup with startScan()
  2. Native Engines analyze audio stream
  3. Minfo API validates signal and returns campaign data
  4. Your App receives CampaignResult via stream and handles UI

5. Complete Example #

A complete implementation example with state management and UI is available in the /example folder of this repository.

6. License #

This SDK uses proprietary Cifrasoft libraries. See the LICENSE file for more details.