Universal Links are a particular protocol for deep linking, available in iOS version 9 and above. These are set up differently than the custom scheme URL workflows that are used in other versions of iOS and on other platforms.
You just need to activate the Universal Link support in your Adjust dashboard, and whitelist your app-specific subdomain inside your app. Adjust will handle all the server-side implementation of Universal Links for you.
Once you have integrated the Universal Link workflow, Adjust will automatically use the Universal Link protocol to fulfill deep links, fall back to the Store, defer deep links and other functionality, as is discussed in more detail in the deep-linking guide. Universal Links are implemented differently, but Adjust consolidates deep-linking behaviour and offers a comprehensive set of functionality, consistently across all platforms.
- 1 Integrating Universal Links into your app
- 2 Running campaigns through Universal Links
- 3 Building your direct Universal Links
- 4 Cross-platform Universal Links
- 5 Adding additional Adjust parameters.
- 6 Universal links and deep link parameters within Adjust trackers
- 8 Testing Universal Link implementations
- 9 Using Universal Links without Adjust
- 10 Known issues
- 11 FAQs
Note: The following page contains examples using a minimum-length tracker token. Always use the entire tracker token as displayed in your Adjust Campaign Wizard.
1Integrating Universal Links into your app
Adjust will handle most of the logic of Universal Links. You need to activate this in your dashboard to create a special, app-specific subdomain, and then you need to whitelist this domain in your app.
Activate Universal Links in your Adjust dashboard by entering your app’s iOS bundle ID (how to find your bundle ID) in All Settings > Platforms and your iOS app prefix and custom URL scheme in the Universal Links module. You can find your iOS App prefix under the membership tab of the Apple Developer Center.
Adjust will then create your
short Universal Link tokenThis may look something like:
In your app, you need to add the short universal link token combined with the
applinks:prefix in the
You can read more about this in Apple’s developer documentation.
Additionally, you will need to implement the
continueUserActivitymethod in your app. This is a very simple method to catch the Universal Links. You can find the details along with sample code in the iOS SDK readme.
You need to push the new build to the App Store before you can use Universal Links in campaigns. Adjust will automatically use the workflow that suits the users’ app version and platform. All versions and all platforms of your app where your app is set up to handle deep linking (whether through Universal Links or custom scheme URLs) are supported with a single tracker link.
In addition to Universal Links, your app should also register and handle custom scheme URLs. This is still the primary technique of deep linking on iOS. Adjust will automatically translate the Universal Links into custom scheme URLs in your app. Additionally, for users on iOS 8 or below, Adjust will try to deep link via custom scheme URLs.
2Running campaigns through Universal Links
Once Universal Links are integrated into your app and activated in your dashboard, you can use the Universal Links in two ways:
- deep_link parameters within your Adjust tracker URLs (recommended);
- direct Universal Links.
The latter approach allows iOS to bypass the Adjust servers when the app is installed, and thus covers a greater variety of use cases - but also reduces the amount of information you are able to collect upon click.
Check the below table for the use cases you want to cover, to see whether you should use the deep_link parameter or direct Universal Links:
|Deep linking with web view other than SFSafariViewController||deep_link parameter|
|Deep linking with SFSafariViewController||direct Universal Link|
|QR 2 app linking||direct Universal Link|
|Messages||direct Universal Link|
|direct Universal Link|
|direct Universal Link|
|Viber||direct Universal Link|
|Push notifications||direct deep link|
Certain apps and cases, such as Pinterest, Twitter, WeChat, Facebook Messenger, or Telegram are currently not supported by Universal Links.
Note: For push notifications, things are somewhat complicated. For the most fluid UX, a direct deep link is likely the best choice. However, if you decide that you do not wish for the URL to be opened but rather parsed within the app, then the
continueUserActivity methods will not be called and users will not be reattributed. To have users reattributed when parsing the push notification string, the
appWillOpenUrl method needs to be called from the location that your push notification content was delivered to within the app.
3Building your direct Universal Links
When you run campaigns with direct Universal Links, your should use tracking URL’s set up as follows:
- In your app’s Universal Link tab, take the short universal link token:
- Add https://
- Add the Adjust tracker token:
- Complete any required path into your app. (see below example)
- Add any other required deeplink attribution data:
(Use the bottom level tracker token to avoid attaching extra campaign data)
Example tracker URLs with Universal Links
The simplest tracker URL would look like the result at step 3 above:
But lets say your Adjust tracker is
def456 and your deep link would usually look like this
myapp://dress/shoes/bigoffer/coupon/summer?type=invite&user=xxxxx. Then your path is
dress/shoes/bigoffer/coupon/summer and your tracker URL would look like
Note: Make sure that your tracking URL has the path before the
key=value pairs separated by a
& after the
?: There should only be one
4Cross-platform Universal Links
Adjust Universal Links support cross-platform trackers just like regular Adjust trackers.
Simply combine both of your tracker tokens as required with an underscore between them, as per the example below.
To ensure that cross-platform Universal Links work on Android, you must also append an
adjust_deeplink parameter to the end of the tracker URL directing users to the desired location within the app (this must also be encoded), e.g.,
Please note that any in-app path specified through an
adjust_deeplink parameter will only work on Android. To ensure that deferred deeplinking to a specific in-app path works on iOS, you must include the in-app path after the Universal Link token, e.g.,
Your completed cross-platform Universal Link should, therefore, look something like this:
It is also possible to direct users on one platform to a specific in-app location and users on the other platform to only your app homepage by including a path after either the Universal Link token or the
adjust_deeplink parameter and not including it after the other. For example:
5Adding additional Adjust parameters.
Universal Links can be enhanced using any of the parameters available in regular Adjust tracking urls, including campaign and label information or callbacks. The only difference is that you must prefix these parameters with
adjust_. You could for example use a tracking URL as below.
6Universal links and deep link parameters within Adjust trackers
You can also continue to run campaigns with the traditional deeplink parameter, like below:
Adjust will then recognize if Universal Links should be used and send the user on to your app-specific subdomain. At the same time, that same deep link would be used on Android or on older versions of iOS.
Any path or deep link parameters you add to your custom scheme URL will be added to the Universal Link, too. So if your deep link is
myapp://products/category/512, the path of your deep link will be
/products/category/512. How to catch these parameters is described in the iOS SDK readme.
Universal Links will be served to users on iOS above version 9.0. Users below that will be deep linked using the custom scheme URL that you specify. Additionally, for iOS versions 9.0 and 9.1, Adjust will attempt to deep link users with custom scheme URLs if the Universal Links are not enabled. iOS 9.2 and above do not support custom URL scheme-based deep linking.
When the user does not have the app installed, or does not have a version of the app which supports deep linking, they will be sent into the App Store.
If a user clicks on a link that redirects to a Universal Link in a non-Safari environment, it will not work.
One of the most common use cases of this limitation is with email campaigns. If a user opens an email in their email app and clicks a universal link that redirects them (either into an app they already have on their device or to the app store if they don’t have the app), either path will work as normal. However, if you use a link shortener or link wrapping and redirect from that link to a universal link, the universal link will fail (by sending all users to the store, even if they have the app on their device).
The above solution is limited to iOS versions 11 and higher. If you want to target users in Safari webview or iOS versions lower than 11, users will be sent to the app store even if they have the app installed. You can add the following flag to your jsr universal link to resolve this issue:
If the user does not have the app installed, they will see an error pop-up before being redirected to the store (the flow is correct but will include an error message the user can click on).
8Testing Universal Link implementations
Once you have integrated Universal Links in your app, and activated it in your dashboard, Adjust has generated a Universal Link URL for you. You can now proceed to test your implementation with the steps below.
Create a webpage which you can easily edit and access from your mobile device.
There are multiple ways to achieve this, whether using a local webserver accessible on your wifi, or using a CMS to create a hidden page on your website.
- Add your
bare Direct Universal Link. This is as per step 2 of building your direct Universal Link. For example:
You can use TestFlight to load the new build of the app, or install a debug version of the app with xCode. In either case, open the webpage with Safari.
Click on both your direct Universal Link and or your tracker link with deep link parameters attached. With the new build of your app installed, you should be automatically deep linked into your app with both links.
If the app doesn’t open, verify that your app integration is correct by clicking on the bare Direct Universal Link.
- If the app doesn’t open with either of these links, verify that all steps above have been completed.
9Using Universal Links without Adjust
Already implemented Universal Links outside of Adjust?
This implementation describes how to use the Universal Links protocol for deep linking for your user acquisition. Separately, you can use it on your website to mirror your website content in your app. This is not related to the Adjust functionality, and the workflows can be implemented independently.
You can add more than one
associated-domains entitlement in your app. One of those entitlements would be for the Adjust subdomain, and then you can additionally add any number of other websites where you are also using Universal Links.
In this case, typically, you would set up the
apple-app-site-association file on your webserver, including data on which apps may mirror content on that site. Separately, you would whitelist your own website as you would have with the Adjust subdomain.
You should still implement the Universal Links for Adjust. Any prior or other implementation is completely independent of the Adjust setup.
When using your own Universal Link without Adjust you can add Adjust campaign structure parameters. With this setup, you can only track deeplink reattribution and not installs.
When users are directed into an app through a Universal Link, they will see a small button in the top-right corner of the app. If they press this button, they will be taken to the app’s website in Safari. Following this choice of action, Universal Links into that app will always take the user to the app’s website instead of into the app, until the user chooses to change this setting again. There is nothing that can be done to prevent or change this unless the user chooses to.
Below is Apple’s explanation of how this works. The full text can be found here.
Feel free to get in touch with email@example.com if you have any further questions.
Where can I find my bundle ID?
You or your developer will have assigned your iOS app a bundle ID upon creation. To find it, open iTunes Connect and head to App Information > General Information.