Android Advanced Features
Do more with the Branch Android SDK by leveraging advanced features for specific use cases.
Overview
The Branch Android SDK exposes a set of methods specifically made for Android apps, which you can call using Kotlin or Java.
Prerequisites
Before you get started implementing the features on this page, you first need to:
- Create a Branch Dashboard.
- Integrate the Branch Android SDK into your mobile app.
- Validate your Branch Android SDK integration.
Generate Signing Certificate
A signing certificate is required to use Android App Links with Branch.
To generate and use a signing certificate:
- Navigate to your keystore file.
- Run
keytool -list -v -keystore my-release-key.keystore
in the same directory as your keystore file. - This will generate a value that will look like
AA:00:BB:11:CC:22.....
- Copy the value and add it to your Branch Dashboard.
Set Initialization Metadata
Some third-party Data Integration Partners require setting certain identifiers before initializing the Branch Android SDK.
Do this using the setRequestMetadata()
method.
Branch.getInstance().setRequestMetadata("\$analytics_visitor_id", "000001")
Branch.getInstance().setRequestMetadata("$analytics_visitor_id", "000001");
Delay Branch Initialization
There are certain cases when you may want to delay the initialization of a Branch session. An example would be making an async call to retrieve data that needs to be passed to Branch as request metadata.
Warning: When you try to do this, you may run into an error that reads SDK already initialized
. This happens because Branch is self-initializing the session when the Activity enters a RESUMED
state. To avoid this, manually disable auto session initialization and initialize the session yourself after the async call finishes.
Note: The expectDelayedSessionInitialization()
method must be called before establishing the Branch singleton within your application class's onCreate()
.
package com.example.android
import android.app.Application
import io.branch.referral.Branch
class CustomApplicationClass : Application() {
override fun onCreate() {
super.onCreate()
// Delay session initialization
Branch.expectDelayedSessionInitialization()
// Branch object initialization
Branch.getAutoInstance(this.applicationContext)
}
}
package com.example.android;
import android.app.Application;
import io.branch.referral.Branch;
public class CustomApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// Delay session initialization
Branch.expectDelayedSessionInitialization();
// Branch object initialization
Branch.getAutoInstance(this.getApplicationContext);
}
}
Use bnc.lt
or Custom Domain
bnc.lt
or Custom DomainTo use bnc.lt
, add the following block to your AndroidManifest.xml
file:
<activity android:name="com.yourapp.your_activity">
<!-- App Link your activity to Branch links-->
<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:scheme="https" android:host="bnc.lt" />
<data android:scheme="http" android:host="bnc.lt" />
</intent-filter>
</activity>
To use a custom domain, add the following block to your AndroidManifest.xml
file:
<activity android:name="com.yourapp.your_activity">
<!-- App Link your activity to Branch links -->
<!-- Update with your own app name, which should match Branch Dashboard settings -->
<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:scheme="https" android:host="<YOUR.APP.COM>" />
<data android:scheme="http" android:host="<YOUR.APP.COM>" />
</intent-filter>
</activity>
General Deep Linking
Branch Deep Links point to specific content that exists inside your app.
If a user clicks a Branch Deep Link and they have your app installed, the Branch Deep Link will take them directly to your app and the specific content featured in your ad.
If the user does not have your app installed, they will be routed to the fallback URL you specified in your Branch Dashboard.
Deep Link Prerequisites
Before you can create a Branch Deep Link, you first need to:
- Create a
BranchUniversalObject
instance that will represent a unique piece of content:val buo: BranchUniversalObject = BranchUniversalObject() .setCanonicalIdentifier("content/12345") .setTitle("My Content Title") .setContentDescription("My Content Description") .setContentImageUrl("https://lorempixel.com/400/400") .setContentIndexingMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC) .setLocalIndexMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC) .setContentMetadata(ContentMetadata().addCustomMetadata("key1", "value1"))
BranchUniversalObject buo = new BranchUniversalObject() .setCanonicalIdentifier("content/12345") .setTitle("My Content Title") .setContentDescription("My Content Description") .setContentImageUrl("https://lorempixel.com/400/400") .setContentIndexingMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC) .setLocalIndexMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC) .setContentMetadata(new ContentMetadata().addCustomMetadata("key1", "value1"));
- Create a
BranchLinkProperties
instance that will contain info about the URL associated with the content:val lp: LinkProperties = LinkProperties() .setChannel("facebook") .setFeature("sharing") .setCampaign("content 123 launch") .setStage("new user") .addControlParameter("\$desktop_url", "https://example.com/home") .addControlParameter("custom", "data") .addControlParameter("custom_random", Calendar.getInstance().timeInMillis.toString())
LinkProperties lp = new LinkProperties() .setChannel("facebook") .setFeature("sharing") .setCampaign("content 123 launch") .setStage("new user") .addControlParameter("$desktop_url", "https://example.com/home") .addControlParameter("custom", "data") .addControlParameter("custom_random", Long.toString(Calendar.getInstance().getTimeInMillis()));
Create Deep Links
Once you have a BranchUniversalObject
and a BranchLinkProperties
instance, you can use the getShortUrl()
method to create a Branch Deep Link.
BranchUniversalObject buo = new BranchUniversalObject().setCanonicalIdentifier(“content/12345”)
LinkProperties lp = new LinkProperties().setCampaign("content 123 launch")
// Generate a short URL for the Branch Universal Object
String url = buo.getShortUrl(this.applicationContext, lp)
BranchUniversalObject buo = new BranchUniversalObject().setCanonicalIdentifier("content/12345");
LinkProperties lp = new LinkProperties().setCampaign("content 123 launch");
// Generate a short URL for the Branch Universal Object
String url = buo.getShortUrl(this.getApplicationContext, lp);
For more about the getShortUrl()
method, visit the Android Full Reference guide.
Read Deep Links
You can read a Branch Deep Link to retrieve data from it. This must happen after Branch initialization.
The best practice is to get the data from the listener, since this will prevent a possible race condition.
// Listener within MainActivity's `onStart`
Branch.sessionBuilder(this).withCallback(object : BranchReferralInitListener {
override fun onInitFinished(referringParams: JSONObject?, error: BranchError?) {
if (error == null) {
Log.i("BRANCH SDK", referringParams.toString())
} else {
Log.e("BRANCH SDK", error.message)
}
}
}).withData(this.intent.data).init()
// Latest params
val sessionParams = Branch.getInstance().latestReferringParams()
// Listener within Main Activity's `onStart`
Branch.sessionBuilder(this).withCallback(new Branch.BranchReferralInitListener() {
@Override
public void onInitFinished(JSONObject referringParams, BranchError error) {
if (error == null) {
Log.i("BRANCH SDK", referringParams.toString());
} else {
Log.i("BRANCH SDK", error.getMessage());
}
}
}).withData(this.getIntent().getData()).init();
// Latest params
JSONObject sessionParams = Branch.getInstance().getLatestReferringParams();
The getLatestReferringParams()
method returns Branch Deep Link properties.
Navigate to Content
Using data you've retrieved from a Branch Deep Link, you can navigate the user to specific content. Alternatively, you can log data, display data, or save data to be used later.
// Within Main Activity's `onStart`
Branch.sessionBuilder(this).withCallback { referringParams, error ->
if (error == null) {
// Option 1: log data
Log.i("BRANCH SDK", referringParams.toString())
// Option 2: save data to be used later
val preferences = getSharedPreferences(
"MyPreferences",
MODE_PRIVATE)
preferences.edit().putString("branchData", referringParams.toString()).apply()
// Option 3: navigate to page
val intent = Intent(this@MainActivity, OtherActivity::class.java)
startActivity(intent)
// Option 4: display data
Toast.makeText(this@MainActivity, referringParams.toString(), Toast.LENGTH_LONG).show()
} else {
Log.i("BRANCH SDK", error.message)
}
}.withData(this.intent.data).init()
// Within Main Activity's `onStart`
Branch.sessionBuilder(this).withCallback(new Branch.BranchReferralInitListener() {
@Override
public void onInitFinished(JSONObject referringParams, BranchError error) {
if (error == null) {
// Option 1: log data
Log.i("BRANCH SDK", referringParams.toString());
// Option 2: save data to be used later
SharedPreferences preferences = MainActivity.this.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);
preferences.edit().putString("branchData", referringParams.toString()).apply();
// Option 3: navigate to page
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
// Option 4: display data
Toast.makeText(MainActivity.this, referringParams.toString(), Toast.LENGTH_LONG).show();
} else {
Log.i("BRANCH SDK", error.getMessage());
}
}
}).withData(this.getIntent().getData()).init();
Deep Link Routing
Warning: This approach is not recommended. Branch recommends using the methods in the "Navigate to Content" section instead.
You can add the code below to your AndroidManifest.xml
file to load a specific URI Scheme path:
<meta-data android:name="io.branch.sdk.auto_link_path" android:value="content/123/, another/path/, another/path/*" />
Deep Link Routing in App
WebView
Branch Deep Links within the WebView
will route internally within your app, while other content will continue to route externally.
To launch Branch Deep Links with WebView
:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val webView = findViewById(R.id.webView) as WebView
webView!!.webViewClient = BranchWebViewController("appname.app.link", MainActivity2::class.java)
webView!!.loadUrl(URL_TO_LOAD)
}
inner class BranchWebViewController internal constructor(private val myDomain_: String, private val activityToLaunch_: Class<*>) : WebViewClient() {
override fun onLoadResource(view: WebView, url: String) {
super.onLoadResource(view, url)
}
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
val url = request.url.toString()
if (url.contains(myDomain_)) {
val i = Intent(view.context, activityToLaunch_)
i.putExtra("branch", url)
i.putExtra("branch_force_new_session", true)
//finish(); if launching same activity
startActivity(i)
} else {
view.loadUrl(url)
}
return true
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = (WebView) findViewById(R.id.webView);
webView.setWebViewClient(new BranchWebViewController(YOUR_DOMAIN, MainActivity.class)); //YOUR_DOMAIN example: appname.app.link
webView.loadUrl(URL_TO_LOAD);
}
public class BranchWebViewController extends WebViewClient {
private String myDomain_;
private Class activityToLaunch_;
BranchWebViewController(@NonNull String myDomain, Class activityToLaunch) {
myDomain_ = myDomain;
activityToLaunch_ = activityToLaunch;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (url.contains(myDomain_)) {
Intent i = new Intent(view.getContext(), activityToLaunch_);
i.putExtra("branch", url);
i.putExtra("branch_force_new_session", true);
startActivity(i);
//finish(); if launching same activity
} else {
view.loadUrl(url);
}
return true;
Chrome Tabs
Launch Branch Deep Links with Chrome Tabs:
val builder = CustomTabsIntent.Builder()
val customTabsIntent = builder.build()
customTabsIntent.intent.putExtra("branch", BRANCH_LINK_TO_LOAD)
customTabsIntent.intent.putExtra("branch_force_new_session", true)
customTabsIntent.launchUrl(this@MainActivity2, Uri.parse(BRANCH_LINK_TO_LOAD))
//finish() if launching same activity
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.intent.putExtra("branch", BRANCH_LINK_TO_LOAD);
customTabsIntent.intent.putExtra("branch_force_new_session", true);
customTabsIntent.launchUrl(MainActivity.this, Uri.parse(BRANCH_LINK_TO_LOAD));
//finish(); if launching same activity
Deep Link Activity Finished Notification
To be notified when a Branch Deep Link activity finishes, add the following to your AndroidManifest.xml
file:
<meta-data android:name="io.branch.sdk.auto_link_request_code" android:value="@integer/AutoDeeplinkRequestCode" />
Also, add the following to your app:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// Checking if the previous activity is launched on Branch auto deep link
if (requestCode == resources.getInteger(R.integer.AutoDeeplinkRequestCode)) {
// Decide where to navigate when an auto deep linked activity finishes
// For example, navigate to HomeActivity or a SignUp Activity
val i = Intent(applicationContext, CreditHistoryActivity::class.java)
startActivity(i)
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Checking if the previous activity is launched on Branch auto deep link
if(requestCode == getResources().getInteger(R.integer.AutoDeeplinkRequestCode)){
// Decide where to navigate when an auto deep linked activity finishes
// For example, navigate to HomeActivity or a SignUp Activity
Intent i = new Intent(getApplicationContext(), CreditHistoryActivity.class);
startActivity(i);
}
}
Event Tracking
General Event Tracking
By default, the Branch Android SDK tracks clicks, opens, installs, reinstalls and impressions automatically (out-of-the-box).
You can also use the BranchEvent
class to track special user actions or application-specific events. For example, you can track when a user adds an item to a shopping cart or searches for a keyword.
In short, a BranchEvent
instance corresponds to an in-app event that you want to log with Branch.
You can use a BranchUniversalObject
(BUO) instance to populate the contentItems
field of the BranchEvent
class. This is how you associate BUO data with a specific event.
Learn more about tracking events and the logEvent()
method in our respective guides.
Content Tracking
To track how many times a piece of content is viewed, use the addContentItems()
and logEvent()
methods together.
BranchEvent(BRANCH_STANDARD_EVENT.VIEW_ITEM).addContentItems(buo).logEvent(this.applicationContext)
new BranchEvent(BRANCH_STANDARD_EVENT.VIEW_ITEM).addContentItems(buo).logEvent(this.getApplicationContext);
Sharing
Android Native Sharesheet
Use the share()
method to create a Branch Deep Link that has Android Native Sharesheet behavior associated with it.
@RequiresApi(Build.VERSION_CODES.LOLLIPOP_MR1)
private fun shareBranchLink(@NonNull activity:Activity ) {
// Create a Branch Universal Object
val buo = BranchUniversalObject()
.setCanonicalIdentifier("content/12345")
// Create a Link Properties instance
val lp = LinkProperties()
.setChannel("facebook")
.setFeature("sharing")
.setCampaign("content 123 launch")
.setStage("new user")
// `$deeplink_path` routes users to a specific Activity
.addControlParameter("\$deeplink_path", "color block page")
// You can set the `blockColor` parameter to `Blue`, `Yellow`, `Red`, `Green` or `White` to modify the color block page.
.addControlParameter("blockColor", "Green")
.addControlParameter("\$desktop_url", "https://example.com/home")
.addControlParameter("custom", "data")
.addControlParameter("custom_random", Calendar.getInstance().timeInMillis.toString())
Branch.getInstance().share(
this@MainActivity,
buo,
lp,
object : BranchNativeLinkShareListener {
override fun onLinkShareResponse(sharedLink: String, error: BranchError) {}
override fun onChannelSelected(channelName: String) { }
},
"Sharing Branch Short URL",
"Using Native Chooser Dialog"
)
}
private void shareBranchLink(){
// Create a Branch Universal Object
BranchUniversalObject buo = new BranchUniversalObject()
.setCanonicalIdentifier("content/12345");
// Create a Link Properties instance
LinkProperties lp = new LinkProperties()
.setChannel("facebook")
.setFeature("sharing")
.setCampaign("content 123 launch")
.setStage("new user")
.addControlParameter("$desktop_url", "https://example.com/home")
.addControlParameter("custom", "data")
.addControlParameter("custom_random", Long.toString(Calendar.getInstance().getTimeInMillis()));
// Show Sharesheet
Branch.getInstance().share(MainActivity.this, branchUniversalObject, lp, new Branch.BranchNativeLinkShareListener() {
@Override
public void onLinkShareResponse(String sharedLink, BranchError error) {}
@Override
public void onChannelSelected(String channelName) { }
},
"Sharing Branch Short URL",
"Using Native Chooser Dialog");
}
Note: If you are using the BranchNativeLinkShareListener
object when calling the share()
method, make sure to add the SharingBroadcastReceiver
class to your AndroidManifest.xml
file:
<receiver android:name="io.branch.receivers.SharingBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="EXTRA_CHOSEN_COMPONENT" />
</intent-filter>
</receiver>
Learn more about share()
in our Android Full Reference guide.
Handle Links in Your Own App
Use the code below to deep link into your own app from within the app itself. This is done by launching a Chrome intent.
Note: Handling a new Branch Deep Link in your app will clear the current session data and a new referred OPEN
will be attributed.
Note: Linking to the currently open activity or an activity that is in the backstack and partially visible must be handled via sessionBuilder()...reInit()
.
val intent = Intent(this, ActivityToLaunch::class.java)
// Replace with your own link URL
intent.putExtra("branch", "https://xxxx.app.link/testlink")
intent.putExtra("branch_force_new_session", true)
startActivity(intent)
Intent intent = new Intent(this, ActivityToLaunch.class);
// Replace with your own link URL
intent.putExtra("branch","https://xxxx.app.link/testlink");
intent.putExtra("branch_force_new_session",true);
startActivity(intent);
Push Notifications
Handle push notifications by adding a Branch Deep Link to your result intent.
val resultIntent = Intent(this, TargetClass::class.java)
resultIntent.putExtra("branch", "https://xxxx.app.link/testlink")
resultIntent.putExtra("branch_force_new_session", true)
val resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT)
Intent resultIntent = new Intent(this, TargetActivity.class);
resultIntent.putExtra("branch","https://xxxx.app.link/testlink");
resultIntent.putExtra("branch_force_new_session",true);
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
To handle situations where TargetActivity
is in the foreground when a push notification is clicked, don't forget to call sessionBuilder()...reInit()
from onNewIntent
inside TargetActivity
.
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
this.intent = intent
// Branch reinit (in case Activity is already visible when Branch Link is clicked)
// Will re-initialize only if `branch_force_new_session=true` intent extra is set
Branch.sessionBuilder(this).withCallback(branchListener).reInit()
}
@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`)
if (intent != null &&
intent.hasExtra("branch_force_new_session") &&
intent.getBooleanExtra("branch_force_new_session")) {
Branch.sessionBuilder(this).withCallback(branchReferralInitListener).reInit();
}
}
QR Codes
To use a Branch QR Code, first create a BranchQRCode
object. Fill out relevant properties for that object, then use getQRCodeAsImage()
or getQRCodeAsData()
to retrieve and use the Branch QR Code.
val qrCode = BranchQRCode()
.setCodeColor("#a4c639")
.setBackgroundColor(Color.WHITE)
.setMargin(1)
.setWidth(512)
.setImageFormat(BranchQRCode.BranchImageFormat.JPEG)
.setCenterLogo("https://cdn.branch.io/branch-assets/1598575682753-og_image.png")
val buo = BranchUniversalObject()
.setCanonicalIdentifier("content/12345")
.setTitle("My Content Title")
.setContentDescription("My Content Description")
.setContentImageUrl("https://lorempixel.com/400/400")
val lp = LinkProperties()
.setChannel("facebook")
.setFeature("sharing")
.setCampaign("content 123 launch")
.setStage("new user")
qrCode.getQRCodeAsImage(this@MainActivity, buo, lp, object : BranchQRCodeImageHandler<Any?> {
override fun onSuccess(qrCodeImage: Bitmap) {
// Do something with your QR code here
}
override fun onFailure(e: Exception) {
Log.d("Failed to get QR code", e.toString())
}
})
BranchQRCode qrCode = new BranchQRCode() //All QR code settings are optional
.setCodeColor("#a4c639")
.setBackgroundColor(Color.WHITE)
.setMargin(1)
.setWidth(512)
.setImageFormat(BranchQRCode.BranchImageFormat.PNG)
.setCenterLogo("https://cdn.branch.io/branch-assets/1598575682753-og_image.png");
BranchUniversalObject buo = new BranchUniversalObject()
.setCanonicalIdentifier("content/12345")
.setTitle("My QR Code");
LinkProperties lp = new LinkProperties()
.setChannel("facebook")
.setFeature("qrCode")
.setCampaign("content 123 launch");
qrCode.getQRCodeAsImage(MainActivity.this, buo, lp, new BranchQRCode.BranchQRCodeImageHandler() {
@Override
public void onSuccess(Bitmap qrCodeImage) {
// Do something with the QR code here
}
@Override
public void onFailure(Exception e) {
Log.d("Failed to get QR code", String.valueOf(e));
}
});
Learn more about getting your Branch QR Code as an image or as data in our Android Full Reference guide.
Access
Basic Branch QR Codes are included in the free tier of the Branch Growth Platform.
For more advanced QR Code capabilities, see our Engagement Pro package, which includes access to the QR Code API as well as the ability to create custom QR Codes in the Branch Dashboard.
User Data
Google DMA Compliance
In response to the European Union's enactment of the Digital Markets Act (DMA), the Branch Android SDK includes the setDMAParamsForEEA()
method to help you pass consent information from your user to Google.
The setDMAParamsForEEA()
method takes 3 parameters:
Parameter Name | Type | Description | When true | When false |
---|---|---|---|---|
eeaRegion | Boolean | Whether European regulations, including the DMA, apply to this user and conversion. | User is included in European Union regulations. For example, if the user is located within the EEA, they are within the scope of DMA. | User is considered excluded from European Union regulations. |
adPersonalizationConsent | Boolean | Whether end user has granted or denied ads personalization consent. | User has granted consent for ads personalization. | User has denied consent for ads personalization. |
adUserDataUsageConsent | Boolean | Whether end user has granted or denied consent for 3P transmission of user level data for ads. | User has granted consent for 3P transmission of user-level data for ads. | User has denied consent for 3P transmission of user-level data for ads. |
Default Behavior
When eeaRegion
is set to true
, the parameters adPersonalizationConsent
and adUserDataUsageConsent
must also be set.
When parameters are successfully set using setDMAParamsForEEA()
, they will be sent along with every future request to the following Branch endpoints:
/v1/install
/v1/open
/v2/event
Warning:
NULL
by DefaultPlease note that the 3 parameters passed to
setDMAParamsForEEA()
are allNULL
by default.Failure to include user consent signals may result in attribution or campaign performance degradation. For additional information, please reach out to your Google AM.
Example Usage
// Example for an EEA resident who has denied both ad personalization and data usage consent
Branch.getInstance.setDMAParamsForEEA(true,false,false)
// Example for an EEA resident who has denied both ad personalization and data usage consent
Branch.getInstance.setDMAParamsForEEA(true,false,false);
// Example for an EEA resident who has consented to ad personalization but denied data usage consent
Branch.getInstance.setDMAParamsForEEA(true,true,false)
// Example for an EEA resident who has consented to ad personalization but denied data usage consent
Branch.getInstance.setDMAParamsForEEA(true,true,false);
// Example for an EEA resident who has denied ad personalization but granted data usage consent
Branch.getInstance.setDMAParamsForEEA(true,false,true)
// Example for an EEA resident who has denied ad personalization but granted data usage consent
Branch.getInstance.setDMAParamsForEEA(true,false,true);
Set User Identity
An "identity" is a unique alias attributed to a specific user in the Branch system.
Some scenarios which could leverage the setIdentity()
function:
- You have your own user IDs that you want to see reflected in the Branch system.
- You want referral and event data to persist across platforms so you can see how your users access your service from different devices.
- You want referral and event data to persist across uninstall/reinstall events.
Sending PII
Be sure to not send any PII through the
setIdentity()
method. For additional details, please view our guide on Best Practices to Avoid Sending PII to Branch.
To confirm that user identities are being set as expected, use the Liveview section of the Branch Dashboard.
Branch branch = Branch.getAutoInstance(this.applicationContext)
branch.setIdentity("unique_user_id",
BranchReferralInitListener { referringParams, error ->
Log.i(
"Test",
"Install params = " + referringParams.toString()
)
})
Branch.getInstance().logout()
Branch branch = Branch.getAutoInstance(this.getApplicationContext);
public void onClick(View v) {
branch.setIdentity("unique_user_id", new BranchReferralInitListener() {
@Override
public void onInitFinished(JSONObject referringParams, BranchError error) {
Log.i("Test", "install params = " + referringParams.toString());
}
});
}
Branch.getInstance().logout();
Learn more about the setIdentity
method in our Android Full Reference guide.
Attribution Through Install Listener
It is possible to pass the link_click_id
from Google Play to Branch. This will increase attribution and deferred deep linking accuracy.
By default, Branch waits 1.5 seconds for Google Play analytics. You can change this based on your needs.
To use this approach, add the following to your application class before the getAutoInstance()
method:
Branch.setPlayStoreReferrerCheckTimeout(5_000)
Branch.setPlayStoreReferrerCheckTimeout(5000);
To test this setup, run the following command:
adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n io.branch.androidexampledemo/io.branch.referral.InstallListener --es "referrer" "link_click_id=123"
Disable Tracking
You can also visit the Full Reference guide to learn how to disable tracking across your entire application with the disableTracking()
method.
Updated about 2 months ago