komissio_sdk 1.0.0
komissio_sdk: ^1.0.0 copied to clipboard
Official Komissio SDK for Flutter. Track affiliate conversions, attribute referrals, and manage commissions in your mobile app.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:komissio_sdk/komissio_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 1. Initialize the SDK on app startup
await Komissio.configure(
apiKey: 'km_live_your_api_key_here',
merchantId: 'your-merchant-uuid',
// Optional:
appVersion: '1.0.0',
logLevel: LogLevel.info, // Enable logs during development
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Komissio SDK Example',
home: const HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
String _status = 'Ready';
// 2. Handle deep links in your app
// Call this from your deep link handler (e.g., uni_links, app_links)
Future<void> _handleDeepLink() async {
final uri = Uri.parse(
'https://yourapp.com/promo?ref=sarah123&cmp=spring_sale',
);
final attributed = await Komissio.handleDeepLink(uri);
setState(() {
_status = attributed
? 'Attribution saved from deep link'
: 'No attribution params in link';
});
}
// 3. Track a conversion when user makes a purchase
Future<void> _trackPurchase() async {
setState(() => _status = 'Tracking...');
final result = await Komissio.trackConversion(
eventType: EventType.oneTimePurchase,
customerIdentifier: 'user@example.com',
value: 49.99,
orderId: 'order_${DateTime.now().millisecondsSinceEpoch}',
device: 'iPhone 15 Pro',
);
setState(() {
if (result.attributed) {
_status = 'Attributed to ${result.affiliate?.name}\n'
'Commission: ${result.commission?.amount} ${result.commission?.currency}';
} else {
_status = 'Not attributed: ${result.reason}';
}
});
}
// 4. Track a subscription
Future<void> _trackSubscription() async {
setState(() => _status = 'Tracking subscription...');
final result = await Komissio.trackConversion(
eventType: EventType.subscriptionCreated,
customerIdentifier: 'user@example.com',
value: 9.99,
orderId: 'sub_${DateTime.now().millisecondsSinceEpoch}',
metadata: {
'plan': 'premium',
'billing_period': 'monthly',
},
);
setState(() {
_status = result.attributed
? 'Subscription attributed! Commission: ${result.commission?.amount}'
: 'Not attributed: ${result.reason}';
});
}
// 5. Identify user for recurring commissions
Future<void> _identifyUser() async {
await Komissio.identify(customerId: 'cust_12345');
setState(() => _status = 'User identified for recurring tracking');
}
// 6. Fetch SDK config
Future<void> _fetchConfig() async {
try {
final config = await Komissio.fetchConfig();
setState(() {
_status = 'Merchant: ${config.companyName}\n'
'Currency: ${config.currency}\n'
'Active affiliates: ${config.activeAffiliates}\n'
'Commission rule: ${config.defaultCommissionRule?.name ?? "none"}';
});
} catch (e) {
setState(() => _status = 'Error: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Komissio SDK Example')),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Card(
child: Padding(
padding: const EdgeInsets.all(16),
child: Text(_status, style: const TextStyle(fontSize: 16)),
),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _handleDeepLink,
child: const Text('Simulate Deep Link'),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: _trackPurchase,
child: const Text('Track Purchase (\$49.99)'),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: _trackSubscription,
child: const Text('Track Subscription (\$9.99/mo)'),
),
const SizedBox(height: 8),
ElevatedButton(
onPressed: _identifyUser,
child: const Text('Identify User'),
),
const SizedBox(height: 8),
OutlinedButton(
onPressed: _fetchConfig,
child: const Text('Fetch SDK Config'),
),
],
),
),
);
}
}