Lync Attribution SDK for Flutter
Cross-platform attribution tracking for Flutter apps. Track user interactions, app installs, and conversions across mobile platforms with seamless integration.
Features
✅ Cross-platform attribution - Works on iOS and Android
✅ Device fingerprinting - Consistent user identification across platforms
✅ Real-time tracking - Instant event tracking and attribution
✅ Custom events - Track any custom user interactions
✅ Privacy-focused - GDPR and privacy regulation compliant
✅ Easy integration - Simple API with comprehensive documentation
Installation
Add this to your package's pubspec.yaml
file:
dependencies:
lync: ^1.0.0
Then run:
flutter pub get
Quick Start
1. Initialize Lync
import 'package:lync/lync.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Initialize with your configuration
await LyncClient.initialize(
LyncConfig.production(
apiKey: 'your-api-key-here',
globalProperties: {
'app_version': '1.0.0',
'environment': 'production',
},
),
);
runApp(MyApp());
}
2. Track Events
// Track a click event
final attribution = await LyncClient.instance.trackClick(
linkId: 'campaign-link-123',
customData: {'source': 'email', 'campaign': 'summer2024'},
);
// Track app install
await LyncClient.instance.trackInstall(
referrer: 'https://example.com/campaign',
);
// Track conversion
await LyncClient.instance.trackConversion(
conversionType: 'purchase',
value: 29.99,
currency: 'USD',
);
// Track custom events
await LyncClient.instance.trackEvent(
eventType: 'feature_used',
eventData: {'feature_name': 'premium_feature'},
);
API Reference
LyncClient
The main client for tracking attribution events.
Initialize
static Future<LyncClient> initialize(LyncConfig config)
Initialize the Lync client with configuration.
Track Methods
// Track click events
Future<LyncAttribution?> trackClick({
required String linkId,
Map<String, dynamic>? customData,
})
// Track app installs
Future<LyncAttribution?> trackInstall({
String? referrer,
Map<String, dynamic>? customData,
})
// Track conversions
Future<LyncAttribution?> trackConversion({
required String conversionType,
required double value,
String? currency,
Map<String, dynamic>? customData,
})
// Track custom events
Future<LyncAttribution?> trackEvent({
required String eventType,
Map<String, dynamic>? eventData,
Map<String, dynamic>? customData,
})
Properties
String? get userId // Current user ID
String? get sessionId // Current session ID
String? get deviceFingerprint // Device fingerprint for attribution
LyncConfig
Configuration for the Lync client.
Factory Constructors
// Development configuration
LyncConfig.development({
String? apiKey,
String apiBaseUrl = 'https://api.lync.so',
Map<String, dynamic>? globalProperties,
})
// Production configuration
LyncConfig.production({
required String apiKey,
String apiBaseUrl = 'https://api.lync.so',
Map<String, dynamic>? globalProperties,
})
LyncAttribution
Attribution result returned from tracking events.
class LyncAttribution {
final bool attributed; // Whether attribution was successful
final DateTime? clickTime; // Original click timestamp
final DateTime? installTime; // Install timestamp
final DateTime? conversionTime; // Conversion timestamp
final String? source; // Attribution source
final String? campaign; // Campaign name
final String? medium; // Traffic medium
final String? linkId; // Original link ID
final double? confidence; // Attribution confidence (0.0-1.0)
final String? attributionModel; // Model used for attribution
}
Examples
Basic Integration
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
_initializeLync();
}
Future<void> _initializeLync() async {
await LyncClient.initialize(
LyncConfig.production(apiKey: 'your-api-key'),
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: ElevatedButton(
onPressed: () async {
await LyncClient.instance.trackClick(
linkId: 'button-click',
customData: {'button': 'cta'},
);
},
child: Text('Track Click'),
),
),
);
}
}
E-commerce Integration
class ProductPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
// Track purchase conversion
final attribution = await LyncClient.instance.trackConversion(
conversionType: 'purchase',
value: 49.99,
currency: 'USD',
customData: {
'product_id': 'premium-plan',
'category': 'subscription',
'payment_method': 'credit_card',
},
);
if (attribution?.attributed == true) {
print('Purchase attributed to: ${attribution!.source}');
}
},
child: Text('Buy Now'),
);
}
}
Session Management
class AppLifecycleHandler extends WidgetsBindingObserver {
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
// Start new session when app becomes active
LyncClient.instance.startNewSession();
}
}
}
Configuration Options
Environment Setup
// Development
final config = LyncConfig.development(
apiKey: 'dev-key',
globalProperties: {'debug': true},
);
// Production
final config = LyncConfig.production(
apiKey: 'prod-key',
globalProperties: {'version': '1.0.0'},
);
// Custom
final config = LyncConfig(
apiBaseUrl: 'https://custom-api.example.com',
apiKey: 'custom-key',
debug: false,
timeoutSeconds: 30,
maxRetryAttempts: 3,
);
Global Properties
Set properties that will be included with every event:
final config = LyncConfig.production(
apiKey: 'your-key',
globalProperties: {
'app_version': '1.2.3',
'build_number': '456',
'environment': 'production',
'user_segment': 'premium',
},
);
Platform-Specific Features
iOS Integration
- Apple Search Ads Attribution: Automatic attribution from Apple Search Ads
- SKAdNetwork Support: Compatible with Apple's privacy-focused attribution
- Universal Links: Deep link attribution tracking
Android Integration
- Google Play Install Referrer: Automatic referrer tracking
- App Links: Deep link attribution tracking
- Google Play Instant: Attribution for instant app experiences
Privacy & Compliance
- GDPR Compliant: No PII collection without consent
- CCPA Compliant: Respects California privacy regulations
- Configurable Data Collection: Control what data is collected
- Local Storage: User preferences stored locally
Testing
Run the test suite:
flutter test
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
- 📧 Email: support@lync.so
- 🐛 Issues: GitHub Issues
- 📖 Documentation: pub.flutter-io.cn/packages/lync
- 💬 Discord: Join our community
Links
Libraries
- lync
- Cross-platform attribution tracking SDK for Flutter