Summary: Deep linking in the 7Mind mobile app uses the app_links package for URI capture and the Adjust SDK for shortlink resolution on iOS. Schemes vary by flavor, and a route alias exists specifically to handle Aury webview links. Sources: direct code inspection (lib/app/routes/deep_link_handler.dart, lib/app/app_module.dart, android/app/build.gradle in 7mind-mobile-apps-monorepo; commit bf75eb2ce) Last updated: 2026-05-15


URL schemes by flavor

Configured at the Android flavor level (android/app/build.gradle:96-119):

FlavorSchemeApp ID
productionsevenmindde.sevenmind.android
stagingsevenmindstgde.seven_mind.android.stg
zppsevenmindstgde.seven_mind.android.stg

iOS schemes are declared in the Info.plist URL Types and match the same naming.

Capture and dispatch

lib/app/routes/deep_link_handler.dart uses the app_links package to:

  1. Read the initial link the app was launched from
  2. Subscribe to a stream of incoming links while the app runs
  3. Queue links arriving before markAppReady() is called, so deep links that fire during splash do not get dropped
  4. On iOS only, route non-sevenmind:// URIs through the Adjust SDK first to resolve any shortened tracking links into their underlying app URL

The Aury webview alias gotcha

lib/app/app_module.dart:216-221 registers /courseDetail (singular) as an alias of /courseDetails (plural). The Aury webview emits deep links with the singular spelling. Both routes resolve to CourseDetailModule. Removing the alias breaks Aury course launches.

Reference fix commit: bf75eb2ce. The pattern is intentional, not a duplicate.

Most deep-link targets are wrapped by AuthGuard(). Unauthenticated users who tap a deep link are redirected to the splash and auth flow; the original deep-link target is then handled after sign-in completes.

What agents should know

  • Do not change or “fix” the sevenmindstg scheme used by both staging and zpp. Tooling and Adjust campaigns rely on the existing values.
  • Adjust-shortlink resolution is iOS-only. Android shortlinks are expanded by the Play install referrer flow, not by Adjust SDK calls in-app.
  • When adding a new route that should be deep-linkable, register it in lib/app/app_module.dart and confirm the auth-guard behavior matches the rest of the table.
  • The /courseDetail alias must stay until the Aury team can update its webview to use the plural form. See aury-companion.
  • Deep-link parameters arriving on a cold start may race with the splash; rely on the in-app queue in deep_link_handler.dart rather than reading the URI in your own widget’s initState.