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.

📘

Note

If 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

PlatformMinimum SDK version
Android2.4.0 or higher
iOS2.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.
🚧

Important

Campaign click events are tracked to the customer identified with iitt in 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:

  1. Update the project configuration.
  2. Enable the universal link capability.
  3. 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:

  1. Update AndroidManifest.xml.
  2. Add a new intent filter.
  3. Specify the desired domain.
  4. 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 support

App 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:

  1. UTM attributes won't appear in session_start unless you use custom tracking.
  2. The campaign click event won't be tracked—only a plain session_start is recorded.
📘

Note

The 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.
📘

Note

These 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:

  1. Click the cogwheel in the top-right corner to open Settings.

  2. Go to Channels > Emails.

  3. Scroll to the Universal links section and add your redirect links.

    Universal links section in Settings > Channels > Emails showing redirect link input fields and validation status indicators

    Adding and validating universal links in Settings > Channels > Emails.

  4. Bloomreach validates the setup and displays:

    1. A green checkmark—the link is ready.
    2. A warning sign—there's an issue to fix.
🚧

Troubleshooting

Hover 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


© Bloomreach, Inc. All rights reserved.