▸Install the Flutter SDK
# pubspec.yaml
dependencies:
flutter:
sdk: flutter
respectlytics_flutter: ^3.0.0
Pure Dart — no platform channels for analytics. Same code on every platform Flutter compiles to (iOS, Android, web, macOS, Windows, Linux). On web, events are sent via the REST API; mobile platforms use the same path.
▸Initialize Respectlytics in Flutter
import 'package:flutter/material.dart';
import 'package:respectlytics_flutter/respectlytics_flutter.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Respectlytics.configure(appKey: '<YOUR_APP_KEY>');
runApp(const MyApp());
}
Initialize in main() after WidgetsFlutterBinding.ensureInitialized() and before runApp(). The future completes immediately on configuration; events queued before completion are flushed once the network is available.
✦Privacy & implementation notes
The ATT prompt's denial rate ranges 50–80% depending on category and phrasing — gaming and ad-heavy apps see the highest denials. The product consequence is that any analytics tied to IDFA effectively works for the minority who consent. Respectlytics produces the same data for 100% of users because it does not depend on IDFA at all.
App Review historical pattern: apps that ship NSUserTrackingUsageDescription in Info.plist while their code never actually calls ATTrackingManager.requestTrackingAuthorization are flagged as inconsistent — the key implies tracking that the code doesn't perform. Remove the key when you remove tracking; don't leave it as a relic.
The Flutter SDK is pure Dart. No MethodChannel, no platform-specific iOS or Android plugin code. The same code runs on every platform Flutter supports — including web and desktop targets. This eliminates one common audit surface ("what's the Android implementation doing?").
Always initialize after WidgetsFlutterBinding.ensureInitialized() and before runApp(). If you skip the binding step, the configure call will throw on platforms that need a binding for asynchronous I/O. The SDK documentation example uses this pattern by default.
⇋How this compares to other analytics SDKs
| ATT prompt behaviour | Firebase Analytics | Mixpanel | AppsFlyer | Respectlytics |
|---|---|---|---|---|
| Triggers ATT prompt by default | Yes (when IDFA enabled) | Yes (optional) | Yes (always) | No |
| Requires NSUserTrackingUsageDescription | Yes (when collecting IDFA) | Conditional | Yes | No |
| Behavior when user denies ATT | Limited tracking | Limited tracking | Restricted IDFA | Identical (ATT not in path) |
| Conversion-rate impact of prompt | Negative (~10–30% denial) | Negative | Negative | No prompt |
❓Frequently asked questions
Should we still implement ATT for other reasons?
Only if another SDK in your app needs it — e.g., an Ads SDK that uses the IDFA. If you remove all such SDKs, you can also remove the NSUserTrackingUsageDescription key. The presence of the key without a matching requestTrackingAuthorization call is itself a signal Apple considers.
What about post-install attribution from ad campaigns?
Use Apple's SKAdNetwork (deterministic, deterministic install attribution without IDFA) or AdAttributionKit (iOS 17.4+). Both work without ATT. These are not Respectlytics features — they're Apple frameworks your app implements directly. Respectlytics doesn't ingest install attribution.
Will the App Store reject my app if there's no ATT prompt?
No, as long as no SDK in your app actually tracks across other apps. Apps that genuinely don't track are not required to show ATT. The risk is the inverse: showing the prompt without backing the choice in code (or vice versa) gets flagged. Respectlytics's posture is consistent — no tracking, no prompt.
Does Respectlytics affect ATT prompt timing for OTHER SDKs in our app?
No. Each SDK calls requestTrackingAuthorization independently. Respectlytics's silent-on-ATT behavior doesn't influence other SDKs. If Firebase, AdMob, or Branch in the same app needs ATT, those SDKs still trigger the prompt according to their own logic.