앱 링크의 인텐트 필터 추가

앱 링크는 HTTP 또는 HTTPS 스키마를 사용하고 Android에서 웹사이트와 연결된 것으로 확인되는 딥 링크입니다. 앱 링크를 처리하도록 등록하려면 다음 단계를 따르세요.

  1. 웹사이트 도메인 또는 URL을 지정하는 인텐트 필터를 앱 매니페스트에 하나 이상 추가합니다.
  2. 인텐트 필터 요소에 autoVerify="true"attribute를 추가합니다. 이렇게 하면 시스템에서 웹사이트의 assetlinks.json 구성에 대해 스키마 및 호스트 도메인을 확인하도록 시도해야 함을 시스템에 알립니다.
  3. 웹사이트 연결을 선언합니다.

다음은 스키마 및 호스트와 autoVerify="true"가 포함된 앱 링크 선언의 예입니다.

<activity
    android:name=".MainActivity"
    android:exported="true"
    ...>
    <!-- Make sure you explicitly set android:autoVerify to "true". -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <!-- If a user clicks on a link that uses the "http" scheme, your
             app should be able to delegate that traffic to "https". -->
        <!-- Do not include other schemes, as this will prevent verification. -->
        <data android:scheme="http" />
        <data android:scheme="https" />

        <!-- Include one or more domains that should be verified. -->
        <data android:host="www.example.com" />
        <data android:host="*.example.com" />
    </intent-filter>
</activity>

코드 관련 핵심 사항

  • AutoVerify: android:autoVerify="true" 속성은 앱 링크에 필요합니다. 이 속성은 앱과 <data> 태그에 지정된 스키마 및 도메인 간의 연결을 확인하도록 시도해야 함을 시스템에 알립니다. 확인 가능한 모든 인텐트 필터에 autoVerify="true"를 추가하는 것이 좋습니다.
  • 데이터 요소: 각 앱 링크 인텐트 필터에는 확인 가능한 웹사이트 도메인과 일치하는 스키마 및 호스트 형식을 지정하는 <data> 요소가 하나 이상 포함되어야 합니다.
  • 스키마: 인텐트 필터에는 <data> 스키마 모두에 httphttps 요소가 포함되어야 합니다.
  • 호스트: 필요에 따라 <data> 요소를 추가하여 하나 이상의 호스트를 일치시킬 수 있습니다. 와일드 카드 (*)를 사용하여 여러 하위 도메인 (예: *.example.com)을 일치시킵니다. 시스템은 웹사이트의 assetlinks.json 파일에 대해 각 호스트를 확인하려고 시도합니다. 경로 수준 라우팅은 assetlinks.json 파일에서 처리해야 합니다 (아래 권장사항 섹션 참고).

  • 여러 호스트: 여러 호스트 도메인을 선언하면 시스템 (Android 12 이상)에서 각 도메인을 확인하려고 시도합니다. 호스트가 확인되면 앱 이 확인된 호스트의 링크에 대한 기본 핸들러가 됩니다. Android 11 이하에서는 호스트 하나라도 확인할 수 없으면 확인이 실패합니다.

  • 여러 인텐트 필터: 고유한 URL (예: 스키마와 호스트의 특정 조합)을 선언하려는 경우 별도의 필터를 만드는 것이 중요합니다. 동일한 인텐트 필터의 여러 <data> 요소가 함께 병합되어 결합된 속성의 모든 변형을 나타내기 때문입니다.

매니페스트 필터 규칙 고려사항

Android 15 이상에서 동적 앱 링크와 함께 사용할 필터를 설정하는 경우 서버 측 assetlinks.json 파일에 선언된 동적 규칙이 앱 매니페스트에서 정적으로 선언하는 URL 규칙의 범위를 확장할 수 없다는 점을 기억하는 것이 중요합니다.

