6월 3일의 ⁠#Android11: 베타 버전 출시 행사에 참여하세요.

대상의 딥 링크 만들기

Android에서 딥 링크는 앱 내의 특정 대상으로 직접 이동할 수 있게 하는 링크입니다.

탐색 구성요소를 사용하면 명시적 딥 링크와 암시적 딥 링크라는 두 가지 유형의 딥 링크를 만들 수 있습니다.

명시적 딥 링크 만들기

명시적 딥 링크PendingIntent를 사용하여 사용자를 앱 내의 특정 위치로 이동시키는 딥 링크의 단일 인스턴스입니다. 예를 들어 명시적 딥 링크는 알림, 앱 바로가기, 앱 위젯의 일부로 나타날 수 있습니다.

사용자가 명시적 딥 링크를 통해 앱을 열면 작업 백 스택이 삭제되고 딥 링크 대상으로 대체됩니다. 그래프를 중첩하면 각 중첩 수준의 시작 대상, 즉 계층 구조에 있는 각 <navigation> 요소의 시작 대상도 스택에 추가됩니다. 즉, 사용자가 딥 링크 대상에서 뒤로 버튼을 누르면 마치 진입점에서 앱에 들어간 것처럼 탐색 스택을 다시 위로 탐색합니다.

아래 예에서와 같이 NavDeepLinkBuilder 클래스를 사용하여 PendingIntent를 구성할 수 있습니다. 제공된 컨텍스트가 Activity가 아닌 경우 생성자는 PackageManager.getLaunchIntentForPackage()를 기본 활동으로 사용하여 실행합니다(가능한 경우).

Kotlin

    val pendingIntent = NavDeepLinkBuilder(context)
        .setGraph(R.navigation.nav_graph)
        .setDestination(R.id.android)
        .setArguments(args)
        .createPendingIntent()
    

자바

    PendingIntent pendingIntent = new NavDeepLinkBuilder(context)
        .setGraph(R.navigation.nav_graph)
        .setDestination(R.id.android)
        .setArguments(args)
        .createPendingIntent();
    

기존 NavController가 있으면 NavController.createDeepLink()를 통해서도 딥 링크를 만들 수 있습니다.

암시적 딥 링크 만들기

암시적 딥 링크는 앱의 특정 대상을 가리키는 URI입니다. URI가 호출되면(예: 사용자가 링크를 클릭하는 경우) Android에서 해당하는 대상으로 앱을 열 수 있습니다.

암시적 딥 링크를 트리거할 때 백 스택의 상태는 암시적 IntentIntent.FLAG_ACTIVITY_NEW_TASK 플래그와 함께 실행되었는지 여부에 따라 다릅니다.

  • 플래그가 설정되면 작업 백 스택이 삭제되고 딥 링크 대상으로 대체됩니다. 명시적 딥 링크와 마찬가지로 그래프를 중첩하면 각 중첩 수준의 시작 대상, 즉 계층 구조에 있는 각 <navigation> 요소의 시작 대상도 스택에 추가됩니다. 즉, 사용자가 딥 링크 대상에서 뒤로 버튼을 누르면 마치 진입점에서 앱에 들어간 것처럼 탐색 스택을 다시 위로 탐색합니다.
  • 플래그가 설정되지 않으면 암시적 딥 링크가 트리거된 이전 앱의 작업 스택 상태로 남아있습니다. 이 경우 뒤로 버튼을 누르면 다시 이전 앱으로 돌아가는 반면 위로 버튼을 누르면 탐색 그래프 내 계층 구조의 상위 대상에서 앱 작업을 시작합니다.

탐색 편집기를 사용하여 다음과 같이 대상으로 연결되는 암시적 딥 링크를 만들 수 있습니다.

  1. 탐색 편집기의 Design 탭에서 딥 링크 대상을 선택합니다.
  2. Attributes 패널의 Deep Links 섹션에서 +를 클릭합니다.
  3. 표시되는 Add Deep Link 대화상자에서 URI를 입력합니다.

    다음 내용을 참고하세요.

    • 스키마가 없는 URI는 http 또는 https로 가정됩니다. 예를 들어 www.google.comhttp://www.google.comhttps://www.google.com 모두와 일치합니다.
    • {placeholder_name} 형식의 자리표시자는 1자 이상과 일치합니다. 예를 들어 http://www.example.com/users/{id}http://www.example.com/users/4와 일치합니다. 탐색 구성요소는 자리표시자 이름을 딥 링크 대상에 정의된 인수와 일치시켜 자리표시자 값을 적절한 유형으로 파싱하려고 시도합니다. 동일한 이름의 인수가 정의되어 있지 않으면 인수 값에 기본 String 유형이 사용됩니다.
    • .* 와일드 카드를 사용하면 0개 이상의 문자와 일치시킬 수 있습니다.
  4. (선택사항) Google에서 개발자가 URI의 소유자임을 확인하도록 하려면 Auto Verify를 선택합니다. 자세한 내용은 Android 앱 링크 확인을 참조하세요.

  5. Add를 클릭합니다. 선택한 대상에 딥 링크가 있음을 나타내는 링크 아이콘 이 대상 위에 표시됩니다.

  6. Text 탭을 클릭하여 XML 뷰를 전환합니다. 중첩된 <deepLink> 요소가 대상에 추가되었습니다.

    <deepLink app:uri="https://www.google.com" />
        

암시적 딥 링크를 사용하도록 설정하려면 앱의 manifest.xml 파일에도 추가해야 합니다. 아래 예에서와 같이 기존 탐색 그래프를 가리키는 활동에 단일 <nav-graph> 요소를 추가하세요.

    <?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> 요소를 생성된 <intent-filter> 요소로 대체하여 탐색 그래프의 모든 딥 링크와 일치시킵니다.

추가 리소스

탐색에 관한 자세한 내용은 다음 추가 리소스를 참조하세요.

샘플

Codelab

동영상