Skip to content

Deep-link wiring: drop iOS plist entries, or wire Android + Dart handler + tests #554

@TaprootFreak

Description

@TaprootFreak

Context

The repo is in an inconsistent state for deep-linking:

  • ios/Runner/Info.plist:25-37 declares CFBundleURLTypes with scheme realunit-wallet (URL name realunit)
  • ios/Runner/Info.plist:40-41 sets FlutterDeepLinkingEnabled: true
  • android/app/src/main/AndroidManifest.xml:36-39 has only the LAUNCHER intent — no <intent-filter> with android:scheme, no assetlinks.json
  • lib/** has no Dart handler — no uni_links, app_links, getInitialLink, or Uri.parse-driven routing

So the iOS app advertises a realunit-wallet:// scheme that nothing handles. The Android app doesn't advertise the scheme at all. This is a real bug that nobody owns today.

This issue picks one of two paths and ships it.

Options

Option A — Drop the iOS plist entries

Remove CFBundleURLTypes block (Info.plist:25-37) and FlutterDeepLinkingEnabled (:40-41). Add a CI guard so they can't be reintroduced without a Dart handler PR.

  • Pros: Minimal change; closes the inconsistency.
  • Cons: Loses any future option to deep-link without re-declaring.
  • Effort: 0.5 day (plist edits + CI guard + test that link clicks now do nothing).

Option B — Wire the handler

  • Add Android <intent-filter> with android:scheme="realunit-wallet" in AndroidManifest.xml

  • Add a Dart deep-link receiver (likely app_links package, modern, supports both platforms)

  • Define the supported link patterns (e.g. realunit-wallet://buy?amount=…, realunit-wallet://kyc/resume)

  • Wire cold-start, background-resume, and malformed-URI paths through _navigate()

  • Add Tier-0 cubit tests + a Tier-1 integration test driving the receiver

  • Pros: Adds real product capability (email-link onboarding, payment links).

  • Cons: More work; needs product input on which link patterns to support.

  • Effort: 2-4 days depending on link patterns.

Deliverable

  1. Decision: A or B
  2. Implementation per the choice
  3. If Option A: .test-coverage-allowlist entry or removed plist block; CI guard
  4. If Option B: package added, manifest updated, receiver wired, tests added, link-pattern docs in docs/

Acceptance criteria

  • iOS and Android are in the same state w.r.t. deep-links (both off, or both on with parity)
  • No "advertises a scheme nothing handles" inconsistency remains
  • If Option B: at least one supported link pattern with test coverage end-to-end

Estimated effort

Option Days
A — drop entries + CI guard 0.5
B — wire handler + Android + tests 2-4

Decision: 0.25 day. Total: 0.75-4.25 engineer-days.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions