At a glance: Advertisers using OneLink links can brand them with their own domain. This improves campaign performance and increases brand exposure.
Branded Domains
- Branded Domains are used to brand attribution links with your brand and domain. For example, as illustrated in the preceding figure:
- OneLink: abcdef.onelink.me
- Brand abcdef.com
- Subdomain: For example, app
- Implement Branded Domains and use your full domain, with the attribution link being click.abcdef.com
- Branded Domains improve campaign performance because they:
- Drive trust: Capitalize on your branding, ensure consistent identity, remove friction from user journeys, and improve CTR rates.
- Allow deep linking using your brand.
- Are simple to implement and behave the same as OneLinks.
- Promote brand awareness: Your brand marks your campaigns, instead of a generic link.
- Enable emails to avoid being flagged as spam due to the link not matching the sender email.
Principles of implementation
Branded Domains are implemented by associating a full domain defined in your Domain Name System (DNS) with a OneLink subdomain (the AppsFlyer CNAME destination). This is done by using standard settings in your DNS and setting up a Branded Domain in AppsFlyer. In addition, you will need to make some minor changes in your app to support Branded Domains.
You will need the assistance of the DNS admin, usually a member of your IT team or your DNS hosting provider and the app developer.
Multiple full domains can be associated with a single OneLink subdomain. This means you can have multiple brands using the same OneLink subdomain.
Setting up Branded Domains
Complete the action list to set up a Branded Domain.
Responsibility | Action | Remarks | |
---|---|---|---|
1 | Marketer assisted by the DNS admin | Set up a Branded Link in AppsFlyer | The DNS admin, usually a member of your IT team or your DNS hosting provider, needs to define the full domain (aka host) and set a CNAME record as described in the procedure. |
2 | Developer | Set up Branded Domains in the app | Make minor changes to the app code. |
3 | Marketer | Using and testing Branded Domains | |
As needed | Marketer | Editing and deleting Branded Domains |
Procedures
Set up a Branded Domain in AppsFlyer
Setting up a Branded Domain consists of associating a full domain set in your DNS with a OneLink subdomain in AppsFlyer as depicted in the following figure.
Branded Domain pointing to AppsFlyer servers
Before you begin:
- Choose a full domain name, for example, app.abcdef.com where
abcdef.com is your brand. The subdomain, for example, app, can also be customized. - Request that the DNS admin create the full domain (aka host).
- Request that the DNS admin set a CNAME record such that the full
domain (Brand domain) points to the specified URL (aka AppsFlyer host).
This is depicted in the figure Branded Domain pointing to AppsFlyer servers (above).
To map your full domain to a OneLink subdomain:
- Go to Experiences & Deep Linking > Branded Domains.
- Click + New Branded Domain.
- In the Brand Domain field, enter your full domain as set in your DNS. For example, click.abcdef.com Note: Do not place a period after the domain.
- Select the OneLink subdomain from the list that displays. If no list
displays, you need to create a OneLink template, which will provide a
default subdomain. - Click Next.
- Set a CNAME record:
- If your domain is properly pointed to the AppsFlyer CNAME
destination, "AppsFlyer CNAME was found" displays. - If a CNAME is not found, copy the AppsFlyer CNAME destination, send it to your DNS admin, and ask them to make sure your full domain is mapped to the CNAME destination. The DNS admin must map your full domain to an AppsFlyer CNAME destination. Otherwise, the branded domain is created but doesn't work.
Note
The CNAME record must be mapped within a time span of 7 days, starting from the branded domain creation date and ending on the date specified in the confirmation dialog.
If the CNAME record is not mapped by the specified date, you must
renew the 7-day period. - If you’re using your branded domain for ESPs, before copying the CNAME destination, select Use branded domain for an ESP configuration.
- If your domain is properly pointed to the AppsFlyer CNAME
- Click Done. You can now create new links based on the OneLink template with your branded domain.
Note
- If you already created links based on your OneLink template without the branded domain, they still work.
- It can take up to 24 hours for a new branded domain to start working.
Renew the 7-day period for mapping the CNAME record
The new branded domain does not work if the CNAME record of your full domain isn’t mapped to AppsFlyer within 7 days of your branded domain creation.
Note
If the record was mapped after the 7-day period expired, you still need to renew the 7-day period for the new branded domain to work.
To renew the 7-day period:
- In AppsFlyer, from the side menu, select Engage > Branded Domains.
- Go to the branded domain that is not yet mapped to AppsFlyer, indicated by the warning icon ().
- Click the refresh icon () to renew the 7-day period.
Note
You can delete the branded domain by clicking the Delete icon () if you decide not to renew the 7-day period. Only branded domains that are not yet mapped to AppsFlyer can be deleted.
Set up Branded Domains in the app
- Use the following SDK versions:
- Android V4.10.1 and later
- iOS V4.10.1 and later
- User invite referral (invite a friend) requires SDK version V5.2.0 and later for both iOS and Android
Branded Domains SDK implementation considerations
- When deep linking takes place using Branded Domains, the AppsFlyer SDK can't get conversion data for installs and deep linking.
- To overcome this, the developer uses the
setOneLinkCustomDomain
andoneLinkCustomDomains
SDK API for Android and iOS respectively. - This API queries the branded domain, gets the OneLink domain to which it is mapped, and completes the OneLink.
Ensure that you update the intent-filter of the manifest to include your brand domain by setting the android:host.
Use this API before initializing the SDK in the Android global application class.
Example
public class AFApplication extends Application { @Override public void onCreate() { super.onCreate(); // Set branded link domain. Don't include https:// as part of the domain. AppsFlyerLib.getInstance().setOneLinkCustomDomain("promotion.greatapp.com"); AppsFlyerLib.getInstance().init(AF_DEV_KEY, conversionListener, this); AppsFlyerLib.getInstance().start(this, AF_DEV_KEY); } }
If you have several branded domains, pass them all to the API to ensure that you always get the conversion data and can deep link into the app.
Example
AppsFlyerLib.getInstance().setOneLinkCustomDomain("promotion.greatapp.com", "click.greatapp.com", "deals.greatapp.com");
To associate domains for iOS Universal Links:
- Set up the OneLink domain/subdomain as an associated domain in Xcode.
- Set up the branded domain as an associated domain in Xcode.
- Set up the branded link to be able to get conversion data. For instructions, click the relevant programming language below.
Use the API in the AppDelegate.m, inside the didFinishLaunchingWithOptions method:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { /** APPSFLYER INIT **/ [AppsFlyerLib shared].appsFlyerDevKey = @"SED_DEV_KEY"; [AppsFlyerLib shared].appleAppID = @"123456789"; [AppsFlyerLib shared].oneLinkCustomDomains = @[@"promotion.greatapp.com"]; //... //... }
If you have several branded domains, pass them all to the API to ensure that you always get the conversion data and can deep link into the app.
Example
[AppsFlyerLib shared].oneLinkCustomDomains = @[@"promotion.greatapp.com", @"click.greatapp.com"];
The API should be used in the AppDelegate.swift, inside the didFinishLaunchingWithOptions method:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { AppsFlyerLib.shared().appsFlyerDevKey = "6CQi4Be6Zs9oNLsCusPbUL" AppsFlyerLib.shared().appleAppID = "340954504" AppsFlyerLib.shared().oneLinkCustomDomains = ["example.com"] //... //... }
If you have several branded domains, you can pass them to the API as an array of strings. This ensures that no matter what branded link is used, you always get the conversion data and can deep link into the app.
Example
AppsFlyerLib.shared().oneLinkCustomDomains = ["promotion.greatapp.com", "click.greatapp.com"]
Using and testing Branded Domains
Prerequisites:
Before using and testing, Branded Domains complete the steps in the Branded Domains workflow.
To create and test branded domains:
- Create a OneLink link using the OneLink template mapped to the branded domain.
- Copy the custom attribution link to a text editor.
- The custom attribution link is made up of a OneLink subdomain, OneLink ID, and custom Link ID. Replace the OneLink subdomain with the Branded Domain full domain. Example:
Custom attribution link Branded Domain abcdef.onelink.me/A1bc/dc1234ef click.abcdef.com/A1bc/dc1234ef - Use the branded link to test installs and deep linking.
- If you use raw data reports as part of the testing, the Original URL field is populated by the branded links.
Editing, verifying, and deleting Branded Domains
Edit a branded domain mapping
You can change the mapping of an existing full domain to a different OneLink subdomain. There is no need to set a CNAME.
-
- In AppsFlyer, from the side menu, select Engage > Branded Domains.
- Go to the branded domain you want to edit.
- Click the Edit icon ().
- Select the new OneLink subdomain.
- Click Next. There is no need to set a CNAME.
- Click Done.
Warning
Modifying the Branded Domain of active campaigns may alter or disable link functionality.
Verify a branded domain mapping
After changing the OneLink subdomain mapped to your branded domain verify that the branded domain is mapped properly:
- In AppsFlyer, from the side menu, select Engage > Branded Domains.
- Go to the branded domain you want to verify.
- Click the Verify icon ().
Note
If the verification fails because the CNAME record isn't mapped yet, you have a time span of up to 7 days to do so ending on the date specified in the verification failure dialog.
If the CNAME record is not mapped by the specified date you must renew the 7-day period.
Delete a branded domain mapping
To delete a branded domain contact your AppsFlyer CSM or hello@appsflyer.com.
Troubleshooting, traits, and limitations
Troubleshooting
Symptom | Cause/solution |
---|---|
Branded Domain cannot be mapped to a OneLink template |
|
Branded Domain is not deep linking into the app |
|
No installs measured from Branded Domains |
|
No re-engagements recorded from branded domains |
Ensure that the following are active and configured:
|
During Branded Domain setup, Domain doesn't exist message displays |
|
During Branded Domain setup, AppsFlyer CNAME not found message displays |
|
You have been blocked message when loading a branded domain page |
Branded domains do not include the template or any parameters. When using a branded domain, you must add the template or parameters to the end of the branded domain URL. For example, if 'click.abcdef.com' is your branded domain, using just 'click.abcdef.com', will lead to a you have been blocked message. You must add the parameters or templates to the end. For example, click.abcdef.com/A1bc/dc1234ef
|
err_cert_authority_invalid error when loading a branded domain page |
This error indicates that your branded domain lacks a valid HTTPS certificate because the Certificate Authority is not recognized. Since AppsFlyer certifies your Branded domains with Let’s Encrypt the error is likely due to Let's Encrypt not being recognized as a valid Certificate Authority (CA) according to the CAA (Certification Authority Authorization) DNS records of your domain. Solution
|
Traits and limitations
Trait | Yes ✓ / No x | Remarks |
---|---|---|
Ad network access | x | |
Agency access | x | Agencies cannot create Branded Domains (or OneLink links). |
Agency transparency | x | |
App-specific time zone | N/A | |
App-specific currency | N/A | |
Character limitation | N/A | When entering your branded domain, the last character cannot be a period ("."). |
Size limitations | N/A | |
Rate limitation | ✓ |
Branded Domain SSL/HTTP certificates are arranged by AppsFlyer using Let's Encrypt, with a rate limit of 50 new certificates per week per domain. |
Organic data | ✓ | |
Non-organic data | ✓ | |
Data freshness | N/A | |
Historical data | ✓ | |
Account user access | ✓ | |
HTTP | x | The HTTP protocol is not supported by branded links. HTTPS must be used. |