파이어 베이스 딥링크를 사용하는데 네비게이션에서 딥링크를 사용해야 할 때 android navigation jetpack에서 딥링크기능을 제공한다.
먼저 manifest에 navigation요소를 추가해준다.
자세한 내용은 여기에서 확인할 수 있다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application ... >
<activity name=".MainActivity" ...>
...
<nav-graph android:value="@navigation/nav_graph" />
...
</activity>
</application>
</manifest>
nav-graph요소를 application의 activity에 정의해준다.
그 다음 nav-graph파일에서 deeplink요소를 추가해준다.
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
tools:layout="@layout/a">
<deeplink app:url="www.example.com"
app:action="android.intent.action.MY_ACTION"
app:mimeType="type/subtype"/>
</fragment>
필자는
<deepLink
android:autoVerify="true"
app:uri="faireran.com/?code={code}" />
이렇게 선언하였다 매개변수 code를 받기위해 해당uri로 넣었고
autoVerify에 대한 내용은 여기를 참고하면 된다.
그 다음
Firebase.dynamicLinks
.getDynamicLink(intent)
.addOnSuccessListener(this) { pendingDynamicLinkData ->
// Get deep link from result (may be null if no link is found)
var deepLink: Uri? = null
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
if (pendingDynamicLinkData != null) {
deepLink = pendingDynamicLinkData.link
Timber.d("deepLink = $deepLink")
if (deepLink != null) {
navController.navigate(deepLink)
}
}
}
.addOnFailureListener(this) { e -> Timber.w( "getDynamicLink:onFailure $e") }
}
firebase에서 받은 dynamiclink를 navController.navigation에 넣어주면 해당 딥링크를 네비게이션에서 받아 deeplink가 정의된 fragment로 이동하게 된다.