Portal App Deeplinks: Required URL Format (with Region)
Last updated: October 23, 2026
TL;DR
Every Portal deeplink must use this format:
https://applink.zuddl.com/link/{appId}/{region}/{eventId}/{type}/{primaryId}[/{subPageId}]Old links without region, type and id, such as https://applink.zuddl.com/link/com.zuddl.portal/event/{eventId}, are rejected by the app with z_deeplink_invalid_url.
URL segments
Segment | Allowed values / notes |
|---|---|
| Required. The literal word |
| Required. App bundle ID: |
| Required. |
| Required. Event UUID. |
| Required. |
| Required. For |
| Optional. |
Examples
Open a portal page in a US event:
https://applink.zuddl.com/link/com.zuddl.portal/US/{eventId}/page/{pageId}Open a sub-page:
https://applink.zuddl.com/link/com.zuddl.portal/US/{eventId}/page/{pageId}/{subPageId}Gamification QR code in an EU event:
https://applink.zuddl.com/link/com.zuddl.portal/EU/{eventId}/game/{qrCode}White-label app:
https://applink.zuddl.com/link/com.zuddl.<customer>/US/{eventId}/page/{pageId}Wrong vs right
Status | Link |
|---|---|
❌ Wrong (old) |
|
❌ Wrong (region only, no type/id) |
|
❌ Wrong (unknown type) |
|
✅ Right |
|
Important: the new format has no "open event only" link. Adding the region to an old event link is not enough. A link needs a type (page or game) and its id, or the app rejects it.
What the app does with each link
Valid link: logs
z_deeplink_opened, then after splash/login opens the event and the target page or game.Not logged in: logs
z_deeplink_login_required, sends the user to login, and resumes the link afterwards.Invalid link (fewer than 6 path segments, or missing region/type/id): logs
z_deeplink_invalid_urland does not deep-navigate. On iOS, the user may still land in the app through the install-redirect fallback, but not on the intended screen.Unknown type: the link is dropped silently.
Why this matters: live example
Shared link: https://applink.zuddl.com/link/com.zuddl.portal/event/974bae1d-c524-4466-9dd7-ee8e4cacc7c0 (old format).
84 devices opened it (82 iOS, 2 Android), mostly in the US, Canada and the UK.
84 of 84 logged
z_deeplink_invalid_url.71 iOS devices reached the app only through the install-redirect fallback. About 8 devices show no later activity for the event.
Checklist before sharing a deeplink
Is the host
applink.zuddl.comand the path/link/...?Does the appId match the app attendees will install:
com.zuddl.portalor the white-label ID?Does the region match the event's hosting region:
USorEU?Is the type
pageorgame, followed by the page ID or QR code?Test the link on one iOS and one Android device, both logged in and logged out, before sending it to attendees.
Replace any old-format links already sent: emails, QR codes and landing pages.
Source of truth (code)
iOS:
portal-ios/.../PortalApp.swift→parseDeepLink(requires 6 or more segments; typesgame/page)Android:
portal-android/.../presentation/deepLink/DeepLinkActivity.kt(validates appId/region/eventId/type/primaryId),utils/DeepLinkManager.kt,DeepLinkDispatcher.ktAndroid intent filter:
AndroidManifest.xml→pathPrefix="/link/${applicationId}"