따라서 이 방법을 사용하는 것이 좋습니다.

  • 앱 매니페스트에서 스키마와 도메인만 선언하는 등 가능한 가장 광범위한 범위를 설정합니다.
  • 경로 수준 라우팅과 같은 추가 구체화를 위해 서버 측 assetlinks.json 규칙을 사용합니다.

이 이상적인 구성을 사용하면 앱 매니페스트에서 설정한 광범위한 범위 내에 맞게 조정된다는 것을 알고 필요에 따라 assetlinks.json 파일에 새 앱 링크 경로를 동적으로 추가할 수 있습니다.

여러 호스트의 앱 링크 지원

시스템은 앱의 URL 인텐트 필터의 데이터 요소에 지정된 호스트를 해당 인텐트 필터의 각 웹 도메인에서 호스팅되는 디지털 애셋 링크 파일에 대해 확인할 수 있어야 합니다. 확인이 실패하면 시스템은 기본적으로 표준 동작을 사용하여 인텐트를 해결합니다(앱 콘텐츠의 딥 링크 만들기의 설명 참고). 그러나 앱은 앱의 다른 인텐트 필터에 정의된 URL 패턴 중 어느 것에 대해서도 기본 핸들러로 계속 확인할 수 있습니다.

예를 들어 다음 인텐트 필터가 있는 앱은 assetlinks.json 파일이 https://www.example.com/.well-known/assetlinks.json에 있지만 https://www.example.net/.well-known/assetlinks.json에는 없는 경우 에 대해서만 확인을 통과합니다.https://www.example.com

<application>

  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="http" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
    </intent-filter>
  </activity>
  <activity android:name="SecondActivity">
    <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="https" />
     <data android:host="www.example.net" />
    </intent-filter>
  </activity>

</application>

여러 하위 도메인에서 앱 링크 지원

디지털 애셋 링크 프로토콜은 인텐트 필터에 있는 하위 도메인을 별도의 고유 호스트로 취급합니다. 따라서 인텐트 필터에 여러 하위 도메인이 있는 호스트가 여러 개 나열되어 있다면 각 도메인에 유효한 assetlinks.json을 게시해야 합니다. 예를 들어, 다음 인텐트 필터에는 www.example.commobile.example.com이 허용된 인텐트 URL 호스트로 포함됩니다. 따라서 유효한 assetlinks.jsonhttps://www.example.com/.well-known/assetlinks.jsonhttps://mobile.example.com/.well-known/assetlinks.json 모두에 게시해야 합니다.

<application>
  <activity android:name="MainActivity">
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
      <data android:host="mobile.example.com" />
    </intent-filter>
  </activity>
</application>

또는, 와일드 카드 (예: *.example.com)로 호스트 이름을 선언하는 경우 루트 호스트 이름 (example.com)에 assetlinks.json 파일을 게시해야 합니다. 예를 들어, 다음 인텐트 필터가 있는 앱은 assetlinks.json 파일이 https://example.com/.well-known/assetlinks.json에 게시되는 한 example.com의 하위 이름 (예: foo.example.com)과 관련된 인증을 통과합니다.

<application>
  <activity android:name="MainActivity">
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:host="*.example.com" />
    </intent-filter>
  </activity>
</application>

동일한 도메인과 연결된 여러 앱 확인

각각 같은 도메인과 연결된 앱을 여러 개 게시하면 각각 성공적으로 확인될 수 있습니다. 그러나 앱의 라이트 및 전체 버전과 마찬가지로 앱이 똑같은 도메인 호스트 및 경로를 확인할 수 있다면 가장 최근에 설치된 앱만 도메인의 웹 인텐트를 확인할 수 있습니다.

이러한 경우 필요한 패키지 공개 상태가 있다면 사용자 기기에서 충돌 가능성이 있는 앱을 확인합니다. 그런 다음 앱에서, 호출 결과가 포함된 맞춤 선택기 대화상자를 표시합니다. queryIntentActivities 사용자는 대화상자에 표시되는 일치하는 앱 목록에서 선호하는 앱을 선택할 수 있습니다.