Android Branch deferred deep link 深度链接

Branch 实现Android端 deferred deep link

官网sdk文档地址:https://docs.branch.io/apps/android/
1. Configure Branch(配置Branch)
用户设备未安装app,跳转至某一下载链接
用户未安装app,跳转至Google Play时

2. Install Branch

  • Import the Branch SDK to your build.gradle
1
2
3
4
5
6
7
    // required for all Android apps
implementation 'io.branch.sdk.android:library:3.+'

// required if your app is in the Google Play Store
implementation 'com.google.android.gms:play-services-appindexing:9.+' // App indexing
implementation 'com.google.android.gms:play-services-ads:9+' // GAID matching
123456

3.Configure app

  • Add Branch to your AndroidManifest.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?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>
</activity>

<activity android:name=".intelsports.ShareShowActivity">
<!-- 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="olp" android:host="sports.app.link" />
</intent-filter>
</activity>

<!-- Branch init -->
<meta-data android:name="io.branch.sdk.BranchKey" android:value="key_live_kaFuWw8WvY7yn1d9yYiP8gokwqjV0Sw" />

<!-- Branch install referrer tracking (optional) -->
<receiver android:name="io.branch.referral.InstallListener" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>

</application>

</manifest>

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  • Replace the following with values from your Branch Dashboard App settings and Link settings

    example.app.link
    key_live_kaFuWw8WvY7yn1d9yYiP8gokwqjV0Sw

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    以上是Branch的配置信息设置,接下来进行Branch的初始化工作

4.Initialize Branch

  • Add Branch to your LauncherActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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 init
Branch.getInstance().initSession(new Branch.BranchReferralInitListener() {
@Override
public void onInitFinished(JSONObject referringParams, BranchError error) {
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.i("BRANCH SDK", error.getMessage());
}
}
}, this.getIntent().getData(), this);
}

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

5.Load Branch

  • Add Branch to your CustomApplicationClass.java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class CustomApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();

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

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

6.Test deep link

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BranchUniversalObject buo = new BranchUniversalObject();

LinkProperties lp = new LinkProperties()
.addControlParameter("custom1", "data1") //传入自定义数据
.addControlParameter("custom2", "data2");

buo.generateShortUrl(this, lp, new Branch.BranchLinkCreateListener() {
@Override
public void onLinkCreate(String url, BranchError error) {
if (error == null) {
//得到短链接,用于分享
Log.i("BRANCH SDK", "got my Branch link to share: " + url);
}
}
});

12345678910111213141516

使用第三方分享或系统自带分享工具,将以上短链接url分享即可。

7.Read deep link(读取depplink中携带的数据)

  • 在要启动的ShareShowActivity或LauncherActivity onStart方法中实现。即可读取出JSONObject中相应数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// listener (within Main Activity's onStart)
Branch.getInstance().initSession(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());
}
}
}, this.getIntent().getData(), this);

// latest
JSONObject sessionParams = Branch.getInstance().getLatestReferringParams();

// first 若设备未安装app,用户安装app后第一次启动即可获取deep link中的数据
JSONObject installParams = Branch.getInstance().getFirstReferringParams();
坚持原创技术分享,您的支持将鼓励我继续创作!