How to generate referral code using Branch.io Metrics?

2.5k views Asked by At

I am trying to implement a referral code system, and I am using Branch.io Metrics library. The problem I am facing is that the documentation is not good (doesn't work) and I am unable to generate a code

Documentation: https://github.com/BranchMetrics/Branch-Android-SDK#register-an-activity-for-direct-deep-linking-optional-but-recommended

Here are the steps I have taken including adding the library.

1) Grabbed the jar, added to my libs folder and added the following to my depenencies

compile files('libs/branch-1.5.9.jar')

2) In my application class that extends Application I added the following

if (DEBUG) {
   Branch.getAutoTestInstance(this);
} else {
    Branch.getAutoInstance(this);
}

3) In my AndroidManifest.xml I added the following

<meta-data android:name="io.branch.sdk.BranchKey" android:value="@string/bnc_app_key" />

4) In the Activity that I am testing everything, I added in the onStart() method the following

@Override
protected void onStart() {
    // note that branch is a global variable (Branch branch;)
    if (DEBUG) {
        branch = Branch.getTestInstance(this.getApplicationContext());
    } else {
        branch = Branch.getInstance(this.getApplicationContext());
    }

    branch.initSession(new BranchReferralInitListener() {
        @Override
        public void onInitFinished(JSONObject jsonObject, BranchError branchError) {
            if (branchError == null) {}        

        }, this.getIntent().getData(), this;
     }

From the above, I believe I have successfully created a branch.io session and a listener that will allow me to retrieve data if branchError is null (there are no conflicts)

While still inside onStart() I now try to generate a referral code. So the whole onStart() looks as follows:

@Override
protected void onStart() {
    // note that branch is a global variable (Branch branch;)
    if (DEBUG) {
        branch = Branch.getTestInstance(this.getApplicationContext());
    } else {
        branch = Branch.getInstance(this.getApplicationContext());
    }

    branch.initSession(new BranchReferralInitListener() {
        @Override
        public void onInitFinished(JSONObject jsonObject, BranchError branchError) {
            if (branchError == null) {}        

        }, this.getIntent().getData(), this;
    }

    branch.getReferralCode(5, new BranchReferralInitListener() {
        @Override
        public void onInitFinished(JSONObject jsonObject, BranchError branchError) {
            try {
                String code = jsonObject.getString("referral_code");
                Log.d(TAG, "code: " + code);
            } catch (JSONException e) {
                Log.e(TAG, "JSONException :: " + e);
                e.printStackTrace();
            }
        }
    });
}

5) I added onNewIntent override method

@Override
protected void onNewIntent(Intent intent) {
    this.setIntent(intent);
}

My app does not reach inside of the onInitFinished listener, so I am unable to retrieve any code(s). Any suggestions on what I have missed is appreciated, and hopefully this thread will fill the holes that the documentation lacks.

1

There are 1 answers

2
Sahil Verma On BEST ANSWER

I'm going to assume that the following lines of code are properly closed and aren't throwing syntax errors:

branch.initSession(new BranchReferralInitListener() {
    @Override
    public void onInitFinished(JSONObject jsonObject, BranchError branchError) {
        if (branchError == null) {}    
     }, this.getIntent().getData(), this); // parenthesis wasnt here

First, if you are extending the Application class, you need to initialize branch inside the onCreate() callback of your Application class:

public void onCreate() {
    super.onCreate();
    Branch.getInstance(this);
}

As per the Branch sample code found here, you actually need to call:

Branch.getInstance();

Instead of:

Branch.getInstance(getApplicationContext());

Inside your activities onCreate callback. Once that is taken care of, the Branch SDK will properly create.