인자 외에도 딥 링크를 사용하여 앱의 목적지를 다른 앱에 노출할 수 있다. 이 섹션에서는 이전 섹션에서 생성한 경로에 대한 새로운 딥 링크를 추가하여, 앱 외부에서 ‘이름’을 통해 직접 개별 계좌로의 딥 링크를 활성화한다.
인텐트 필터 추가하기
시작하려면 AndroidManifest.xml에 딥 링크를 추가하자. VIEW 작업과 BROWSABLE 및 DEFAULT <category>를 사용하여 RallyActivity에 대한 새 인텐트 필터를 생성해야 한다.
그런 다음 <data> 태그를 사용하여 scheme, host 및 pathPrefix를 추가한다.
이 코드랩은 딥 링크 URL로 rally://accounts/{name}를 사용한다.
AndroidManifest에서 “name” 인자를 선언할 필요가 없다. Navigation에서 인자로 파싱된다.
<activity
android:name=".RallyActivity"
android:windowSoftInputMode="adjustResize"
android:label="@string/app_name"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="rally" android:host="accounts" />
</intent-filter>
</activity>
딥 링크에 반응하기
이제 RallyActivity 내에서 들어오는 인텐트에 반응할 수 있다.
인자를 받기 위해 이전에 생성한 컴포저블도 새로 생성된 딥 링크를 받을 수 있다.
navDeepLink 기능을 사용하여 딥링크 목록을 추가한다. uriPattern을 전달하고, 위의 인텐트 필터에 대해 일치하는 uri를 제공한다. deepLinks 매개변수를 사용하여 생성된 딥 링크를 컴포저블에 전달한다.
val accountsName = RallyScreen.Accounts.name
composable(
"$accountsName/{name}",
arguments = listOf(
navArgument("name") {
type = NavType.StringType
},
),
deepLinks = listOf(navDeepLink {
uriPattern = "rally://$accountsName/{name}"
})
)
ADB를 통해 딥 링크 테스트 해보기
이제 앱에서 딥 링크를 처리할 준비가 되었다. 올바르게 작동하는지 테스트하려면 에뮬레이터 또는 실기기에 현재 버전의 Rally를 설치하고, 커맨드 라인을 열고 다음 커맨드를 실행하자.
adb shell am start -d "rally://accounts/Checking" -a android.intent.action.VIEW
이렇게 하면 checking 계좌로 직접 연결되며, 앱의 모든 계좌 이름에 적용된다.
다른 계좌도 접근해보자.
adb shell am start -d "rally://accounts/Car\ Savings" -a android.intent.action.VIEW
adb shell am start -d "rally://accounts/Home\ Savings" -a android.intent.action.VIEW
0개의 댓글