At a glance: Integrate AppsFlyer data with a Salesforce Marketing Cloud (SFMC) account to seamlessly deep link from emails. The flow utilizes SFMC support for Universal Links on a branded click-recording domain.
Introduction
ESP (Email Service Providers) are excellent sources for segmented user traffic. However some ESP, and this is a common ESP issue, don't perform correct attribution and deep linking.
ESPs wrap a deep-linking URL with their own ESP click-recording domain. This procedure often breaks the iOS Universal Links process. However, there are ESPs that support Universal Links on their click-recording domain, so deep linking and click-recording can be performed.
Integrating Salesforce Marketing Cloud with AppsFlyer
Steps 1-4 described below are needed to support iOS deep linking.
Prerequisites
AppsFlyer iOS SDK version 4.9.0
For iOS Universal Links you should perform the following in your SFMC environment:
- Purchase and implement Sender Authentication Package (SAP)
- Purchase an SSL Certificate (also known as SSL Configuration) and submit an SSL Request Form
* To obtain Sender Authentication Package and SSL Certificate reach out to your Salesforce Account Representative or submit a deliverability support case via Salesforce Help.
AppsFlyer Android SDK version 4.9.0
SFMC doesn’t support Android App Links, and as such URI Scheme deep linking is still supported. No special actions are required to support deep linking in Android apps from SFMC.
Step 1: Set your click-recording domain in SFMC
To set a click-recording domain, follow SFMC official guides for:
Step 2: Upload your SSL certificate to SFMC
In order for iOS Universal Links to work properly, your click-recording domain must include your domain’s SSL certificate that should be installed in your SFMC account. Instructions on setting your SSL certificates can be found in SFMC official guide.
Step 3: Set deep linking in SFMC
To enable deep linking from SFMC emails:
- Login to your SFMC account, and go to the Email Studio view
- Click on the Admin tab
- In the side menu, click on deep linking. In this view, you can configure new deep link integration with your app, or modify existing ones.
- To create a new configuration, click the Create button and enter your AppID. The AppID value is a combination of your Apple developer team ID and the Bundle ID. Both of these values can be retrieved from your Apple Developer account.
Example
Given the Team ID prefix 5UABCDFGH and the Bundle ID com.your.app, the following value should be entered:
5UABCDFGH.com.your.app - Your set up of universal links and deep linking is completed once SFMC sets up the Apple App Site Association (AASA) file. This process may take a few hours. You can see your generated file using the following URL:
https://<click_recording_link_domain>/apple-app-site-association
Step 4: Configure your AppsFlyer SDK
Note
If you haven’t already done so, make sure to configure your app to support deep linking with OneLink.
After configuring your click-recording domain to support Universal Links as described previously, you need to set up your app to deep link and resolve the Universal Link.
- Associate the click-recording domain in Xcode:
- Provide the click-recording domain to the SDK API
setResolveDeepLinkURLs
. This API needs to be called before SDK initialization. For more information please refer to SDK documentation here.AppsFlyerLib.shared().resolveDeepLinkURLs = ["example.com", "click.example.com"]
-
Important! If you are using Movable Ink (MI) in conjunction with Salesforce, you need to get the MI CNAME and internal domains from your MI account manager and add them to
setResolveDeepLinkURLs
, in addition to the click link for Salesforce. For example:AppsFlyerLib.shared().resolveDeepLinkURLs = ["salesforce-click.example.com", "mi.example.com", "example.micpn.com"]
-
Important! If you are using Movable Ink (MI) in conjunction with Salesforce, you need to get the MI CNAME and internal domains from your MI account manager and add them to
- When the app is invoked due to a click on the Universal Link, the AppsFlyer SDK resolves the deep link and extracts the underlying OneLink. All deep link parameters are then propagated into the onAppOpenAttribution API for deep link logic execution.
Send emails with OneLink through SFMC
- Create a OneLink link manually or on the OneLink links page in the AppsFlyer dashboard.
- URL encodes all parameter values when creating a OneLink.
- These are highly-recommended parameters:
pid media source Representative media source c campaign name Campaign that will be attributed. af_dp deep-link URL Deep-link redirect for users. af_web_dp desktop redirect Redirect for desktop users. af_ios_url Redirect for iOS-devices users who don't have the app installed.
af_android_url Redirect for Android-device users who don't have the app installed.
- Copy the link into the email created in Salesforce Email Studio.
- Now, the Salesforce Marketing Cloud wraps the link with the click-recording domain that was previously set.
- Any click on the click-recording domain redirects to the OneLink attribution link.
Example
For readability purposes, the URL parameters are not URL encoded:
https://example.onelink.me/ABcd?pid=Email&c=Spring_Newsletter&
af_dp=testapp://path/to/content&af_web_dp=https://www.example.com/path/to/content&
af_ios_url=https://www.example.com/path/to/content&af_android_url=https://www.example.com/path/to/content
Test your links
To test your attribution links:
- Create the appropriate OneLink URL.
- Place it in an email.
- Send the email to yourself.
- Click the link.
- If you have the app installed on your device, the app should be invoked.
- If the relevant AppsFlyer SDK deep linking APIs are implemented you are deep linked into the relevant content.
- A click should appear in both the AppsFlyer dashboard, attributed to the provided media source and campaign.
- A click appears in Salesforce data.