How to Create Deeplinks for Android Using Branch.io?

Before starting with implementation, first we will see what is the deep link.

What Is A Deep Link?

Deep-link is like a URL containing context regarding a particular item; it drives the user to product pages. A deep link is an intent filter system that allows users to directly enter a specific page on the web or activity in an Android app.

In Android, this URL performs three actions as follows :

  • Open the user’s preferred app that can handle the URI
  • Open the only available app that can handle the URI
  • Allow the user to select an app from a dialog

Contextual_Deep_Link

On click of link it will check for preferred app, If preferred app is not present on our phone then it will redirect to user on play store or where we have saved our build of application for download.

Branch.Io Integration

Import branch SDK to you app level build.gradle file.

dependencies {
    // required for all Android apps
    implementation 'io.branch.sdk.android:library:5.+'
    // required if your app is in the Google Play Store (tip: avoid using bundled play services libs)
    implementation 'com.google.firebase:firebase-appindexing:19.0.0'
    implementation 'com.google.android.gms:play-services-ads-identifier:16+'
    // optional
    // Chrome Tab matching (enables 100% guaranteed matching based on cookies)
    implementation 'androidx.browser:browser:1.0.0'
    // Replace above with the line below if you do not support androidx
    // implementation 'com.android.support:customtabs:28.0.0'
}

On the Branch.io dashboard create your account,use link https://dashboard.branch.io/login. After the account was created, set up an account for android.

Branch.io dashboard

As we see on the dashboard in account settings, we will get branch Key and branch Secret, copy them, and add them into the Android string.xml file we need to add the keys into manifest.xml.

Manifest.Xml

<meta-data
          android:name="io.branch.sdk.TestMode"

           android:value="true" />
       <meta-data
           android:name="io.branch.sdk.BranchKey"
           android:value="key_live_your branch live key" />
       <meta-data
           android:name="io.branch.sdk.BranchKey.test"
          android:value="key_test_your branch test key" />

On Branch.io dashboard configure your Default settings.

android

As we see in the above image, we have two options to select I have an Android App and Enable App links; make sure both must be selected.

Add the Android URI Scheme; then, we have to select anyone in between Google Play Search or Custom URI. If your app is on play store, we can add the Url of the play store to your app. Otherwise, choose Custom URL And add the link package name of your app and link of your.apk where you have saved it for the download.

Android URI Scheme: It will be your app name.

Google Play Search: If your app is on play store add the Url.

Custom URL: If the app is not present on play store add the link where you have saved you .apk for the download.

SHA256 Cert Fingerprints: From project gradle we will get signingReport in that we will get SHA256 for our project.

In launcherActivity add the intent-filter in AndroidManifext.xml .

<meta-data
           android:name="io.branch.sdk.TestMode"
           android:value="true" />
       <meta-data
           android:name="io.branch.sdk.BranchKey"
           android:value="key_live_your branch live key" />
       <meta-data
           android:name="io.branch.sdk.BranchKey.test"
           android:value="key_test_your branch test key" />

First scheme is the name which we have registered on the dashboard as an Android scheme URI.

Load Branch

Create one Application class and load branch to your created Application class.

import io.branch.referral.Branch;
public class ApplicationClass extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // Branch logging for debugging
        Branch.enableLogging();
        // Branch object initialization
        Branch.getAutoInstance(this);
    }
}

Initialize Branch

After the loaded branch in the custom Application class, I need to initialize it. Branch initialization must be in your Launcher activity (i.e. Activity that contains intent filter of category, “android.intent.category.LAUNCHER” in AndroidManifext.xml).

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import org.json.JSONObject;
import io.branch.indexing.BranchUniversalObject;
import io.branch.referral.Branch;
import io.branch.referral.BranchError;
import io.branch.referral.util.LinkProperties;
public class LauncherActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launcher);
}
@Override public void onStart() {
super.onStart();
Branch.sessionBuilder(this).withCallback(branchReferralInitListener).withData(getIntent() != null ? getIntent().getData() : null).init();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
// if activity is in foreground (or in backstack but partially visible) launching the same
// activity will skip onStart, handle this case with reInitSession
Branch.sessionBuilder(this).withCallback(branchReferralInitListener).reInit();
}
private Branch.BranchReferralInitListener branchReferralInitListener = new Branch.BranchReferralInitListener() {
@Override
public void onInitFinished(JSONObject linkProperties, BranchError error) {
if(error==null){
Log.i("BranchDeepLink",""+linkProperties.toString());
try{
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonElement json = parser.parse(linkProperties.toString());
ShareScreenDataModel shareScreenDataModel = gson.fromJson(json, ShareScreenDataModel.class);
}
};

Replace ShareScreenDataModel with your Data Model class and you will get data which is coming through a deep link.

Hope it will be helpful to you!!!

Hire Top Android Developers Inexpensively to Meet Your Unique Requirements

Priyanka M

Senior Software Engineer

Priyanka is an android developer with around 3.5 years of experience developing Android applications with core functionality. She has in-depth knowledge of Java and React Native. Priyanka likes to learn new things and share.

Keep Reading

Keep Reading

  • Service
  • Career
  • Let's create something together!

  • We’re looking for the best. Are you in?