인자 외에도 딥 링크를 사용하여 앱의 목적지를 다른 앱에 노출할 수 있다. 이 섹션에서는 이전 섹션에서 생성한 경로에 대한 새로운 딥 링크를 추가하여, 앱 외부에서 ‘이름’을 통해 직접 개별 계좌로의 딥 링크를 활성화한다.

인텐트 필터 추가하기

시작하려면 AndroidManifest.xml에 딥 링크를 추가하자. VIEW 작업과 BROWSABLEDEFAULT <category>를 사용하여 RallyActivity에 대한 새 인텐트 필터를 생성해야 한다.

그런 다음 <data> 태그를 사용하여 scheme, hostpathPrefix를 추가한다.

이 코드랩은 딥 링크 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
카테고리: Compose

0개의 댓글

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.