Navigation (四) deep link
在 Android 中, deep link 是一個可以讓用戶在開啟某些特定網站時直接進入應用程式特定目標(可能是某個 Activity)的一個連接。
在我的應用程式內把 FB 的網址設定為 deep link 的入口,就可以有這種效果。
navigation 也提供了兩種型態的 deep link:explicit
、 implicit
.
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
來創建。
隱式深層鏈接是指進入應用程式特定目標的一個連接,最上面的那張 gif 就是使用隱式深層鏈接。
打開 res 底下的 navigation 檔案並切到 design 面板,點擊任意一個頁面,點擊右邊的 deep link
輸入指定的 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