Receive Firebase Dynamic Links on Android

To receive the Firebase Dynamic Links that you created, you must include the Dynamic Links SDK in your app and call the FirebaseDynamicLinks.getDynamicLink() method when your app loads to get the data passed in the Dynamic Link.

Set up Firebase and the Dynamic Links SDK

  • Add Firebase to your Android project. Add the dependency for Firebase Dynamic Links to your app-level build.gradle file:
    compile 'com.google.firebase:firebase-invites:11.6.0'
  • If you haven't yet connected your app to your Firebase project, do so from the Firebase console.
  • In the Firebase console, open the Dynamic Links section.
    1. Accept the terms of service if you are prompted to do so.
    2. Take note of your project's Dynamic Links domain, which is displayed at the top of the Dynamic Links page. You need your project's Dynamic Links domain to programmatically create Dynamic Links. A Dynamic Links domain looks like app_code.app.goo.gl.

Add an intent filter for deep links

As with plain deep links, you must add a new intent filter to the activity that handles deep links for your app. The intent filter should catch deep links of your domain, since the Dynamic Link will redirect to your domain if your app is installed. This is required for your app to receive the Dynamic Link data after it is installed from the Play Store. In AndroidManifest.xml:

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:host="yoursite.example.com" android:scheme="http"/>
    <data android:host="yoursite.example.com" android:scheme="https"/>
</intent-filter>

When users open a Dynamic Link with a deep link to the scheme and host you specify, your app will start the activity with this intent filter to handle the link.

To receive the deep link, call the getDynamicLink() method:

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
            @Override
            public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                // Get deep link from result (may be null if no link is found)
                Uri deepLink = null;
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.getLink();
                }


                // Handle the deep link. For example, open the linked
                // content, or apply promotional credit to the user's
                // account.
                // ...

                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "getDynamicLink:onFailure", e);
            }
        });

You must call getDynamicLink() in every activity that might be launched by the link, even though the link might be available from the intent using getIntent().getData(). Calling getDynamicLink() retrieves the link and clears that data so it is only processed once by your app.

You normally call getDynamicLink() in the main activity as well as any activities launched by intent filters that match the link.

Record analytics

The following events can be automatically tracked in Google Analytics for Firebase and shown in the Firebase console.

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

In order to register these events, you need to configure Google Analytics for Firebase before you retrieve the deep link. Check the following conditions are met:

  • Call FirebaseDynamicLinks.getDynamicLink() in your app entry points:
    • Launcher activities. e.g.: action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER".
    • Activity entry points. e.g.: onStart(), onCreate().
    • Deep link activities.
  • Set up and use Google Analytics for Firebase:
    • Include the Google Analytics for Firebase dependency. This is usually automatically added by the google-services Gradle plugin.
    • Include the google-services.json config file in your app.
    • Call FirebaseAnalytics.getInstance() before calling FirebaseDynamicLinks.getDynamicLink().

On Android 6.0 (API level 23) and higher, you can set up your app to handle Dynamic Links directly when your app is already installed by using Android App Links.

Ensure that you have added the SHA256 certificate fingerprint for your app into your project in the Firebase console. Dynamic Links will handle setting up the App Links website association for your Dynamic Links domain.

Add an auto-verified intent filter to the Activity that will handle the Dynamic Link, setting the host to your project's Dynamic Links domain as found in the Firebase console. In the AndroidManifest.xml:

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:host="your.dynamic.links.domain.example.com" android:scheme="http"/>
    <data android:host="your.dynamic.links.domain.example.com" android:scheme="https"/>
</intent-filter>

Note the requirement from the Verify Android App Links documentation that all eligible intent filters in your manifest will need to be verified in order for this to work.

Dynamic Links will now be sent directly to your app. You will be able to get the deep link and other Dynamic Link data by calling getDynamicLink() in the Activity you added the App Links intent filter to (as described in Handle deep links).

Send feedback about...

Need help? Visit our support page.