Skip to content

fix(mobile): handle buzz:// links#1826

Open
brow wants to merge 1 commit into
mainfrom
goblin/mobile-buzz-url-scheme
Open

fix(mobile): handle buzz:// links#1826
brow wants to merge 1 commit into
mainfrom
goblin/mobile-buzz-url-scheme

Conversation

@brow

@brow brow commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

What changed?

buzz:// URLs previously did nothing on mobile — the scheme was only registered by the desktop Tauri app. This registers CFBundleURLTypes on iOS and a VIEW/BROWSABLE intent-filter on Android, and adds app_links-based handling that parses buzz://message?channel=<uuid>&id=<hex> (mirroring the desktop Rust handler's validation) and pushes the target channel view.

  • Cold-start links are parked in a provider until auth completes and the channel list loads, then dispatched once.
  • Unsupported hosts (e.g. buzz://connect, desktop-only) are ignored with a debug log; links to channels not in the current workspace surface a snackbar instead of failing silently.
  • Flutter's built-in deeplink handling is disabled on both platforms so app_links owns incoming URLs.

Why?

Mobile users tapping buzz:// links (e.g. message links shared in channels) currently get no response at all. This closes that gap ahead of the Buzz mobile launch.

How is it tested?

flutter analyze clean; full mobile suite passes (451 tests).

Added tests:

buzz:// URLs previously did nothing on mobile — the scheme was only
registered by the desktop Tauri app. Register CFBundleURLTypes on iOS
and a VIEW intent-filter on Android, and add app_links-based handling
that parses buzz://message?channel=<uuid>&id=<hex> (mirroring the
desktop Rust handler's validation) and pushes the target channel view.

Cold-start links are parked in a provider until auth completes and the
channel list loads, then dispatched once. Unsupported hosts (e.g.
buzz://connect, desktop-only) are ignored with a debug log; links to
channels not in the workspace surface a snackbar instead of failing
silently. Flutter's built-in deeplink handling is disabled on both
platforms so app_links owns incoming URLs.

Co-authored-by: Tom Brow <tomb@block.xyz>
Signed-off-by: Tom Brow <tomb@block.xyz>
Co-authored-by: Goose <opensource@block.xyz>
Ai-assisted: true
@brow

brow commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@brow

brow commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

@builderbot review

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@brow brow changed the title fix(mobile): register buzz:// scheme and route message deep links fix(mobile): handle buzz:// links Jul 14, 2026
@brow brow marked this pull request as ready for review July 14, 2026 20:37
@brow brow requested a review from a team as a code owner July 14, 2026 20:37

Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (_) => ChannelDetailPage(channel: channel),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This handles a message deep link as a channel link: link.messageId and link.threadRootId are never used, and ChannelDetailPage has no target-message argument. As a result, buzz://message?...&id=<hex> opens the channel at its normal timeline position rather than the linked message (and cannot open the linked thread). Please carry the parsed target into navigation and load/scroll/open that message, with a dispatcher-level test that proves the id/thread affects the destination.

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking because the PR promises message deep-link routing, but the current dispatcher discards the parsed message/thread IDs and only opens the channel at its normal position. Please carry the target through navigation, verify the linked message/thread is opened, and add dispatcher-level coverage before merge.

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.

3 participants