Android基本集成

SDK统计

Maven中央 Java文档

开源Github仓库

SDK大小 :187kb

速度 :中值80ms至250ms

最低操作系统版本 :API级别16

Android版本记录

Amazon Fire设备支持

Branch Android SDK 4.1.1+包括对Amazon Fire设备的支持。

请遵循以下的指南,但请保证应用级别build.gradle 文件不包括以下两行:

implementation 'com.google.firebase:firebase-appindexing:19.0.0'
implementation 'com.google.android.gms:play-services-ads-identifier:16+'

配置Branch仪表板

  • 配置您的默认链接设置

  • 确保I have an Android AppEnable App Links 都启用

图像

安装 Branch

  • 将Branch SDK导入到您的应用程序级别 build.gradle
apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.eneff.branch.example.android"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

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'
    ...
}

Google Play服务版本17+

如果您引用的是Google Play服务版本17或更高版本,则您必须完成此处Google的更新说明

由于Google Play服务于2019年6月进行了重大更改,未完成更新步骤将导致Branch的Android SDK(以及其他各种跨平台SDK,例如Unity)停止收集我们用来确保准确的深度链接接的Android AID和归因。

如果您运行的Google Play服务版本低于17,则无需更新。

使用4.3.0以下的Branch Android SDK版本

从4.3.0版开始,Google的Play Install Referrer库已捆绑在Branch Android SDK中。

如果您使用的版本低于4.3.0,则必须更新应用程序'的依赖项以包括Play安装引荐来源库

华为移动服务

Branch SDK支持没有Google移动服务的华为设备。请按照上方的指南进行操作,但需要在应用程序级别build.gradle 文件删除以下三行:

implementation 'com.google.firebase:firebase-appindexing:19.0.0

implementation 'com.google.android.gms:play-services-ads-identifier:16+

implementation 'com.google.firebase:firebase-appindexing:19.0.0

并将它们替换为

implementation 'com.huawei.hms:ads-identifier:3.4.28.305

配置应用

  • 将Branch添加到您的 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.eneff.branch.example.android">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:name="com.eneff.branch.example.android.CustomApplicationClass"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- Launcher Activity to handle incoming Branch intents -->
        <activity
            android:name=".LauncherActivity"
            android:launchMode="singleTask"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <!-- Branch URI Scheme -->
            <intent-filter>
                <data android:scheme="yourapp" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>

            <!-- Branch App Links (optional) -->
            <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="example.app.link" />
                <!-- example-alternate domain is required for App Links when the Journeys/Web SDK and Deepviews are used inside your website.  -->
                <data android:scheme="https" android:host="example-alternate.app.link" />
            </intent-filter>
        </activity>

        <!-- Branch init -->
        <meta-data android:name="io.branch.sdk.BranchKey" android:value="key_live_kaFuWw8WvY7yn1d9yYiP8gokwqjV0Sw" />
        <meta-data android:name="io.branch.sdk.BranchKey.test" android:value="key_test_hlxrWC5Zx16DkYmWu4AHiimdqugRYMr" />
        <meta-data android:name="io.branch.sdk.TestMode" android:value="false" />     <!-- Set to true to use Branch_Test_Key (useful when simulating installs and/or switching between debug and production flavors) -->

    </application>

</manifest>
  • 将以下内容替换为Branch仪表板中的值应用程序设置链接设置
    • androidexample
    • example.app.link
    • example-alternate.app.link
    • key_live_kaFuWw8WvY7yn1d9yYiP8gokwqjV0Sw
    • key_test_hlxrWC5Zx16DkYmWu4AHiimdqugRYMr

需要单任务启动模式(SingleTask Mode)

单任务模式仅在活动堆栈中不存在时才实例化Main/Splash Activity。

如果活动存在于后台,则该活动的每个后续Intent都将其带到前台。您可以在此处阅读有关单任务模式更多信息。

  • 将Branch添加到您的 CustomApplicationClass.java
package com.eneff.branch.example.android;

import android.app.Application;
import io.branch.referral.Branch;

public class CustomApplicationClass extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        // Branch logging for debugging
        Branch.enableLogging();

        // Branch object initialization
        Branch.getAutoInstance(this);
    }
}
package com.eneff.branch.example.android

import android.app.Application
import io.branch.referral.Branch

class CustomApplicationClass : Application() {
    override fun onCreate() {
        super.onCreate()

        // Branch logging for debugging
        Branch.enableDebugMode()

        // Branch object initialization
        Branch.getAutoInstance(this)
    }
}

初始化 Branch

sessionBuilder适用于v4.4.0 +

  • 将Branch添加到您的 LauncherActivity.java
package com.eneff.branch.example.android;

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) {
            // do stuff with deep link data (nav to page, display content, etc)
        }
    };
package com.eneff.branch.example.android

import io.branch.indexing.BranchUniversalObject
import io.branch.referral.Branch
import io.branch.referral.BranchError
import io.branch.referral.util.LinkProperties

    override fun onStart() {
        super.onStart()
        // Branch init
        Branch.sessionBuilder(this).withCallback(branchListener).withData(this.intent?.data).init()
    }

    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        this.intent = intent
        // Branch reinit (in case Activity is already in foreground when Branch link is clicked)
        Branch.sessionBuilder(this).withCallback(branchListener).reInit()
    }

    object branchListener : Branch.BranchReferralInitListener {
            override fun onInitFinished(referringParams: JSONObject?, error: BranchError?) {
                if (error == null) {
                    Log.i("BRANCH SDK", referringParams.toString())
                    // Retrieve deeplink keys from 'referringParams' and evaluate the values to determine where to route the user
                    // Check '+clicked_branch_link' before deciding whether to use your Branch routing logic
                } else {
                    Log.e("BRANCH SDK", error.message)
                }
            }
        }

LauncherActivity vs. 其他 Activity

Branch建议在 LauncherActivity 内部初始化会话(即在AndroidManifext.xml中包含类别为“ android.intent.category.LAUNCHER”的 intent filter的 Activity)。但是,如果您的应用需要的话,会话初始化也可以在其他 Activity 中进行,只要该 Activity 在 AndroidManifest.xml 里面的 intent filter 配置为可以打开 Branch 链接的 Activity(请参见上文)。请注意,在这种情况下,如果以自然方式打开应用程序,则Branch将在后台自动初始化,并调用sessionBuilder()…init()将返回错误。这是因为SDK已被初始化。主要例外是推送通知应用程序内的链接活动

始终在onStart()中初始化Branch

在其他Android生命周期方法(例如onCreate()/ onResume())中初始化Branch会导致意外行为。 onStart()是使活动对用户可见的原因,因为应用程序准备使活动进入前台并变得互动。

了解更多在这里

如果您的应用需要其他会话初始化设置,请参阅延迟会话初始化

大约一个月前更新

Android基本集成


建议的编辑仅限于API参考页

您只能建议对Markdown正文内容进行修改,而不能建议对API规范进行修改。