sinsera_track_sdk 1.0.1
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'),
),
],
),
),
);
}
}