Deep links trong Android

Chúng ta sẽ cùng tìm hiểu cách dùng và ứng dụng của deep links.

Link là gì?

Các thành phần của một đường link

Một đường link gồm:

  • Scheme: Trong ví dụ trên chính là phần “https:” nó xác định loại liên kết. Trong trường hợp này là giao thức https.
  • Authority and hostname: Ở ví dụ này là “papapip.xyz” nó cung cấp cho ta về địa chỉ mà liên kết sẽ được chuyển tới.
  • Path: Trong trường hợp này là “/location” là nơi chứa các nội dung của hostname hoặc authority.

Deep links là gì?

Deep link là các đường dẫn được chia sẻ trên nền tảng mobile app, nó hoạt động cũng khá giống hyperlink tuy nhiên thay vì việc đưa người dùng đến một địa chỉ trang web nào đó thì deep links sẽ chuyển hướng cho người dùng qua một màn hình cụ trên trên ứng dụng mobile.

Ví dụ như ta có một ứng dụng bán hàng và ta muốn khi người dùng bấm vào một đường link được chia sẻ qua tin nhắn hoặc bài post trên facebook thì nếu trên máy user đã cài ứng dụng của ta, ngay lập tức ứng dụng sẽ được mở ra và hiển thị vào đúng màn hình mà ta mong muốn. Deep links sẽ giúp ta thực hiện được việc này.

Khi sử dụng deep links ta phần lưu ý là mỗi deep links sẽ không phải là duy nhất cho mỗi một ứng dụng. Nghĩa là có thể có từ hơn một ứng dụng cùng được khai báo sử dụng một deep links. Trong trường hợp này khi ta bấm vào một deep links mà cùng được khai báo ở trong nhiều ứng dụng trên thiết bị, thì một popup sẽ xuất hiện liệt kê các app đang khai báo deep links này để cho user chọn đúng ứng dụng cần mở.

Như đã đề cập một trong những tính năng thường được sử dụng của deep links đó là điều hướng user tới một màn hình mà ta đã định nghĩa trước đó. Giả sử ta có ứng dụng AppGo để đặt xe và một màn hình Là MapActivity. Để mở màn hình MapActivity thì ta sẽ khai báo một deep links như sau:

appgo://mapactivity

Có nhiều loại deep links mà ta có thể tạo bên trong ứng dụng Android App như là: standard deep links, web links, và Android App Links.

Tất cả các loại deep links này đều có dạng là một URI cho phép việc đưa user tới một màn hình được xác định bên trong của ứng dụng.

  • Web links: là loại deep links mà schemes là HTTP hoặc HTTPS
  • Android App Links: là các liên kết được định nghĩa và xác thức bởi ứng dụng của ta.

Ví dụ về URIs:

  • “papapip://appgo” – URI có papapip là một scheme tự định nghĩa
  • “https://papapip.xyz/deeplinks” – URI có scheme là HTTPS

Tạo deep links trong ứng dụng Android

Khi user bấm vào một đường dẫn hoặc một ứng dụng mà gọi tới một URI intent, hệ điều hành Android sẽ tìm ứng dụng mà có thể sử lý liên kết này.

Ta sẽ thực hiện việc khai báo và xử lý deep links như sau:

Bước 1: Thêm bộ lọc (intent filters) cho các liên kết

Trong file Android Manifest ta sẽ thêm intent filters cho activity mà ta muốn điều hướng người dùng tới.

<!--AndroidManifest.xml-->
<activity
  android:name=".MapActivity"
  android:exported="true">
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="geo" />
  </intent-filter>
</activity>

Ví dụ trên ta thêm một intent filter để điều hướng người dùng tới màn MapActivity. Chúng ta cùng tìm hiểu các thẻ cũng như thuộc tính được sử dụng:

“><action>

Được khai báo là ACTION_VIEW cho user xem nội dung được hiện thị ở activity này.

“><category>

BROWSABLE đây là một category cần có để trình duyệt có thể truy cập được vào ứng dụng thông qua intent filters. Nếu không có category này ứng dụng của chúng ta sẽ không thể được mở khi user truy cập deep links từ trình duyệt.

DEFAULT category cho phép app nhận được implicit intents.

“><data>

Một hoặc nhiều thẻ <data> có thể được thêm vào mỗi một thẻ data sẽ định nghĩa một xử lý của activity. Thẻ “><data> phải bao gồm thuộc tính android:scheme

Bước 2: Đọc dữ liệu được gửi đến

Khi hệ thống mở activity trong ứng dụng của chúng ta lên thông qua intent filters, ta có thể lấy các dữ liệu được gửi kèm và tuỳ theo dữ liệu đó mà hiển thị các giao diện tương ứng.

// MapActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.main)
  
  val intentAction: String? = intent?.action
  val intentData: Uri? = intent?.data
}
Bước 3: Test deep links

Ta có thể sử dụng Android Debug Bridge để kiểm tra xem deep links mà ta định nghĩa trên app có hoạt động như ta mong muốn hay không. Ta mở cửa sổ lệnh lên và nhập với cú pháp như sau:

 adb shell am start 
      -W -a android.intent.action.VIEW 
      -d <URI> <PACKAGE>

Ví dụ như app AppGo của ta có package name là go.appgo.com và có URI được khai báo là appgo://map thì câu lệnh adb sẽ như sau:

 adb shell am start
      -W -a android.intent.action.VIEW
      -d “appgo://map” go.appgo.com

Leave a Reply

Your email address will not be published. Required fields are marked *