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
164
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