sinsera_track_sdk 1.0.1 copy "sinsera_track_sdk: ^1.0.1" to clipboard
sinsera_track_sdk: ^1.0.1 copied to clipboard

Official Sinsera Track SDK for Flutter applications. Provides advanced attribution tracking with device fingerprinting and fraud analysis capabilities.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:sinsera_track_sdk/sinsera_track_sdk.dart';
import 'package:sinsera_track_sdk/src/device_info_collector.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sinsera Track SDK Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Sinsera Track SDK Example'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late SinseraTrackSdk _sdk;
  String _status = 'Not initialized';
  String _installId = 'None';
  bool _isInitialized = false;
  bool _hasActiveSession = false;
  List<Map<String, dynamic>> _sensors = [];

  @override
  void initState() {
    super.initState();
    _initializeSDK();
  }

  Future<void> _initializeSDK() async {
    _sdk = SinseraTrackSdk(
      appToken: '8a2d4add-6a08-473c-9c12-5b176c91987d', // Example token
      secretKey: 'b4f1001c-19da-4802-b178-1e320dc36a72', // Example secret
      packageName: 'com.sinseragames.frogman',
      enableDebugLogs: true,
    );

    setState(() {
      _status = 'Initializing...';
    });

    try {
      final success = await _sdk.initialize();
      setState(() {
        _status = success ? 'Initialized successfully' : 'Initialization failed';
        _isInitialized = _sdk.isInitialized;
      });
      
      // Load sensor information
      await _loadSensorInfo();
    } catch (e) {
      setState(() {
        _status = 'Initialization error: $e';
      });
    }
  }

  Future<void> _loadSensorInfo() async {
    try {
      final collector = DeviceInfoCollector();
      await collector.initialize();
      final sensors = await collector.getDeviceSensors();
      print('[SinseraSDK] UI received sensors: $sensors');
      setState(() {
        _sensors = sensors;
      });
      print('[SinseraSDK] UI sensors updated: $_sensors');
    } catch (e) {
      print('[SinseraSDK] Error loading sensor info: $e');
      // Handle error silently for demo purposes
    }
  }

  Future<void> _createSession() async {
    if (!_isInitialized) {
      _showSnackBar('SDK not initialized');
      return;
    }

    setState(() {
      _status = 'Creating session...';
    });

    try {
      final success = await _sdk.createSession();
      setState(() {
        _status = success ? 'Session created successfully' : 'Session creation failed';
        _hasActiveSession = _sdk.hasActiveSession;
        _installId = _sdk.installId ?? 'None';
      });
    } catch (e) {
      setState(() {
        _status = 'Session creation error: $e';
      });
    }
  }

  Future<void> _trackEvent(String eventName, [Map<String, dynamic>? eventValue]) async {
    if (!_hasActiveSession) {
      _showSnackBar('Session not active');
      return;
    }

    setState(() {
      _status = 'Tracking event: $eventName...';
    });

    try {
      final success = await _sdk.trackEvent(eventName, eventValue);
      setState(() {
        _status = success 
            ? 'Event tracked successfully: $eventName' 
            : 'Event tracking failed: $eventName';
      });
    } catch (e) {
      setState(() {
        _status = 'Event tracking error: $e';
      });
    }
  }

  void _showSnackBar(String message) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text(message)),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            // Status Card
            Card(
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    const Text(
                      'SDK Status',
                      style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                    ),
                    const SizedBox(height: 8),
                    Text('Status: $_status'),
                    Text('Initialized: $_isInitialized'),
                    Text('Active Session: $_hasActiveSession'),
                    Text('Install ID: $_installId'),
                  ],
                ),
              ),
            ),
            const SizedBox(height: 16),

            // Sensor Information Card
            if (_sensors.isNotEmpty) ...[
              Card(
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      const Text(
                        'Device Sensors',
                        style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                      ),
                      const SizedBox(height: 8),
                      ..._sensors.map((sensor) => Padding(
                        padding: const EdgeInsets.symmetric(vertical: 4.0),
                        child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Text(
                              '${sensor['sN']} (Type: ${sensor['sT']})',
                              style: const TextStyle(fontWeight: FontWeight.w500),
                            ),
                            Text('Vendor: ${sensor['sV']}'),
                            if (sensor.containsKey('sVS')) 
                              Text('Values: ${sensor['sVS']}'),
                            const SizedBox(height: 4),
                          ],
                        ),
                      )).toList(),
                    ],
                  ),
                ),
              ),
              const SizedBox(height: 16),
            ],

            // Actions
            const Text(
              'Actions',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 8),

            ElevatedButton(
              onPressed: _isInitialized ? null : _initializeSDK,
              child: const Text('Initialize SDK'),
            ),
            const SizedBox(height: 8),

            ElevatedButton(
              onPressed: _isInitialized && !_hasActiveSession ? _createSession : null,
              child: const Text('Create Session'),
            ),
            const SizedBox(height: 16),

            const Text(
              'Track Events',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 8),

            ElevatedButton(
              onPressed: _hasActiveSession 
                  ? () => _trackEvent('user_login')
                  : null,
              child: const Text('Track User Login'),
            ),
            const SizedBox(height: 8),

            ElevatedButton(
              onPressed: _hasActiveSession 
                  ? () => _trackEvent('level_completed', {
                      'level': 5,
                      'score': 12500,
                      'time_spent': 180,
                    })
                  : null,
              child: const Text('Track Level Completed'),
            ),
            const SizedBox(height: 8),

            ElevatedButton(
              onPressed: _hasActiveSession 
                  ? () => _trackEvent('purchase', {
                      'item_id': 'premium_upgrade',
                      'price': 9.99,
                      'currency': 'USD',
                    })
                  : null,
              child: const Text('Track Purchase'),
            ),
            const SizedBox(height: 8),

            ElevatedButton(
              onPressed: _hasActiveSession 
                  ? () => _trackEvent('custom_event', {
                      'custom_param': 'custom_value',
                      'timestamp': DateTime.now().millisecondsSinceEpoch,
                    })
                  : null,
              child: const Text('Track Custom Event'),
            ),
          ],
        ),
      ),
    );
  }
}
0
likes
125
points
--
downloads

Publisher

unverified uploader

Weekly Downloads

Official Sinsera Track SDK for Flutter applications. Provides advanced attribution tracking with device fingerprinting and fraud analysis capabilities.

Repository (GitHub)
View/report issues

Topics

#attribution #tracking #analytics #fraud-detection #mobile

Documentation

Documentation
API reference

License

MIT (license)

Dependencies

battery_plus, crypto, device_info_plus, ffi, flutter, http, package_info_plus, shared_preferences

More

Packages that depend on sinsera_track_sdk

Packages that implement sinsera_track_sdk