파이어베이스 딥링크 받아서 navigation 딥링크 처리하기

울늘·2022년 7월 10일
0

파이어 베이스 딥링크를 사용하는데 네비게이션에서 딥링크를 사용해야 할 때 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로 이동하게 된다.

profile
주니어 안드로이드 개발자입니다!

0개의 댓글