For Flutter

One app store link for your Flutter app

Last updated

You built one Flutter app for iPhone and Android. Give it one link too. A Jumper.to link opens the App Store on iPhone and Google Play on Android, works inside Instagram and TikTok, and tells each store which campaign sent the visitor. Open it from Dart with url_launcher, and read the Google Play referrer if you want to know which link brought an install.

From store listings to one link

  1. Paste a store link. At app.jumper.to/new, paste your App Store or Google Play link. Jumper finds the app on the other store and fills in the name and icon.
  2. Save it with your email. Confirm the code we send. The link and its QR code are live at once.
  3. Use it in your app and everywhere else. Put it behind your “Share the app” button, in your README, your website and your bio.
  4. Add install links per channel. One per place you share the app, so App Store Connect and Google Play count installs for each.

Flutter apps often have a “Share the app”, “Rate us” or “Get the full version” button. With one Jumper link behind it, the same Dart code serves both platforms: no Platform.isIOS check and no two store addresses to keep in sync. If the app moves to a new listing, change the link in the dashboard; old app versions in the wild follow.

// pubspec.yaml: url_launcher
import 'package:url_launcher/url_launcher.dart';

/// Your Jumper link: the App Store on iPhone, Google Play on Android, your site elsewhere.
const appLink = 'https://oxi.cc/urapp';

Future<void> openStore() async {
  final ok = await launchUrl(Uri.parse(appLink), mode: LaunchMode.externalApplication);
  if (!ok) debugPrint('Could not open $appLink');
}

// A "Share the app" button: one link that works for iPhone and Android friends.
// share_plus: await SharePlus.instance.share(ShareParams(text: 'Get the app: $appLink'));

On your app’s page in the dashboard, “Add the social set” makes links for YouTube, TikTok, Instagram, Facebook at once; add others for a newsletter, a poster or an ad. Each is a short random address. When someone taps it, Apple receives ct (channel and campaign, cut to 30 characters) plus your pt, and Google Play receives a referrer with utm_source, utm_medium, utm_campaign and jumper=<link id>. Firebase Analytics reads the utm values with no code. Without Firebase, read the referrer yourself on first launch, as below.

Read the Google Play referrer in Dart

This tells your app which Jumper link and campaign brought the install. It is optional: the stores count installs per campaign either way. The play_install_referrer package (the maintained fork of android_play_install_referrer) wraps Google’s Install Referrer library. Apple gives apps no referrer, so on iOS the function returns null and you read campaigns in App Store Connect.

// pubspec.yaml: play_install_referrer
import 'package:play_install_referrer/play_install_referrer.dart';

/// The Jumper link id and campaign, or null when the install did not come from a Jumper link.
Future<Map<String, String>?> readJumperReferrer() async {
  try {
    final details = await PlayInstallReferrer.installReferrer;
    final raw = details.installReferrer; // utm_source=yt&utm_medium=description&…&jumper=lnk_…
    if (raw == null) return null;
    final query = Uri.splitQueryString(raw);
    final linkId = query['jumper'];
    return linkId == null ? null : {'link': linkId, 'campaign': query['utm_campaign'] ?? ''};
  } catch (_) {
    return null; // iOS, or no Google Play services
  }
}

Many Flutter apps used firebase_dynamic_links for store links and QR codes. Those links stopped on 25 August 2025 and return errors. If your links only sent people to the stores, a Jumper link is a direct replacement: paste the store links, keep your utm names on the install links so Firebase Analytics reports continue, and reprint QR codes once. Remove the firebase_dynamic_links package from pubspec.yaml.

Privacy policy, terms and support pages

Both stores ask for a privacy policy link before they accept your app, and Apple also asks for a support link. With Jumper.to you write or paste each page as plain text (or upload a .md file) and get an address like oxi.cc/<your link>/privacy-policy. Pages are text only: headings, lists, tables and links, no images or scripts. Each page uses one credit, like a link. Paste the privacy policy address in App Store Connect and Google Play Console before you submit.

What Jumper.to does not do

It does not open your app when it is already installed (that needs Universal Links and App Links on your own domain), it has no deferred deep links, and it does not follow people inside your app. It is a link and its numbers, not an attribution platform.

Make the link for your Flutter app

Paste your App Store or Google Play link. 3 free credits: each link or page uses one. Nothing to install in your app.

  • 3 free credits: each link or page uses one.
  • Nothing to install in your app
  • No credit card

Start from scratch

Questions

Do I need to add an SDK to my Flutter app?

No. Jumper.to works on the link only. Nothing ships inside your app, and there is no new release to make. Reading the Google Play referrer is optional and uses Google’s own library.

Which package opens the link from Flutter?

url_launcher, with LaunchMode.externalApplication, so the link opens in the system and the store app takes over. Nothing else is needed.

How do I read the Google Play referrer in Flutter?

With the play_install_referrer package, which wraps Google’s Install Referrer library. Call it once on first launch on Android; it throws on iOS, so catch that.

Does it replace Firebase Dynamic Links in my Flutter app?

For store links, QR codes and campaign tags, yes. For opening a screen in an installed app, use Universal Links and App Links; for deferred deep links, a deep-linking platform.

What does it cost?

3 free credits: each link or page uses one. Free credits renew every year. After that: $2 a credit a year, 10 credits for $10, 100 credits for $20. Taps are unlimited and there are no ads.

Will the link open my app if it is already installed?

No. A Jumper link always goes to the store, which shows an “Open” button when the app is installed. Opening a screen in your app needs Universal Links and App Links on your own domain.