Skip to main content
The Flutter SDK records installs, sessions, screens and your own events, and links each install to the RevenueCat or Superwall customer. It sends the same data as the React Native SDK, so the dashboard, attribution and revenue work the same way.
  • No IDFA and no App Tracking Transparency prompt. The install id is a random id stored in the app.
  • Events are queued on the device and sent in batches. They survive offline periods and app restarts.
  • The client runs in Dart. The plugin’s native code only supplies the Apple Search Ads token, SKAdNetwork conversion value updates, the Play Install Referrer, the URL that opened the app and device fields.
  • Flutter 3.38 or later, iOS 13+ and Android 5.0 (API 21)+.
The source is on GitHub: appeeky/analytics-flutter.

Setup

1

Turn on Analytics for the app

In Appeeky, open the app under My Apps → Attribution and click Turn on attribution. Copy the publishable key (apk_pub_…). See the Quickstart for the API call.
2

Add the package

It depends on http and shared_preferences. On iOS it works with both CocoaPods and Swift Package Manager.
3

Add the postback keys on iOS

Add these keys to ios/Runner/Info.plist, so iOS sends copies of winning SKAdNetwork and AdAttributionKit postbacks to Appeeky:
An app can name only one endpoint. Leave the keys out if another provider already receives the copies, and use your own registrable domain when you self-host.Nothing has to be added to AppDelegate, SceneDelegate or the Android manifest. The plugin reads the URL that opened the app itself and never consumes it, so Flutter’s own deep linking and deep link packages keep working.
4

Initialize the SDK and link RevenueCat

Call identify again with the new id after Purchases.logIn(), and pass null on logout. With Superwall, pass the same user id you give Superwall.shared.identify(userId: ...).The SDK sends to https://ingest.appeeky.com/v1/ingest. For a self-hosted server, pass endpoint: 'https://analytics.example.com/v1/ingest'.
5

Track screens

Add the navigator observer to record a screen for each named page route:
Dialogs, bottom sheets and routes without a name are skipped. Pass nameExtractor to map RouteSettings to your own names, or routeFilter to choose which routes count. With go_router, name your routes and add the observer to GoRouter(observers: [...]).

Methods

Event names may use letters, digits, _, ., : and -, up to 64 characters. Property values are strings (up to 512 characters), numbers, booleans or null.

Ad revenue

Options


Automatic Events


Attribution

Attribution is collected once, on the first launch. Each source has 3 seconds to answer. A smart link with an in-app destination can route the user on the first launch. This works on Android, through the install referrer:
iOS has no deferred deep link through the App Store. Matching an App Store install back to a click would need device fingerprinting, which Apple does not allow.

SKAdNetwork conversion values

On iOS the SDK keeps the conversion value up to date. Values only go up: purchased and trialStarted only change the conversion value. Revenue comes from RevenueCat or Superwall, so nothing is counted twice.

Privacy

The SDK sends the install id, app version and build, OS version, device model, locale and the events you track. It never reads advertising identifiers. In App Store Connect, declare Usage Data → Product Interaction and Purchases as not linked to the user’s identity and not used for tracking. On Google Play, declare the same in the Data safety form (App activity, Purchase history). If your RevenueCat app user id is a real account id, declare them as linked instead. See Privacy.