네비게이션 딥링크
네비게이션에서는
외부에서 발생하고 url 을 이용한 암시적 딥링크,
알림이나 위젯등 내부에서 발생하고 PendingIntent 을 이용한 명시적 딥링크
두 가지가 존재한다.
1. 암시적 딥링크
딥링크 생성하기
암시적 딥링크는 네비게이션 툴에서 추가 할 수 있으며,
<fragment
android:id="@+id/fragment121"
android:name="com.onetwothree.navigationsample.Fragment121"
android:label="Fragment121">
<deepLink
android:id="@+id/deepLink2"
app:uri="page/fragment121" />
</fragment>
코드로는 위와 같이 작성하면 추가가 가능하다.
위의 경우는 fragment121 화면으로 이동하기 위해 "page/fragment121" 라는 딥링크를 설정하였다.
네비게이션의 딥링크는 앞에 scheme ( http, https ) 을 자동으로 붙여준다.
주의 할 점은 "app://page/fragment121" 식으로 작성한다고 "app" 이 scheme 으로 설정되지는 않는다.
scheme 은 무조건 http 아니면 https 이다.
변수 넘기기
딥링크 생성시에 "page/fragment121/{id}/{name}" 과 같은 방식으로 url을 수정하면 변수를 넘길 수 있다.
내가 넘긴 값과 함께 "android-support-nav:controller:deepLinkIntent" 란 키로 해당 딥링크에 대한 정보가 같이 내려온다.
딥링크 연결하기
<application
...
<activity android:name=".MainActivity">
...
<nav-graph android:value="@navigation/nav_graph" />
</activity>
</application>
딥링크가 있는 네비게이션 그래프를 위와 같은 방법으로 manifest 에 코드를 작성해주면 별 다른 설정없이 연결이 가능하다.
테스트 하기
adb shell am start -a android.intent.action.VIEW -d "http://page/fragment121" com.onetwothree.navigationsample
딥링크가 적용된 앱을 설치 후 터미널에서 테스트 해볼 수 있다.
"http://page/fragment121" 는 딥링크 주소
com.onetwothree.navigationsample 는 앱의 pacakge 명이다.
결과로 fragment121 화면이 열리는 것을 확인 할 수 있다.
대신 네비게이션 그래프안에 존재하는 모든 스택을 쌓아주진 않고 시작점만 스택에 들어온다.
( 뒤로 가면 네비게이션의 시작 부분으로 이동 )
2. 명시적 딥링크
명시적 딥링크는 위와 같이 알림을 눌러서 원하는 화면으로 가거나, 위젯등에서 앱을 열 필요가 있을 때 사용하면 된다.
사용하기
val pendingIntent = NavDeepLinkBuilder(context)
.setGraph(R.navigation.nav_graph)
.setDestination(R.id.fragment121)
.createPendingIntent()
val pendingIntent = findNavController().createDeepLink()
.setGraph(R.navigation.nav_graph)
.setDestination(R.id.fragment121)
.createPendingIntent()
명시적 딥링크 생성에는 NavDeepLinkBuilder
, NavController.createDeepLink
두 가지 방법이 있다.
graph, destination 만 설정해주면 원하는 대로 동작하는 것을 볼 수 있다.
만얀, graph 안에 존재하지 않는 destination 을 설정하면 에러가 나니 주의해야 한다.
'안드로이드' 카테고리의 다른 글
Android Espresso #2 - ViewMatcher, ViewAction, ViewAssertion (0) | 2020.06.25 |
---|---|
Android Espresso #1 - 시작 (0) | 2020.06.24 |
[And] navigation #1 - 기본 사용법 (1) | 2020.06.18 |
안드로이드 paging 3.0 #2 - LoadState (0) | 2020.06.16 |
안드로이드 Paging 3.0 #1 - 맛보기 (5) | 2020.06.13 |