Stay organized with collectionsSave and categorize content based on your preferences.
You can create short or longDynamic Linkswith theFirebase Dynamic LinksBuilder API.
This API accepts either a longDynamic Linkor an object containingDynamic Linkparameters, and returns URLs like the following examples:
Before you can createDynamic Linksin your Android app, you must include the
Firebase SDK. If your app is set up to receiveDynamic Links, you have already
completed these steps and you can skip this section.
When you register your app, specify your SHA-1 signing key. If you use
App Links, also specify your SHA-256 key.
In yourmodule (app-level) Gradle file(usually<project>/<app-module>/build.gradle.ktsor<project>/<app-module>/build.gradle),
add the dependency for theDynamic Linkslibrary for Android. We recommend using theFirebase Android BoMto control library versioning.
For an optimal experience withDynamic Links, we recommendenablingGoogle Analyticsin your Firebase project and adding the Firebase SDK for Google Analytics to your app.
dependencies{// Import theBoMfor the Firebase platformimplementation(platform("com.google.firebase:firebase-bom:34.2.0"))// Add the dependencies for theDynamic LinksandAnalyticslibraries// When using theBoM, you don't specify versions in Firebase library dependenciesimplementation'com.google.firebase:firebase-dynamic-links'implementation'com.google.firebase:firebase-analytics'}
By using theFirebase Android BoM,
your app will always use compatible versions of Firebase Android libraries.
(Alternative)
Add Firebase library dependencies without using theBoM
If you choose not to use theFirebase BoM, you must specify each Firebase library version
in its dependency line.
Note that if you usemultipleFirebase libraries in your app, we strongly
recommend using theBoMto manage library versions, which ensures that all versions are
compatible.
dependencies{// Add the dependencies for theDynamic LinksandAnalyticslibraries// When NOT using theBoM, you must specify versions in Firebase library dependenciesimplementation'com.google.firebase:firebase-dynamic-links:22.1.0'implementation'com.google.firebase:firebase-analytics:23.0.0'}
In theFirebaseconsole, open theDynamic Linkssection.
If you have not already accepted the terms of service and set a domain
for yourDynamic Links, do so when prompted.
If you already have aDynamic Linksdomain, take note of it. You need to
provide aDynamic Linksdomain when you programmatically createDynamic Links.
Recommended: Specify the URL patterns allowed in your deep links
and fallback links. By doing so, you prevent unauthorized parties from
creatingDynamic Linksthat redirect from your domain to sites you don't control.
SeeAllow specific URL patterns.
Use theFirebaseconsole
If you want to generate a singleDynamic Link, either for testing purposes, or for your marketing team
to easily create a link that can be used in something like a social media post, the simplest way would
be to visit theFirebaseconsoleand create one manually following the step-by-step form.
Create aDynamic Linkfrom parameters
To create aDynamic Link, create a newDynamicLinkobject with its
Builder, specifying theDynamic Linkparameters with the Builder methods. Then, callbuildDynamicLinkorbuildShortDynamicLink.
The following minimal example creates a longDynamic Linktohttps://www.example.com/that opens with your Android app on Android
and the appcom.example.ioson iOS:
Kotlin
valdynamicLink=Firebase.dynamicLinks.dynamicLink{link=Uri.parse("https://www.example.com/")domainUriPrefix="https://example.page.link"// Open links with this app on AndroidandroidParameters{}// Open links with com.example.ios on iOSiosParameters("com.example.ios"){}}valdynamicLinkUri=dynamicLink.uri
DynamicLinkdynamicLink=FirebaseDynamicLinks.getInstance().createDynamicLink().setLink(Uri.parse("https://www.example.com/")).setDomainUriPrefix("https://example.page.link")// Open links with this app on Android.setAndroidParameters(newDynamicLink.AndroidParameters.Builder().build())// Open links with com.example.ios on iOS.setIosParameters(newDynamicLink.IosParameters.Builder("com.example.ios").build()).buildDynamicLink();UridynamicLinkUri=dynamicLink.getUri();
To create a shortDynamic Link, build aDynamicLinkthe same way, and
then callbuildShortDynamicLink. Building a short link requires a
network call, so instead of directly returning the link,buildShortDynamicLinkreturns aTask, which makes
the short link available when the request completes. For example:
Kotlin
valshortLinkTask=Firebase.dynamicLinks.shortLinkAsync{link=Uri.parse("https://www.example.com/")domainUriPrefix="https://example.page.link"// Set parameters// ...}.addOnSuccessListener{(shortLink,flowchartLink)->// You'll need to import com.google.firebase.dynamiclinks.component1 and// com.google.firebase.dynamiclinks.component2// Short link createdprocessShortLink(shortLink,flowchartLink)}.addOnFailureListener{// Error// ...}
Task<ShortDynamicLink>shortLinkTask=FirebaseDynamicLinks.getInstance().createDynamicLink().setLink(Uri.parse("https://www.example.com/")).setDomainUriPrefix("https://example.page.link")// Set parameters// ....buildShortDynamicLink().addOnCompleteListener(this,newOnCompleteListener<ShortDynamicLink>(){@OverridepublicvoidonComplete(@NonNullTask<ShortDynamicLink>task){if(task.isSuccessful()){// Short link createdUrishortLink=task.getResult().getShortLink();UriflowchartLink=task.getResult().getPreviewLink();}else{// Error// ...}}});
By default, shortDynamic Linksare generated with 17-character link suffixes that
make it extremely unlikely that someone can guess a validDynamic Link. If, for
your use case, there's no harm in someone successfully guessing a short link,
you might prefer to generate suffixes that are only as long as necessary to be
unique, which you can do by passingShortDynamicLink.Suffix.SHORTto thebuildShortDynamicLinkmethod:
Kotlin
valshortLinkTask=Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT){// Set parameters// ...}
You can use theDynamic LinkBuilder API to createDynamic Linkswith any of the
supported parameters. See theAPI referencefor details.
The following example creates aDynamic Linkwith several common parameters
set:
Kotlin
valdynamicLink=Firebase.dynamicLinks.dynamicLink{// or Firebase.dynamicLinks.shortLinkAsynclink=Uri.parse("https://www.example.com/")domainUriPrefix="https://example.page.link"androidParameters("com.example.android"){minimumVersion=125}iosParameters("com.example.ios"){appStoreId="123456789"minimumVersion="1.0.1"}googleAnalyticsParameters{source="orkut"medium="social"campaign="example-promo"}itunesConnectAnalyticsParameters{providerToken="123456"campaignToken="example-promo"}socialMetaTagParameters{title="Example of a Dynamic Link"description="This link works whether the app is installed or not!"}}
DynamicLinkdynamicLink=FirebaseDynamicLinks.getInstance().createDynamicLink().setLink(Uri.parse("https://www.example.com/")).setDomainUriPrefix("https://example.page.link").setAndroidParameters(newDynamicLink.AndroidParameters.Builder("com.example.android").setMinimumVersion(125).build()).setIosParameters(newDynamicLink.IosParameters.Builder("com.example.ios").setAppStoreId("123456789").setMinimumVersion("1.0.1").build()).setGoogleAnalyticsParameters(newDynamicLink.GoogleAnalyticsParameters.Builder().setSource("orkut").setMedium("social").setCampaign("example-promo").build()).setItunesConnectAnalyticsParameters(newDynamicLink.ItunesConnectAnalyticsParameters.Builder().setProviderToken("123456").setCampaignToken("example-promo").build()).setSocialMetaTagParameters(newDynamicLink.SocialMetaTagParameters.Builder().setTitle("Example of a Dynamic Link").setDescription("This link works whether the app is installed or not!").build()).buildDynamicLink();// Or buildShortDynamicLink()
You can setDynamic Linkparameters with the following methods:
DynamicLink parameters
setLink
The link your app will open. Specify a URL that your app can handle, typically the app's content
or payload, which initiates app-specific logic (such as crediting the user with a coupon or
displaying a welcome screen). This link must be a well-formatted URL, be properly URL-encoded, use
either HTTP or HTTPS, and cannot be another Dynamic Link.
setDomainUriPrefix
YourDynamic LinkURL prefix, which you can find in theFirebaseconsole. ADynamic Linkdomain looks like the following examples:
The link to open when the app isn't installed. Specify this to do something other than install your app from the Play Store when the app isn't installed, such as open the mobile web version of the content, or display a promotional page for your app.
setMinimumVersion
TheversionCodeof the minimum version of your app that can open the link. If the installed app is an older version, the user is taken to the Play Store to upgrade the app.
IosParameters
setAppStoreId
Your app's App Store ID, used to send users to the App Store when the app isn't installed
setFallbackUrl
The link to open when the app isn't installed. Specify this to do something other than install your app from the App Store when the app isn't installed, such as open the mobile web version of the content, or display a promotional page for your app.
setCustomScheme
Your app's custom URL scheme, if defined to be something other than your app's bundle ID
setIpadFallbackUrl
The link to open on iPads when the app isn't installed. Specify this to do something other than install your app from the App Store when the app isn't installed, such as open the web version of the content, or display a promotional page for your app.
setIpadBundleId
The bundle ID of the iOS app to use on iPads to open the link. The app must be connected to your project from the Overview page of theFirebaseconsole.
setMinimumVersion
Theversion numberof the minimum version of your app that can open the link. This flag is passed to your app when it is opened, and your app must decide what to do with it.
NavigationInfoParameters
setForcedRedirectEnabled
If set to '1', skip the app preview page when theDynamic Linkis opened, and instead redirect to the app or store. The app preview page (enabled by default) can more reliably send users to the most appropriate destination when they openDynamic Linksin apps; however, if you expect aDynamic Linkto be opened only in apps that can openDynamic Linksreliably without this page, you can disable it with this parameter. This parameter will affect the behavior of theDynamic Linkonly on iOS.
SocialMetaTagParameters
setTitle
The title to use when theDynamic Linkis shared in a social post.
setDescription
The description to use when theDynamic Linkis shared in a social post.
setImageUrl
The URL to an image related to this link. The image should be at least 300x200 px, and less than 300 KB.
Google Play analytics parameters. These parameters
(utm_source,utm_medium,utm_campaign,utm_term,utm_content)
are passed on to the Play Store as well as appended to the link payload.
iTunes Connect analytics parameters. These parameters (pt,at,ct) are passed to the App Store.
Shorten a longDynamic Link
To shorten a longDynamic Link, specify the URL of theDynamic LinkusingsetLongLinkinstead of setting parameters with the other builder
methods:
Kotlin
valshortLinkTask=Firebase.dynamicLinks.shortLinkAsync{longLink=Uri.parse("https://example.page.link/?link="+"https://www.example.com/&apn=com.example.android&ibn=com.example.ios",)}.addOnSuccessListener{(shortLink,flowChartLink)->// You'll need to import com.google.firebase.dynamiclinks.component1 and// com.google.firebase.dynamiclinks.component2// Short link createdprocessShortLink(shortLink,flowChartLink)}.addOnFailureListener{// Error// ...}
Task<ShortDynamicLink>shortLinkTask=FirebaseDynamicLinks.getInstance().createDynamicLink().setLongLink(Uri.parse("https://example.page.link/?link=https://www.example.com/&apn=com.example.android&ibn=com.example.ios")).buildShortDynamicLink().addOnCompleteListener(this,newOnCompleteListener<ShortDynamicLink>(){@OverridepublicvoidonComplete(@NonNullTask<ShortDynamicLink>task){if(task.isSuccessful()){// Short link createdUrishortLink=task.getResult().getShortLink();UriflowchartLink=task.getResult().getPreviewLink();}else{// Error// ...}}});
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-05 UTC."],[],[],null,[]]