Skip to content

fix(SDK-635): handle app:// deep links in the Android example - #943

Open
jferrao-itrbl wants to merge 1 commit into
masterfrom
fix/SDK-635-rn-open-url-deep-link-does-not-open-the-app-and-navigate
Open

jferrao-itrbl wants to merge 1 commit into
masterfrom
fix/SDK-635-rn-open-url-deep-link-does-not-open-the-app-and-navigate

Conversation

@jferrao-itrbl

@jferrao-itrbl jferrao-itrbl commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

📝 Summary

Example Android app now handles app:// deep links: manifest filter, navigation ref, logged-out guard, adb docs.

🎟️ Jira Ticket: SDK-635

📖 Description

An Open URL push with app://inbox did not open the example app and navigate on Android. Changes (example app only, no src/ or bridge changes):

  • AndroidManifest.xml: VIEW/DEFAULT/BROWSABLE intent-filter for the app scheme on MainActivity, plus a matching <queries> entry (needed for Linking.canOpenURL on Android 11+ when urlHandler returns false).
  • urlHandler navigates through a navigationRef on NavigationContainer instead of the Login screen's navigation prop, which is stale after login. initialize() no longer takes navigation.
  • When logged out (or navigation not ready), urlHandler runs and returns false; the URL is not deferred.
  • example/README.md: "Testing deep links (Android)" with the adb command and push scenarios.

Scope: app scheme only (iterable:// is SDK-638), Android only, no embedded route added. In the example, urlHandler is registered only after Sign in, so a cold-start push reaches it once the user has signed in.

🧪 How to test?

adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "app://inbox" iterable.reactnativesdk.example

Sign in first. Then send an Open URL push with app://inbox with the app killed and in the foreground; the Inbox tab should show. A links.iterable.com link wrapping an app:// URL is expected to reach urlHandler unwrapped (native SDK behaviour, not verified here).

Not verified: the Android build step (yarn turbo run build:android) was waived because of a local environment problem (Gradle autolinking resolves a path outside the checkout), so the manifest change is not build-verified and nothing was run on a device. yarn lint, yarn typecheck and yarn test --coverage pass.

🧾 Changelog

No customer facing changes

📹 Loom recording if applicable

N/A

🐞 Github Issues solved

None

📚 Docs PR if applicable

N/A

Declare a VIEW/BROWSABLE intent-filter and a queries entry for the app scheme.
Navigate from urlHandler through a navigation ref and return false when logged out.
Document the adb steps in the example README.
@jferrao-itrbl
jferrao-itrbl requested a review from a team as a code owner November 13, 2026 16:18
@github-actions

Copy link
Copy Markdown
Lines Statements Branches Functions
Coverage: 88%
88.87% (767/863) 77.01% (315/409) 86.86% (238/274)

@qltysh

qltysh Bot commented Nov 13, 2026

Copy link
Copy Markdown

Qlty


Coverage Impact

This PR will not change total coverage.

Commit bb3f2de · 🚦 See full report on Qlty Cloud »

🛟 Help
  • Diff Coverage: Coverage for added or modified lines of code (excludes deleted files). Learn more.

  • Total Coverage: Coverage for the whole repository, calculated as the sum of all File Coverage. Learn more.

  • File Coverage: Covered Lines divided by Covered Lines plus Missed Lines. (Excludes non-executable lines including blank lines and comments.)

    • Indirect Changes: Changes to File Coverage for files that were not modified in this PR. Learn more.

@qltysh

qltysh Bot commented Nov 13, 2026

Copy link
Copy Markdown

1 new issue

Tool Category Rule Count
qlty Structure Function with many returns (count = 11): IterableAppProvider 1

This branch has not been deployed

No deployments
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