Get started

Testing

Run a debug build, open the app once, and check the dashboard. This page covers what counts as a test device, how to see its data, and how to test deferred deep links without publishing to Google Play.

Test devices

An install marked as a test device sends real data, but the dashboard keeps it out of your numbers until you ask for it. That way your own testing never inflates installs, conversion or revenue.

PlatformMarked as a test device when
AndroidThe build is debuggable (the default for debug builds), or you pass UnolinkOptions(debug = true). Also, from SDK 0.3.0, a release build you installed yourself with adb or Android Studio, and Google's pre-launch report and Firebase Test Lab phones.
iOSYou pass UnolinkOptions(debug: true). Use #if DEBUG, since a compiled library can't see your build settings. From SDK 0.3.0, TestFlight and Xcode builds are test devices on their own.
React NativeYou pass { debug: __DEV__ }, plus the iOS and Android rules above.
FlutterYou pass debug: kDebugMode, plus the iOS and Android rules above.

An install that makes a RevenueCat sandbox purchase (TestFlight, licence testers on Google Play) becomes a test device too, with everything it sent.

Google Play testing tracks (internal, closed, open) can't be told apart from the store release on the phone. Mark those builds yourself, for example with a build-time variable:

// React Native / Expo: set EXPO_PUBLIC_UNOLINK_TEST=1 only for testing-track builds
Unolink.configure("ulk_…", { debug: __DEV__ || process.env.EXPO_PUBLIC_UNOLINK_TEST === "1" })

See test data in the dashboard

Open your app → Funnel or Journeys and turn on Include test devices. Test installs then appear alongside real ones. Turn it off again before you read your real numbers.

A first open shows up within a few seconds of launching the app. Events are sent in batches every 15 seconds while the app is open, and right away when it goes to the background: press Home to send them now.

Debug logs

The SDK is quiet when everything works: by default it logs only warnings and errors. To see every step, raise the log level.

// Android: Logcat, tag "Unolink"
Unolink.configure(this, "ulk_…", UnolinkOptions(logLevel = LogLevel.DEBUG))
// iOS: Xcode console, prefix "[Unolink]"
Unolink.configure(apiKey: "ulk_…", options: UnolinkOptions(logLevel: .debug, debug: true))
// React Native: Xcode console or Logcat, tag "Unolink"
Unolink.configure("ulk_…", { debug: __DEV__, logLevel: "debug" })
// Flutter: Xcode console or Logcat, tag "Unolink"
await Unolink.configure('ulk_…', debug: kDebugMode, logLevel: UnolinkLogLevel.debug);

Set it back to the default before you release.

Simulate a Play install referrer (Android)

Google Play only passes an install referrer for real installs from Google Play. To test your deferred deep link code without one, give a native Android debug build a pretend referrer:

Unolink.configure(this, "ulk_…", UnolinkOptions(
    debugInstallReferrer = "unolink_click_id=clk_01JA0000000000000000000000&unolink_deep_link=%2Fpromo%2F3for2&unolink_p_offer=3for2",
))
  • It's used only in debuggable builds. Release builds ignore it and read the real referrer.
  • It's read on the first launch only, like the real one. Uninstall the app, or clear its storage, before each try.
  • Your deferred deep link listener receives deepLink = "/promo/3for2" and params = {offer=3for2} from the referrer. The SDK logs a warning that it used the simulated referrer.
  • The install itself isn't credited to a link unless the click ID is a real click from one of your app's links.

This option is part of the native Android SDK. In React Native and Flutter, test with a real install as below.

Test with a real install (Android)

  1. Upload a build to Google Play Console → Testing → Internal testing, and add yourself as a tester.
  2. On the phone, uninstall the app, then open one of your Unolink links and install from the Play listing it opens.
  3. Open the app. The install is credited to that link, and the deep link listener runs if the link has a deep link.

More in Android deferred deep links.

iPhone

On iPhone, installs and events are counted, but your app is never told which link was tapped: there's no deferred deep link, because Apple has no install referrer and Unolink never fingerprints. The dashboard still matches iPhone installs to their link, without fingerprinting. So on iOS, test that installs and events arrive. There's no deep link to check in the app.

Checklist

  • The first open appears in Journeys with Include test devices on.
  • Each funnel call shows up as a step on that install.
  • With RevenueCat: a sandbox purchase appears on the same install after setUserId.
  • Android: a Play internal-testing install from a link shows the link, and the deep link opens.
  • Release builds are configured without debug: true and with the default log level.

Something missing? See Troubleshooting.