Firebase Dynamic Links replacement

Migrating from Firebase Dynamic Links to Ulinkly

Firebase Dynamic Links is winding down. Ulinkly delivers the same universal routing plus verified custom domains, automatic well-known hosting, deep analytics, and SDK endpoints that mirror — and expand — the Firebase surface area. Follow this guide to become production-ready without losing a single campaign slug.

Option A — one command (fastest)

If you have a Firebase Dynamic Links export, migrate everything in a single command.

# 1. Export your dynamic links from Firebase
#    (JSON DynamicLinkInfo, a { "links": [...] } batch, a list of *.page.link URLs, or a CSV inventory)

# 2. Preview the migration — nothing is created yet:
npx @ulinkly/cli import firebase --input fdl-export.json --domain yourapp.ulink.app

# 3. Create the links for real:
npx @ulinkly/cli import firebase --input fdl-export.json --domain yourapp.ulink.app --live --api-key $ULINK_API_KEY

The importer runs routing + attribution parity checks on every link. Prefer clicking through a UI? Use Option B below.

Unified & dynamic routing

Create dynamic links with platform-aware fallbacks or unified links that merge marketing and deep routing from the Links tab in every project.

Domains that verify fast

Connect a shared *.shared.ly subdomain instantly or add a custom host with TXT/A/CNAME guidance. Ulinkly handles SSL, CDN, and well-known assets automatically.

Analytics & SDK telemetry

Dashboard analytics blend click tracking, UTM capture, geo/device stats, and MAU data sourced from `/sdk/bootstrap` and `/sdk/sessions`.

Why Ulinkly is the Firebase successor

Every line below maps to a real feature inside the Ulinkly dashboard or API surface.

Capability
Firebase Dynamic Links
Ulinkly Deep Linking
Product status
Deprecated & in maintenance mode
Actively developed, roadmap published inside Dashboard → Projects
Link types
Dynamic links only
Dynamic + Unified links per project (marketing & universal routing)
Domain management
Limited custom domains, manual hosting
Verified shared.ly subdomains plus custom domains with DNS verification UI
Well-known files
Requires manual hosting
Automatic `/.well-known/apple-app-site-association` and `/.well-known/assetlinks.json`
Analytics depth
Basic click counts
Per-link analytics, MAU tracking, installation/session telemetry via /sdk endpoints
SDK & API support
Legacy SDKs, no new features
Flutter SDK, REST API, /sdk/bootstrap for instant install tokens

Option B — dashboard (no CLI)

Prefer a point-and-click migration? Work through these steps in order; everything references actual screens or endpoints inside the platform.

  1. 1. Export your Firebase inventory

    Download the list of Firebase Dynamic Links, fallback destinations, and campaign parameters you rely on today. You'll recreate only the slugs you still need.

  2. 2. Create a Ulinkly project

    In Dashboard → Projects → New Project, give the workspace a name, define your default fallback URL, and invite teammates who maintain links with you.

  3. 3. Configure platforms & app schemes

    Open Project → Configuration to set the iOS / Android bundle IDs and deep-link schemes the SDKs expect. Ulinkly ships the Apple App Site Association and Android Asset Links files for you.

  4. 4. Bring your domain online

    Start with the shared *.shared.ly domain or connect a custom host in Project → Domains. Verify DNS with the TXT/A/CNAME instructions that reference custom-domains.ulink.ly directly inside the dashboard.

  5. 5. Recreate links with unified or dynamic types

    Use Dashboard → Links → Create Link or the POST /sdk/links endpoint to recreate Firebase slugs. Set per-platform destinations, add Smart Parameters, and tag campaigns via metadata.

  6. 6. Update your apps & monitor traffic

    Swap out Firebase code for the Ulinkly SDKs (Flutter and native) or call /sdk/bootstrap to attach installations. Use Dashboard → Links → Analytics to confirm traffic, geolocation, and UTM data are flowing.

Automate link creation via /sdk/links

After verifying a domain, generate an API key (Dashboard → API Keys) and recreate Firebase slugs using the SDK endpoint shown below. The payload mirrors the fields in the dashboard “Create Link” form.

curl -X POST "https://api.ulink.ly/sdk/links" \
  -H "Content-Type: application/json" \
  -H "X-App-Key: YOUR_ULINK_API_KEY" \
  -d '{
    "type": "dynamic",
    "slug": "summer-offer",
    "iosFallbackUrl": "https://apps.apple.com/app/id000000",
    "androidFallbackUrl": "https://play.google.com/store/apps/details?id=com.app",
    "fallbackUrl": "https://example.com/campaign",
    "parameters": {
      "utm_source": "email",
      "utm_campaign": "sunshine"
    },
    "metadata": {
      "owner": "growth-team"
    },
    "domain": "links.shared.ly"
}'

Attach installations with /sdk/bootstrap

Replace Firebase install/session calls with `/sdk/bootstrap`. It provisions installations, ensures a 60-minute session, and returns an installation token you can reuse in `/sdk/resolve`.

curl -X POST "https://api.ulink.ly/sdk/bootstrap" \
  -H "Content-Type: application/json" \
  -H "X-App-Key: YOUR_ULINK_API_KEY" \
  -d '{
    "installationId": "device-123",
    "deviceModel": "iPhone16,2",
    "osName": "iOS",
    "osVersion": "18.0",
    "appVersion": "3.4.1",
    "metadata": {
      "source": "ios-app"
    }
}'

Technical checklist before you flip traffic

Every item below is backed by functionality already shipping in the dashboard or API.

Confirm every Firebase slug has a destination plan (web, iOS, Android).

Decide which slugs should become Unified vs Dynamic links in Ulinkly.

Verify at least one domain (shared or custom) before importing at scale.

Generate an API Key under Dashboard → API Keys for automation.

Install the Flutter SDK (or native wrappers) wherever Firebase code exists.

Replace Firebase test harnesses with the `/sdk/resolve` endpoint for QA.

Import support

Need bulk imports? Share the CSV of Firebase slugs and we’ll load them via the links service.

Request help

QA safety net

Use the same `/sdk/resolve?url=` endpoint the redirect service calls to confirm every slug before launch.

Hit the resolve endpoint

Always-on roadmap

Upcoming releases (deferred deep links, referral flows) are visible inside Dashboard → Projects → What's live & coming.

View roadmap

Ready to become the Firebase alternative?

Create a project, move a few slugs, and monitor them in Analytics before you flip fully to Ulinkly. The SDKs, dashboard, and APIs you see above are live in production today.