From 0fbae8fee489ffd7dc4c3e1f875e5ab4e483f052 Mon Sep 17 00:00:00 2001 From: msiddiq-branch <48487826+msiddiq-branch@users.noreply.github.com> Date: Fri, 16 Jul 2021 23:39:04 +0530 Subject: [PATCH] [CORE-1951] Add initial_referrer for every session (#918) * Add initial_referrer for every session - Added initial_referrer-> EXTRA_REFERRER to every OPEN/INSTALL session request. * removed unused package from import * Formatted the code * Code clean up - Removed extra space and unused imports - Added null check and sdk version check * Added negation for if block * Replace with Appcompact referrer - Replaced Activity.referrer with ActivityCompat.referrer - Used TextUtils for null check * Added comment under Defines.IntentKeys - Added comment about usage of intent keys EXTRA_REFERRER and EXTRA_REFERRER_NAME --- .../branchandroiddemo/MainActivity.java | 4 ++++ .../main/java/io/branch/referral/Branch.java | 7 ++++++ .../main/java/io/branch/referral/Defines.java | 5 +++++ .../java/io/branch/referral/PrefHelper.java | 22 ++++++++++++++++++- .../referral/ServerRequestInitSession.java | 7 +++--- .../branch/referral/TrackingController.java | 1 + 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/Branch-SDK-TestBed/src/main/java/io/branch/branchandroiddemo/MainActivity.java b/Branch-SDK-TestBed/src/main/java/io/branch/branchandroiddemo/MainActivity.java index 436a7d4a4..5f8df1708 100644 --- a/Branch-SDK-TestBed/src/main/java/io/branch/branchandroiddemo/MainActivity.java +++ b/Branch-SDK-TestBed/src/main/java/io/branch/branchandroiddemo/MainActivity.java @@ -523,6 +523,8 @@ public void onInitFinished(JSONObject referringParams, BranchError error) { } } }).reInit(); + + } @Override @@ -537,4 +539,6 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { startActivity(i); } } + + } diff --git a/Branch-SDK/src/main/java/io/branch/referral/Branch.java b/Branch-SDK/src/main/java/io/branch/referral/Branch.java index 49c81eff4..132213dbc 100644 --- a/Branch-SDK/src/main/java/io/branch/referral/Branch.java +++ b/Branch-SDK/src/main/java/io/branch/referral/Branch.java @@ -17,6 +17,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -27,6 +28,7 @@ import android.text.TextUtils; import android.view.View; +import androidx.core.app.ActivityCompat; import io.branch.referral.Defines.PreinstallKey; import io.branch.referral.ServerRequestGetLATD.BranchLastAttributedTouchDataListener; import org.json.JSONArray; @@ -2870,6 +2872,11 @@ public void init() { Activity activity = branch.getCurrentActivity(); Intent intent = activity != null ? activity.getIntent() : null; + + if (ActivityCompat.getReferrer(activity) != null) { + PrefHelper.getInstance(activity).setInitialReferrer(ActivityCompat.getReferrer(activity).toString()); + } + if (uri != null) { branch.readAndStripParam(uri, activity); } else if (isReInitializing && branch.isRestartSessionRequested(intent)) { diff --git a/Branch-SDK/src/main/java/io/branch/referral/Defines.java b/Branch-SDK/src/main/java/io/branch/referral/Defines.java index 188eaabd2..944dd0468 100644 --- a/Branch-SDK/src/main/java/io/branch/referral/Defines.java +++ b/Branch-SDK/src/main/java/io/branch/referral/Defines.java @@ -27,6 +27,7 @@ public enum Jsonkey { PlayAutoInstalls("play-auto-installs"), //UTM_Source set by Xiaomi UTMCampaign("utm_campaign"), UTMMedium("utm_medium"), + InitialReferrer("initial_referrer"), Bucket("bucket"), DefaultBucket("default"), @@ -358,6 +359,10 @@ public enum IntentKeys { /* Key to indicate whether the Activity was launched by Branch or not. */ AutoDeepLinked("io.branch.sdk.auto_linked"); + // The below intent keys are also used to extract data from the intent (via ActivityCompact.getReferrer()) + // public static final String EXTRA_REFERRER = "android.intent.extra.REFERRER"; + // public static final String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME"; + private final String key; IntentKeys(String key) { diff --git a/Branch-SDK/src/main/java/io/branch/referral/PrefHelper.java b/Branch-SDK/src/main/java/io/branch/referral/PrefHelper.java index 5fb29524e..fd9801cd0 100644 --- a/Branch-SDK/src/main/java/io/branch/referral/PrefHelper.java +++ b/Branch-SDK/src/main/java/io/branch/referral/PrefHelper.java @@ -75,6 +75,7 @@ public class PrefHelper { private static final String KEY_INSTALL_PARAMS = "bnc_install_params"; private static final String KEY_USER_URL = "bnc_user_url"; private static final String KEY_LATD_ATTRIBUTION_WINDOW = "bnc_latd_attributon_window"; + private static final String KEY_INITIAL_REFERRER = "bnc_initial_referrer"; private static final String KEY_BUCKETS = "bnc_buckets"; private static final String KEY_CREDIT_BASE = "bnc_credit_base_"; @@ -938,7 +939,26 @@ public int getLATDAttributionWindow(){ return getInteger(KEY_LATD_ATTRIBUTION_WINDOW, ServerRequestGetLATD.defaultAttributionWindow); } - + + /** + * Persist the android.intent.extra.REFERRER value + * + * @param initialReferrer android.intent.extra.REFERRER + */ + public void setInitialReferrer(String initialReferrer) { + setString(KEY_INITIAL_REFERRER, initialReferrer); + } + + /** + * Get the persisted android.intent.extra.REFERRER value + * + * @return {@link String} android.intent.extra.REFERRER + */ + public String getInitialReferrer() { + return getString(KEY_INITIAL_REFERRER); + } + + // ALL GENERIC CALLS private String serializeArrayList(ArrayList strings) { diff --git a/Branch-SDK/src/main/java/io/branch/referral/ServerRequestInitSession.java b/Branch-SDK/src/main/java/io/branch/referral/ServerRequestInitSession.java index 34378b62c..00f0992cd 100644 --- a/Branch-SDK/src/main/java/io/branch/referral/ServerRequestInitSession.java +++ b/Branch-SDK/src/main/java/io/branch/referral/ServerRequestInitSession.java @@ -5,12 +5,9 @@ import android.content.SharedPreferences; import android.text.TextUtils; -import androidx.annotation.CallSuper; - import org.json.JSONException; import org.json.JSONObject; -import java.util.concurrent.locks.ReentrantLock; import io.branch.referral.validators.DeepLinkRoutingValidator; @@ -55,6 +52,9 @@ protected void setPost(JSONObject post) throws JSONException { if (!DeviceInfo.isNullOrEmptyOrBlank(appVersion)) { post.put(Defines.Jsonkey.AppVersion.getKey(), appVersion); } + if(!TextUtils.isEmpty(prefHelper_.getInitialReferrer()) && !prefHelper_.getInitialReferrer().equals(PrefHelper.NO_STRING_VALUE)) { + post.put(Defines.Jsonkey.InitialReferrer.getKey(), prefHelper_.getInitialReferrer()); + } post.put(Defines.Jsonkey.FaceBookAppLinkChecked.getKey(), prefHelper_.getIsAppLinkTriggeredInit()); post.put(Defines.Jsonkey.Debug.getKey(), Branch.isDeviceIDFetchDisabled()); @@ -117,6 +117,7 @@ public void onRequestSucceeded(ServerResponse response, Branch branch) { prefHelper_.setIsAppLinkTriggeredInit(false); prefHelper_.setInstallReferrerParams(PrefHelper.NO_STRING_VALUE); prefHelper_.setIsFullAppConversion(false); + prefHelper_.setInitialReferrer(PrefHelper.NO_STRING_VALUE); if (prefHelper_.getLong(PrefHelper.KEY_PREVIOUS_UPDATE_TIME) == 0) { prefHelper_.setLong(PrefHelper.KEY_PREVIOUS_UPDATE_TIME, prefHelper_.getLong(PrefHelper.KEY_LAST_KNOWN_UPDATE_TIME)); diff --git a/Branch-SDK/src/main/java/io/branch/referral/TrackingController.java b/Branch-SDK/src/main/java/io/branch/referral/TrackingController.java index fe92bb7cb..dcbed954f 100644 --- a/Branch-SDK/src/main/java/io/branch/referral/TrackingController.java +++ b/Branch-SDK/src/main/java/io/branch/referral/TrackingController.java @@ -58,6 +58,7 @@ private void onTrackingDisabled(Context context) { prefHelper.setInstallReferrerParams(PrefHelper.NO_STRING_VALUE); prefHelper.setGooglePlayReferrer(PrefHelper.NO_STRING_VALUE); prefHelper.setGoogleSearchInstallIdentifier(PrefHelper.NO_STRING_VALUE); + prefHelper.setInitialReferrer(PrefHelper.NO_STRING_VALUE); prefHelper.setExternalIntentUri(PrefHelper.NO_STRING_VALUE); prefHelper.setExternalIntentExtra(PrefHelper.NO_STRING_VALUE); prefHelper.setSessionParams(PrefHelper.NO_STRING_VALUE);