Android:強化Deep Link,提升使用體驗 — Deferred Deep Link 實作

Xavier Yin
KKday Tech Blog
Published in
11 min readJun 3, 2018
Photo by rawpixel on Unsplash

談完Deep Link實作後,接著來談些其他進階的應用之一:Deferred Deep Link。所謂的Deferred Deep Link(延遲性深度鏈結)就是當使用者透過一個特定的產品連結,點擊後進入該網頁,但該網頁可以引導使用者安裝應用程式,在安裝完程式後,照樣可以接續剛剛看過的商品,不讓整個體驗中斷,讓整個購物或瀏覽流程更為順暢,這就是Deferred Deep Link,這篇文章主要就是與大家分享該如何實作Deferred Deep Link。

實作 Deferred Deep Link主要以Branch IO和Apps Flyer兩種,但都需要先完成Deep Link,可以參照先前的文章:Android:提升產品與應用程式的曝光度,Deep Link 實作。兩種實作方式都差不多,這篇文章會只以Branch IO的實作來介紹,Apps Flyer概念相同,可以參考官網的文件。

實作Branch IO:

  • 依照下列流程設定Branch
  • 在.gradle的dependencies加入Branch SDK
// required
implementation 'io.branch.sdk.android:library:2.+'
// optional
implementation 'com.android.support:customtabs:23.3.0' // Chrome Tab matching
implementation 'com.google.android.gms:play-services-ads:9+' // GAID matching
implementation 'com.google.android.gms:play-services-appindexing:9.+' // App indexing
  • 設定AndroidManifest
<?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">
<activity
android:name=".MainActivity"
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="androidexample" />
<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" />
<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 -->
<!-- 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>
  • 程式碼中初始Branch

在以下的BranchReferralInitListener中,我們可以接收到一個JSONObject的資料,在這個資料內,可以處理到來自於使用者在點擊URL,安裝完成後的資料。

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.referral.Branch;
import io.branch.referral.BranchError;
public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@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());
} else {
Log.i("BRANCH SDK", error.getMessage());
}
}
}, this.getIntent().getData(), this);
}
@Override
public void onNewIntent(Intent intent) {
this.setIntent(intent);
}
}
  • 程式碼中載入Branch
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);
}
}
  • 測試Deffered Deep Link

可進入Branch後台,並設定一個測試用的URL,進入Edit加入一個key與value,如下圖所示。

這時就可以將你設定好的URL,以公開的形式分享至Gamil、Slack、Facebook或是Line中,當使用者未安裝時,點擊後會進入Google Play提醒下載,下載後就會成功導入到應用程式了,如下圖所示。

--

--