Universal links
Universal links let email links sent from Bloomreach open directly in your mobile app—no browser redirect, no visual flicker, and no disruption to the user experience.
Why use universal links
Without universal links, every email link sent from Bloomreach first opens a tracking URL—for example, https://cdn.exponea.com/project-slug/e/some-unique-token/click—before redirecting to the destination. This works fine for websites, but when the destination is a mobile app, the browser opens to track the click and then hands off to the app. Users notice the flicker.
Universal links skip the browser redirect while still tracking the click. The Bloomreach SDK inside the app handles tracking directly, so you keep your reporting data without the poor UX.
NoteIf a user doesn't have your app installed, or they're on a desktop, the universal link falls back to standard browser behavior.
How universal links work
Set up your custom domain—for example, www.client.com—as a universal link in your app. When a user taps an email link on a device with your app installed, the app opens directly without passing through the browser. The Bloomreach SDK inside the app recognizes the link and tracks the click for reporting.
Requirements
SDK versions
| Platform | Minimum SDK version |
|---|---|
| Android | 2.4.0 or higher |
| iOS | 2.3.0 or higher |
If you're on an older SDK version, universal links won't work correctly. See Using universal links with old SDKs.
Application domain
Each app needs its own domain configured to:
- Validate the merging of the app's cookie or identity with the ITT (transfer identity) parsed identity on the server.
- Log correctly.
- Support configurable options to open links in the default system browser or the app's built-in web view.
Important considerations
- Application not installed: The universal link falls back to standard behavior and opens in the browser.
- Cross-project tracking: If the email is sent from a different project than the one where the SDK is initialized, the click won't be tracked.
ImportantCampaign click events are tracked to the customer identified with
iittin the project where the SDK was initialized. Both must be the same project — if they differ, events are discarded and click tracking is lost.
Set up universal links
iOS - universal links
Universal links tie a domain and specific paths to an iOS app, so tapping a matching link opens the app instead of the browser. You can configure different apps to open based on different URL paths.
Web requirements
Configure the Apple App Site Association (AASA) file on your web server. Serve it over HTTPS at the root of the domain or under the .well-known path: https://www.client.com/.well-known/apple-app-site-association
{
"plist": {
"dict": {
"key": "com.apple.developer.associated-domains",
"array": {
"string": "applinks:www.client.com"
}
}
}
}Application requirements
To add universal link support to your iOS app:
- Update the project configuration.
- Enable the universal link capability.
- Specify the desired domain.
To track clicks correctly, call the Bloomreach iOS SDK's trackCampaignClick method in the App Delegate.
Android - App Links
App Links tie HTTP or HTTPS URLs to an Android app. They integrate with native deep linking and skip the "Choose an application" dialog by verifying domain ownership.
Web requirements
Configure the Statement List file on your web server under the .well-known path. The file must:
- Return HTTP status code 200 without redirects.
- Use
Content-Type: application/json.
Application requirements
To add App Link support to your Android app:
- Update
AndroidManifest.xml. - Add a new intent filter.
- Specify the desired domain.
- Enable domain verification by setting
autoVerify=true.
To track clicks correctly, call the Bloomreach Android SDK's handleCampaignIntent method in the main activity.
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="www.client.com" android:pathPrefix="/project1/" />
</intent-filter>[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.client",
"sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
}]
Android version supportApp Links functionality is only supported on Android 6.0+ and API level 23+. On older devices, tapping a link shows the standard "choose an app" dialog.
Universal links with older SDKs
Using universal links with older SDKs (Android below 2.4.0, iOS below 2.3.0) causes the following issues:
- UTM attributes won't appear in
session_startunless you use custom tracking. - The campaign click event won't be tracked—only a plain
session_startis recorded.
NoteThe Bloomreach JavaScript SDK updates automatically. If you host a copy on your own server or CDN, update it manually.
Upgrade to the latest SDK to avoid these issues.
Tracked event
For click tracking to work, all of the following must be true:
- JavaScript SDK is initialized on your website.
- The mobile SDK is integrated into your app, including the additional click-handling methods.
- Your web server allows the Bloomreach URL parameter prefixed with
xnpe_and doesn't remove it. See URL parameters used by the JS SDK.
If the universal link points to a website not integrated with the SDK, no campaign click event is tracked.
Known differences from standard redirect tracking
The campaign event with status=clicked is broadly consistent between CDN redirects and universal links, but there are known differences:
campaign.url: Bloomreach can't distinguish your UTM attributes from auto-generated ones, so all UTM attributes are tracked.campaign.user-agent: No user agent is tracked via universal links — the user goes to the app, not the browser.- Ad blockers: CTA links aren't blocked by ad blockers because they don't pass through
cdn.exponea.com.
NoteThese differences may appear in your reports. status=clicked events can have slightly different attributes depending on their origin. Web-based clicks from universal links follow the same bot-filtering rules as all JavaScript SDK traffic. See the Web tracking doc.
Add universal links in Bloomreach
Once your app and server are configured:
-
Click the cogwheel in the top-right corner to open Settings.
-
Go to Channels > Emails.
-
Scroll to the Universal links section and add your redirect links.

Adding and validating universal links in Settings > Channels > Emails.
-
Bloomreach validates the setup and displays:
- A green checkmark—the link is ready.
- A warning sign—there's an issue to fix.
TroubleshootingHover over the warning sign to see the error. Use the details to fix the issue with your technical team or contact Bloomreach support.
Related resources
Updated 11 days ago
