Android基本集成

👍

SDK统计

Maven中央Maven中央 Java文档Java文档

开源Github仓库

SDK大小 :187kb

速度 :中值80ms至250ms

Minimum OS Version: API Level 21+

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,则必须更新App 依赖项以包括 Play Install Referrer Library

🚧

华为移动服务

Branch SDK 支持没有 Google 移动服务的华为设备。要启用此支持,请添加以下依赖项并确保相应地设置了 混淆规则 (proguard rules)

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

对于以上依赖性,您将需要以下Maven存储库,将其添加到项目级别build.gradle

maven { url 'http://developer.huawei.com/repo/' }

配置应用

  • 将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 Dashboard 中的值App 设置链接设置
    • androidexample
    • example.app.link
    • example-alternate.app.link
    • key_live_kaFuWw8WvY7yn1d9yYiP8gokwqjV0Sw
    • key_test_hlxrWC5Zx16DkYmWu4AHiimdqugRYMr

🚧

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

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

如果 Activity 在后台运行,后续每个向 Activity 发出的 intent 都会将它推送到前端。可在此处阅读更多 Single Task 模式的信息。

加载 Branch

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

🚧

始终在onStart()中初始化Branch

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

这里了解更多。

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

Proguard设置

为了收集谷歌广告ID,您必须确保proguard的没有按' t取出了必要的谷歌广告类。最可靠的方法是将其添加到您的proguard规则中。如果使用proguard启用了您的应用程序,则将以下说明添加到您的proguard.cfgproguard-rules.pro 文件中:

-keep class com.google.android.gms.** { *; }
In case you are using Facebook SDK to support deep linking through Facebook ads, please make sure to keep the Facebook SDK classes in proguard
-keep class com.facebook.applinks.** { *; }
-keepclassmembers class com.facebook.applinks.** { *; }
-keep class com.facebook.FacebookSdk { *; }

如果要添加对不带Google移动服务的华为设备的支持,请确保将其添加到您的保护规则中。

-keep class com.huawei.hms.ads.** { *; }
-keep interface com.huawei.hms.ads.** { *; }

2个月前更新


推荐的后续步骤

Android SDK常见问题解答

Android基本集成


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

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