Firebase Dynamic Links are deep links that drive user growth and engagement by allowing you to send users to specific places in your app - across iOS, Android, and the web. Dynamic Links retain their context and attribution data, even if a user needs to install your app first, ensuring new users see the content they're looking for right away. While Dynamic Links can be useful in a number of situations, we heard from many of you that you wanted more ways to customize the actual URL that made up a Dynamic Link.
In the past, Dynamic Links contained a randomly generated subdomain that could not be customized. So when you created a new link, it would look something like https://a7cd8.app.goo.gl/B7vVu.
https://a7cd8.app.goo.gl/B7vVu
Today, we're excited to introduce three ways you can customize your dynamic links: a brand agnostic domain, custom subdomains, and custom paths. Moving forward, you can update your links from something that looks like https://a7cd8.app.goo.gl/B7vVu to a much more friendly https://mygame.page.link/mycampaign.
https://mygame.page.link/mycampaign
We're rolling out these changes after talking with many of you and running tests on how we could improve Dynamic Links. Through your feedback and our experimentation, we discovered three important things:
https://a7cd8.page.link/B7vVu
https://mygame.app.goo.gl/B7vVu
https://a7cd8.app.goo.gl/B7vVu.
https://a7cd8.app.goo.gl/mycampaign
With these results in mind, we are giving you the flexibility to use a brand agnostic root (page.link), create up to five custom subdomains per project, and create a custom path for each new short link. Now, you can have links that look like: mygame.page.link/joinme, mygame.page.link/holidays and mygame-lite.page.link/holidays.
page.link
mygame.page.link/joinme
mygame.page.link/holidays
mygame-lite.page.link/holidays
When you customize your dynamic links in these three ways, your brand will shine through, you will increase trust and conversion, and you'll be able to design links to better fit the context of where they are used.
Creating custom Dynamic Links is easy. There is a one-time setup process in the Firebase Console to set up your domain. Once that's done, you can create new links programmatically or via the console on your chosen domain.
If you're new to Dynamic Links, you'll be prompted to enter a custom subdomain during the setup process. For trademarked subdomains, we also have a verification flow to ensure that the subdomain is reserved for the developer that owns the brand.
For developers with existing Dynamic Links, you may continue to use links on app.goo.gl or create new links on page.link.
app.goo.gl
You'll be able to view the links and associated analytics per domain by selecting the domain from a drop-down selector.
For more information on creating Dynamic Links programmatically, see our documentation on iOS, Android and the REST API.
Thank you to everybody who has been using Dynamic Links and providing us with valuable feedback. We hope that these changes will result in more user engagement and more clicks on your dynamic links for your app.
If you have any questions, feedback or bugs to report please reach us at firebase.google.com/support.
Learn more about Firebase Dynamic Links at https://firebase.google.com/products/dynamic-links/.
Firebase Dynamic Links give you a single link that can send users either to your iOS or Android app, if they have it installed, or to the appropriate listing in the App Store or on Google Play, if they don't. Even better than that, Dynamic Links will deep link your users to the content they were looking for, even if they had to install the app in the process.
We've been working hard over the last year to make this experience smoother and more powerful for both developers and users, and we're happy to bring the latest set of improvements to developers in our iOS and Android SDKs.
Creating Dynamic Links through the Firebase Console was great for promotional campaigns, but we heard from our developers that they needed to be able to create user-to-user sharing campaigns programmatically from within their app.
To help you do just that, we've added support for generating both long and short dynamic links to the iOS and Android Firebase SDKs, which makes it quicker and easier to support these kind of use cases:
guard let deepLink = URL(string: "https://mydomain.com/page?param=value") else { return } let components = DynamicLinkComponents(link: deepLink, domain: domain) let iOSParams = DynamicLinkIOSParameters(bundleID: bundleID) iOSParams.minimumAppVersion = minVersion components.iOSParameters = iOSParams // Build the dynamic link let link = components.url // Or create a shortened dynamic link components.shorten { (shortURL, warnings, error) in if let error = error { print(error.localizedDescription) return } // TODO: Handle shortURL. }
String deepLink = "https://mydomain.com/page?param=value"; DynamicLink.Builder builder = FirebaseDynamicLinks.getInstance() .createDynamicLink() .setDynamicLinkDomain(domain) .setAndroidParameters(new DynamicLink.AndroidParameters.Builder() .setMinimumVersion(minVersion) .build()) .setLink(deepLink); // Build the dynamic link DynamicLink link = builder.buildDynamicLink(); // Or create a shortened dynamic link builder.buildShortDynamicLink() .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(ShortDynamicLink shortDynamicLink) { // } });
We've also rebuilt the Android API from the ground up to make it easier to handle incoming Dynamic Links into your app, with the new FirebaseDynamicLinks class. You can add the new library by adding the following to your build.gradle:
compile "com.google.firebase:firebase-dynamic-links:11.0.0"
Then processing an incoming Dynamic Link is easy in your launched activity:
FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent()) .addOnSuccessListener( new OnSuccessListener() { @Override public void onSuccess(PendingDynamicLinkData data) { if (data == null || data.getLink() == null) { // No FDL pending for this app, don't do anything. return; } Intent launchIntent = data.getUpdateAppIntent(MainActivity.this); if (launchIntent != null) { startActivity(launchIntent); // launch upgrade flow. } Uri deepLink = dynamicLink.getLink(); String myAppItemId = deepLink.getQueryParameter("myAppItemId"); // TODO(developer): Display content for myAppItemId here! } });
As always, if you have any questions or feedback on the new API, please reach out through any of the channels on our support page.
.