Skip to content

feat(platform-wallet)!: invitation links are AppsFlyer applinks only - #4285

Draft
shumkov wants to merge 2 commits into
feat/kotlin-dashpay-invitationsfrom
feat/invitation-applink-only
Draft

feat(platform-wallet)!: invitation links are AppsFlyer applinks only#4285
shumkov wants to merge 2 commits into
feat/kotlin-dashpay-invitationsfrom
feat/invitation-applink-only

Conversation

@shumkov

@shumkov shumkov commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Issue being fixed or feature implemented

Owner decision: AppsFlyer applinks are the only invitation transport, matching the production wallets. The dashpay://invite custom scheme — which legacy dash-wallet uses only as its internal deep-link representation (InvitationLinkData.URI_PREFIX); its outward share link has always been the applink form — was promoted to the emitted transport during the iOS port as a workaround while AppsFlyer access was blocked. This retires it end-to-end.

Stacked on #4284 (the Kotlin invitations port). Domain-side infra (association files + fallback) is tracked for the infra team in #4212.

What was done?

How Has This Been Tested?

  • platform-wallet invitation tests 40/40 (round-trips on the applink form + the scheme-retirement rejection pin); FFI marshaling tests 12/12; JVM suites + :app:assembleDebug green; build_android.sh --verify green on both ABIs.
  • On-emulator: applink VIEW intents verified cold-start and warm-start — the app routes to the DashPay tab with the link parked until a wallet exists.
  • Not covered here: an iOS xcodebuild run (string/plist/guard-level changes — relying on the iOS CI lane) and a funded create→claim round-trip on the new link form (the codec delta is the URI prefix only, fully unit-pinned; the funded loop was exercised pre-switch in feat(kotlin-sdk): DashPay invitations — create, claim, reclaim, persistence (DIP-13) #4284).

Breaking Changes

  • Links produced by prior builds in the dashpay://invite form are no longer parsed; only the applink form is accepted. On-chain semantics, QR/paste claim flows, and the persisted invitation model are unchanged.
  • Until infra: host association files + fallback on invitations.dashpay.io for DIP-13 invitation applinks #4212 hosts assetlinks.json / apple-app-site-association and a (non-logging — the query carries the one-time bearer pk) fallback page, freshly emitted links do not auto-open the apps: Android offers the chooser, iOS falls through to the browser. Claiming via paste/QR is unaffected.

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have added "!" to the title and described breaking changes in the corresponding section if my code contains any
  • I have made corresponding changes to the documentation if needed

🤖 Generated with Claude Code

shumkov and others added 2 commits July 23, 2026 18:20
Owner decision: the AppsFlyer applink form
(https://invitations.dashpay.io/applink?...) is the single standard
invitation transport, matching the production wallets — the interim
dashpay://invite custom scheme (an AI-introduced divergence) is retired
end-to-end, on iOS and Android alike:

- Shared codec (rs-platform-wallet crypto/invitation.rs): emit flips to
  the applink prefix; parse accepts ONLY the applink host/path — the
  custom scheme is rejected (new regression pin
  emits_the_applink_transport_and_rejects_the_retired_custom_scheme).
  Both example apps pick this up automatically via the shared codec.
- Kotlin app: the dashpay:// intent-filter and MainActivity scheme
  branch are removed (applink filter only, still unverified pending
  assetlinks.json); claim-sheet placeholder + docs updated.
- Until the domain hosts the association files + a fallback page, taps
  without the app fall to the browser — the host-side checklist for the
  infra team is #4212 (supersedes closed #4096); the
  client-side verification flips are one-liners once it lands.

Breaking for link producers/consumers of the previous scheme form; the
on-chain semantics are unchanged. platform-wallet invitation tests
40/40, FFI 12/12, JVM suites + :app:assembleDebug green. The Android
.so requires a rebuild before the next emulator run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rt only

Completes the AppsFlyer-only decision on the iOS side: the CFBundleURLTypes
dashpay scheme registration is removed (Info.plist now documents the
Universal-Links path gated on #4212), .onOpenURL matches
the https applink host/path (fires once the AASA verification lands;
until then links are claimed via paste/QR), and UI copy / KDoc references
to the retired scheme are updated. Legacy dash-wallet keeps
dashpay://invite only as its INTERNAL deep-link representation
(InvitationLinkData.URI_PREFIX); its outward share link has always been
the applink form — which is now the single transport everywhere.

String/plist/guard-level changes only; not xcodebuild-verified in this
session (Android-focused environment) — flagging for the iOS CI lane.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b9fa4b85-aede-4b55-ae84-159db209af22

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant