iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 26
1

Navigation (四) deep link

在 Android 中, deep link 是一個可以讓用戶在開啟某些特定網站時直接進入應用程式特定目標(可能是某個 Activity)的一個連接。

在我的應用程式內把 FB 的網址設定為 deep link 的入口,就可以有這種效果。

navigation 也提供了兩種型態的 deep link:explicitimplicit.

explicit deep link (顯式深層鏈接)

explicit deep link 是透過 PendingIntent 把用戶吸引到應用內的特定位置,可能是從通知、app 捷徑等等...

val pendingIntent = NavDeepLinkBuilder(context)
    .setGraph(R.navigation.nav_graph)
    .setDestination(R.id.android)
    .setArguments(args)
    .createPendingIntent()

透過點擊通知觸發 deep link

 val builder = NotificationCompat.Builder(context)
                .setContentTitle("標題")
                .setContentText("内容")
                .setSmallIcon(R.mipmap.ic_launcher_round)
                .setContentIntent(pendingIntent)
                .setAutoCancel(true)

            val notificationManager = context!!.getSystemService(AppCompatActivity.NOTIFICATION_SERVICE) as (NotificationManager)

            notificationManager.notify(id, builder.build())

如果有了已經存在的 NavController,可以透過 NavController.createDeeplink 來創建。

implicit deep link (隱式深層鏈接)

隱式深層鏈接是指進入應用程式特定目標的一個連接,最上面的那張 gif 就是使用隱式深層鏈接。

打開 res 底下的 navigation 檔案並切到 design 面板,點擊任意一個頁面,點擊右邊的 deep link
https://ithelp.ithome.com.tw/upload/images/20190928/201193982GzEpHvCB8.png

輸入指定的 uri,Auto Verify 打勾

就會看到出現這樣的標籤

        <deepLink
            android:id="@+id/deepLink"
            app:uri="m.facebook.com"
            android:autoVerify="true" />

隱式深層鏈接只需要這樣就完成了!

這個標籤只要在同一個 navigation 底下,不管是放在 navigation 標籤內,還是放在底下任意 fragment 標籤內都是同樣的效果,會開啟這個 navigation 的 startDestination

那如果今天有多個 navigation 該怎麼處理呢,全部塞在一個 xml 一定會很亂,於是 navigation 出了 Nested navigation graphs 來幫助開發者對多個 navigation 分類,這個留到下一篇研究。

有任何問題或講得不清楚的地方歡迎留言和我討論。

更歡迎留言糾正我任何說錯的地方!

下一篇:Navigation (Last) Nested navigation set Arguments


上一篇
Day 25 Navigation (三) 換頁動畫
下一篇
Day 27 Navigation (Last) Nested navigation set Arguments
系列文
Android Architecture Components 學習心得筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言