notik_offerwall 1.0.0
notik_offerwall: ^1.0.0 copied to clipboard
Flutter SDK for the Notik Offerwall. Provides native offer listing, search, sort, categories, offer details, WebView-based offer flow, and postback tracking.
Notik Offerwall SDK for Flutter #
A fully native Flutter SDK for integrating the Notik Offerwall into your app. Users complete offers (installs, surveys, games, tasks) and earn rewards.
Unlike wrapper SDKs that embed a black-box native view, this SDK provides a fully customizable Flutter UI with native platform channels for deep hardware info collection.
Features #
- Native offerwall UI with search, category filter, sort, and infinite scroll
- Offer detail screen with multi-step missions and platform tags
- WebView-based offer redemption flow
- Postback/conversion tracking with polling and listener callbacks
- Sanctum token authentication bound to device fingerprint
- 40+ hardware fields collected via native Android (Kotlin) and iOS (Swift) code
- Full theming support (light, dark, custom)
- Auto token refresh and 401 retry
hasOffers()pre-check for conditional UI display- GAID (Android) and IDFA (iOS) collection
Installation #
Add to your pubspec.yaml:
dependencies:
notik_offerwall: ^1.0.0
Then run:
flutter pub get
Android #
Minimum SDK 21. Add internet permission (usually already present):
<uses-permission android:name="android.permission.INTERNET"/>
iOS #
Minimum iOS 13.0. Add to your Info.plist for ad tracking (IDFA):
<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to show you relevant offers.</string>
Quick Start #
import 'package:notik_offerwall/notik_offerwall.dart';
// 1. Initialize (verifies credentials + collects device info + gets auth token)
try {
final result = await NotikOfferwall.init(NotikConfig(
apiKey: 'your_api_key',
pubId: 'your_pub_id',
appId: 'your_app_id',
userId: 'user_123',
));
print('Connected: ${result.appName} (${result.status})');
} on NotikInitException catch (e) {
print('Init failed: ${e.message}');
}
// 2. Check if offers are available (optional)
final available = await NotikOfferwall.hasOffers();
// 3. Show the offerwall
NotikOfferwall.show(context);
// or as a bottom sheet:
NotikOfferwall.showAsBottomSheet(context);
// 4. Listen for completed offers
NotikOfferwall.onPostback((event) {
print('Earned ${event.payout} ${event.rewardName} for ${event.offerName}');
});
NotikOfferwall.startPostbackPolling();
// 5. Show reward history
NotikOfferwall.showRewardHistory(context);
// 6. Clean up when done
NotikOfferwall.dispose();
Theming #
NotikOfferwall.init(NotikConfig(
apiKey: 'your_api_key',
pubId: 'your_pub_id',
appId: 'your_app_id',
userId: 'user_123',
theme: NotikTheme(
primaryColor: Colors.deepPurple,
backgroundColor: Colors.white,
onSurfaceColor: Colors.black87,
buttonTextColor: Colors.white,
appBarTitle: 'Earn Rewards',
useDarkTheme: false,
),
));
Or use the built-in presets:
theme: NotikTheme.dark(),
theme: NotikTheme.light(),
How It Works #
init()validates credentials with the Notik backend and obtains a Sanctum token bound to the device fingerprint (valid 30 minutes, auto-refreshes)- Native platform channels collect 40+ hardware fields (SIM, sensors, camera, CPU, GPU, RAM, screen) for device registration and fraud prevention
- All API requests are authenticated with
Authorization: Bearer <token>andX-Device-Fingerprintheaders - Offers are fetched, filtered, and displayed in a fully Flutter-native UI
- Postbacks are polled periodically and delivered to registered listeners
API Reference #
| Method | Description |
|---|---|
NotikOfferwall.init(config) |
Initialize SDK, verify credentials, get auth token |
NotikOfferwall.show(context) |
Open offerwall full-screen |
NotikOfferwall.showAsBottomSheet(context) |
Open offerwall as bottom sheet |
NotikOfferwall.showRewardHistory(context) |
Open reward history screen |
NotikOfferwall.hasOffers() |
Check if offers exist for this user |
NotikOfferwall.onPostback(callback) |
Register postback listener |
NotikOfferwall.startPostbackPolling() |
Start auto-polling for conversions |
NotikOfferwall.stopPostbackPolling() |
Stop polling |
NotikOfferwall.checkPostbacks() |
Manual postback check |
NotikOfferwall.dispose() |
Clean up resources |
Requirements #
- Flutter >= 3.16.0
- Dart >= 3.2.0
- Android minSdk 21+
- iOS 13.0+
- A Notik publisher account (notik.me)
License #
MIT