이메일 및 SMS에서 딥링크 사용 및 구성 deeplinks

이 페이지에서: 전자 메일 및 SMS 콘텐츠에서 딥링크를 작성하고, Adobe Journey Optimizer에서 구성하고, 수신자가 올바른 인앱 화면에 도달하도록 iOS 및 Android 앱에서 추적된 링크를 처리하는 방법에 대해 알아봅니다.

딥 링크를 사용하면 이메일 또는 SMS 메시지에서 수신자를 모바일 앱의 특정 화면 또는 콘텐츠로 안내할 수 있습니다. 웹 브라우저나 앱스토어를 통해 라우팅하지 않고도 의도한 인앱 여정으로 바로 이동할 수 있으므로 사용자가 브랜드에 맞게 적절한 작업을 수행할 수 있습니다.

수신자가 딥링크를 클릭하면 의도한 인앱 콘텐츠로 바로 이동합니다. 완료한 경우:

NOTE
Adobe Journey Optimizer은(는) 추적된 URL(/ee/v1/mclick/*)을 사용하여 iOS 및 Android 모두에 대한 딥링크를 지원하여 호환성과 클릭 추적을 보장합니다.

딥링크 작성 authoring

CAUTION
이 페이지에서 구성모바일 앱 구현 단계를 완료하지 않으면 딥링크가 작동하지 않습니다.

이메일 authoring-email

이메일 메시지의 경우 딥 링크를 삽입하는 두 가지 옵션이 있습니다.

  • 전자 메일 Designer: 링크 추적이 활성화되어 있는지 확인. 연결할 요소(텍스트, 단추 또는 이미지)를 선택하고 상황별 도구 모음에서 링크 삽입​을 클릭한 다음 딥링크​를 선택하여 딥링크 URL을 입력합니다. 링크 삽입에 대한 자세한 정보

  • Personalization 편집기(코드): 다음 코드 조각을 사용하여 HTML에 바로 딥링크를 삽입합니다.

    code language-html
    <a class="arc-link" data-nl-type="DEEPLINK" href="<<deeplink_url>>" id="acr-link-7821368" style="text-decoration:underline;" target="_blank" data-tracking-type="DEEPLINK">Click Here</a>
    
    note tip
    TIP
    <<deeplink_url>>을(를) 실제 딥링크 URL로 바꾸고 충돌을 방지하려면 각 블록에 대해 고유한 id을(를) 사용하십시오.

SMS authoring-sms

SMS의 경우 딥링크는 개인화 편집기에서 Url 도우미 함수를 사용하여 작성됩니다. 이 섹션에서 SMS 콘텐츠에 링크를 추가하는 방법을 알아보세요.

SMS 콘텐츠에 딥링크를 삽입하려면 다음 구문을 사용합니다.

{{url originalUrl='<<url>>' type='DEEPLINK' action='CLICK'}}
TIP
<<url>>을(를) 실제 딥링크 URL로 바꾸십시오.

Journey Optimizer의 구성 configuration

모바일 앱용 이메일 및 SMS에서 딥 링크를 사용하려면 아래 구성 단계를 완료하십시오.

NOTE
이 섹션은 범용 링크(iOS)앱 링크(Android)(HTTPS 기반 딥링크)를 사용하는 경우에 적용됩니다.
  1. Journey Optimizer에서 딥링크가 활성화된 하위 도메인을 위임합니다. 자세히 알아보기

  2. 하위 도메인에서 iOS용 AASA 파일 및 Android용 assetLinks.json 파일을 호스팅합니다. 자세한 내용은 Adobe 고객 지원 센터 또는 Adobe 담당자에게 문의하십시오.

    • AASA(iOS)의 1}:

      • 위임된 하위 도메인
      • 앱 번들 ID
    • Android(assetLinks.json)의 경우:

      • 위임된 하위 도메인
      • 앱 번들 ID
      • SHA-256 인증서 지문
IMPORTANT
Adobe 인프라를 통한 딥링크는 SMS 캠페인의 전자 메일 추적 설정 또는 작업 추적 섹션에서 메시지에 대해 링크 추적이 활성화되어 있을 때 적용됩니다. 추적된 딥링크 클릭은 Adobe에서 호스팅 및 확인하는 /ee/v1/mclick/*의 URL을 사용합니다.
추적되지 않는 링크의 경우 Adobe 시스템을 통해 URL이 다시 작성되지 않습니다. 범용 링크 또는 앱 링크를 자체 도메인 및 호스팅에 구성하여 해당 링크가 의도한 대로 앱을 열도록 해야 합니다.

모바일 앱 구현 mobile-implementation

이 섹션에서는 일반적인 HTTPS 설정(범용 링크 및 앱 링크)에서 단일 URL이 다음을 수행할 수 있도록 Adobe Journey Optimizer과(와) 함께 모바일 딥링크를 구현하는 방법을 설명합니다.

  • 앱이 설치되면 모바일 앱 내의 특정 화면을 엽니다. 또는
  • 앱이 설치되지 않은 경우 웹 사이트를 대체 항목으로 엽니다.

메시지에 대해 링크 추적이 활성화되면 Journey Optimizer은(는) 이러한 클릭을 계속 추적하여 보고에 포함시키며, 메시지에서 실행하는 경우 콘텐츠 실험에서 사용할 수 있습니다.

이 섹션에서는 딥링크에 대한 일반적인 구현 패턴을 제공합니다. 정확한 설정은 앱 아키텍처 및 라우팅 프레임워크에 따라 다릅니다.

iOS(범용 링크) ios-implementation

  1. Xcode에서 서명 및 기능 > + 기능 > 관련 도메인​을 통해 대상을 선택합니다.

  2. 위임된 하위 도메인에 대한 항목을 추가합니다. 예:

    code language-text
    applinks:www.mybusiness.com
    applinks:data.email.mybusiness.com
    
  3. 앱에서 범용 링크를 처리하고 응답 헤더에서 원래 링크를 가져옵니다.

    accordion
    예: iOS 13+(장면 포함)
    code language-swift
    class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    
        func scene(_ scene: UIScene,
                  continue userActivity: NSUserActivity) {
            guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
                  let incomingURL = userActivity.webpageURL else {
                return
            }
    
            handleUniversalLink(url: incomingURL)
        }
    
        private func handleUniversalLink(url: URL) {
            // Only handle AJO tracked mobile clicks
            guard url.host == "data.email.mybusiness.com",
                  url.path.hasPrefix("/ee/v1/mclick") else {
                // Could also handle direct www.mybusiness.com links here
                return
            }
    
            resolveTrackedUrlAndRoute(url)
        }
    
        private func resolveTrackedUrlAndRoute(_ trackedUrl: URL) {
            var request = URLRequest(url: trackedUrl)
            request.httpMethod = "GET"
    
            URLSession.shared.dataTask(with: request) { _, response, error in
                guard error == nil,
                      let httpResponse = response as? HTTPURLResponse,
                      let locationValue = httpResponse.allHeaderFields["Location"] as? String,
                      let finalUrl = URL(string: locationValue) else {
                    return
                }
    
                DispatchQueue.main.async {
                    self.routeToDestination(finalUrl)
                }
            }.resume()
        }
    
        private func routeToDestination(_ url: URL) {
            // Example: map URL paths to screens
            // https://www.mybusiness.com/dashboard/offers/coupons
            // → OffersViewController for Coupons
        }
    }
    
IMPORTANT
앱은 mclick URL에서 GET​을 수행하고 Location 헤더를 읽은 다음 final URL을 기반으로 라우팅해야 합니다.
Safari에서 mclick URL을 열지 마십시오. 딥링크의 목적을 무시합니다.

Android(앱 링크) android-implementation

  1. Android 앱에 앱 링크 의도 필터를 추가합니다.

    code language-xml
    <activity
        android:name=".DeepLinkActivity"
        android:exported="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" />
    
            <data
                android:scheme="https"
                android:host="data.email.mybusiness.com"
                android:pathPrefix="/ee/v1/mclick" />
        </intent-filter>
    
    </activity>
    
  2. 딥링크 핸들러를 구현합니다.

    accordion
    코틀린에서:
    code language-kotlin
    class DeepLinkActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            val trackedUri = intent?.data
            if (trackedUri == null ||
                trackedUri.host != "data.email.mybusiness.com" ||
                !trackedUri.path.orEmpty().startsWith("/ee/v1/mclick")) {
                finish()
                return
            }
    
            resolveTrackedUrlAndRoute(trackedUri)
        }
    
        private fun resolveTrackedUrlAndRoute(trackedUri: Uri) {
            lifecycleScope.launch(Dispatchers.IO) {
                try {
                    val finalUrl = followRedirect(trackedUri.toString())
                    withContext(Dispatchers.Main) {
                        routeToDestination(finalUrl)
                        finish()
                    }
                } catch (e: Exception) {
                    // Optionally log error, fallback to browser
                    finish()
                }
            }
        }
    
        private fun followRedirect(trackedUrl: String): Uri {
            val client = OkHttpClient.Builder()
                .followRedirects(false) // We want to read Location ourselves
                .build()
    
            val request = Request.Builder()
                .url(trackedUrl)
                .get()
                .build()
    
            client.newCall(request).execute().use { response ->
                val location = response.header("Location")
                    ?: throw IllegalStateException("Missing Location header")
                return Uri.parse(location)
            }
        }
    
        private fun routeToDestination(finalUri: Uri) {
            // Example: interpret https://www.mybusiness.com/dashboard/offers/coupons
            // and open the correct Activity / Fragment
        }
    }
    
IMPORTANT
iOS과 마찬가지로 앱은 mclick URL을 호출하고 Location 헤더를 사용하여 최종 대상을 결정해야 합니다.
리디렉션 처리를 제어하고 필요한 경우 분석을 정확하게 기록할 수 있도록 followRedirects(false)을(를) 사용합니다.
라우팅 논리는 앱별로 다르므로 URL에서 화면으로의 명확한 매핑을 정의합니다.
  • 안정적인 경로 사용: 앱 UI 변경에 탄력적인 경로를 선호합니다(예: /tab/3/view/2 대신 /account/orders).
  • 추적된 경로에 대한 계정: 링크 추적이 활성화되면 클릭한 링크는 추적된 경로 패턴(예: /ee/v1/mclick/)을 사용할 수 있습니다. 추적된 링크를 확인한 후 라우터가 최종 URL을 구문 분석할 수 있는지 확인합니다.
  • 매개 변수를 예측 가능한 상태로 유지: 일관된 매개 변수 체계를 정의합니다(예: ?orderId=12345).
  • URL에 중요한 데이터를 사용하지 마십시오: 딥링크 URL에 직접 비밀 또는 개인 데이터를 넣지 마십시오.
  • 딥링크를 테스트하십시오: 증명을 보내고 앱이 설치된 장치에서 딥링크를 클릭합니다.
  • 실제 장치에서 유효성 검사: 범용 링크 및 추적된 링크 확인 동작은 시뮬레이터보다 실제 장치에서 유효성을 검사하는 데 더 안정적입니다.
  • 앱 측 라우팅 유효성 검사: 딥링크가 필요한 화면을 열지 않으면 앱 측 라우팅 및 URL 형식(호스트/경로/쿼리 및 URL 인코딩)을 검사하십시오.
  • 앱 초기화를 염두에 두십시오: 앱 링크/범용 링크 동작은 앱을 한 번 이상 설치하고 연 후에 가장 안정적입니다.

문제 해결 및 FAQ troubleshooting-faq

딥링크를 탭해도 앱이 열리지 않습니다.
  • 링크 추적이 활성화된 경우 추적된 클릭 경로를 포함하여 URL이 앱이 처리하도록 등록된 호스트 및 경로 패턴과 일치하는지 확인합니다(예: /ee/v1/mclick/ 아래의 경로).
  • iOS 범용 링크 및 Android 앱 링크의 경우 도메인 연결(AASA / assetlinks.json)이 올바르게 구성되어 연결할 수 있는지 확인하십시오.
  • 실제 장치에서 테스트합니다(시뮬레이터/에뮬레이터는 링크 연결에 대해 다르게 작동할 수 있음).
앱이 열리지만 예상 화면으로 이동하지 않습니다.
  • 앱 측 라우터가 URL 경로/쿼리를 올바르게 구문 분석하는지 확인합니다.
  • URL 인코딩 확인: 예약된 문자는 URL로 인코딩해야 합니다.
  • 매개 변수 이름 및 값이 라우터의 예상 값과 일치하는지 확인합니다.
앱이 설치되지 않으면 어떻게 됩니까?
  • 웹 사이트에서 동일한 HTTPS URL을 제공할 수 있는 경우 링크는 앱이 설치되지 않은 경우 대체 항목으로 웹 페이지를 열 수 있습니다(그에 따라 웹 대상 및 라우팅을 구성).
매개 변수에 특수 문자를 안전하게 포함하려면 어떻게 해야 합니까?
URL 인코딩 쿼리 매개 변수 값입니다. 이렇게 하면 게재 및 렌더링 문제가 줄어들고 앱의 구문 분석 오류가 방지됩니다.
엔드투엔드 테스트를 어떻게 수행합니까?
  • 딥링크로 증명을 만든 후 iOS 및 Android 장치(설치 및 설치되지 않은 시나리오)에서 클릭합니다.

  • 유효성 검사:

    • 최종 이메일 또는 SMS 링크 값(호스트/경로/쿼리)
    • OS 수준 연결(범용 링크/앱 링크를 사용하는 경우)
    • 인앱 라우팅 결과
나는 하나의 앱이 있지만 조직에 대한 하위 도메인은 다릅니다. 각 하위 도메인에 대해 AASA 및 assetLinks.json을 생성하도록 요청해야 합니까?
예. 위임된 모든 하위 도메인에서 딥링크를 만들려면 해당 기능을 지원해야 하는 각 하위 도메인에 대해 AASA 및 assetlinks.json 구성을 요청하십시오.
구성된 URL에서 딥링크 형식을 사용해야 합니까(예: appname://path)?
사용자 지정 URL 체계(예: appname://path)를 사용할 수 있지만 권장되는 접근 방식은 범용 링크 또는 앱 링크(https://)로서, 이 페이지의 구성 및 구현 섹션에 있는 HTTPS 기반 설정과 일치합니다.
Analytics용 모바일 앱에서 URL의 UTM 매개 변수를 사용할 수 있습니까?
예. Journey Optimizer에서 구성하는 UTM 매개 변수는 앱이 mclick URL에서 GET을 수행할 때 Location 헤더에 반환되는 최종 URL에 포함되므로 인앱 분석에 사용할 수 있습니다.
/ee/v1/click/ URL의 사용자 경험은 무엇입니까?
링크는 이 페이지에 설명된 mclick 흐름을 통해 앱 딥링크로 처리되지 않고, 장치의 기본 웹 브라우저(표준 클릭 추적 동작)에서 열립니다.
AI Knowledge Reference

This section contains structured knowledge intended to support interpretation, retrieval, and question answering related to this topic.

For complete understanding, this information should be combined with the documentation on this page. Neither source is intended to stand alone; the page describes the feature, while this section provides additional context that helps disambiguate terminology, intent, applicability, and constraints.

  • TL;DR: This page explains how to author deep links in email and SMS content, configure them in Journey Optimizer, and handle the tracked links in iOS and Android apps so recipients land on the right in-app screen.

Intents:

  • Author a deep link in email (Email Designer or Personalization editor code) and in SMS (Url helper function)
  • Complete the Journey Optimizer configuration for universal links (iOS) and app links (Android)
  • Implement mobile app handling of tracked mclick links in iOS and Android
  • Follow recommended practices and troubleshoot deep links that do not open the app or the expected screen
  • Test deep links end-to-end by sending a proof and clicking on real devices

Glossary:

  • Deep link: A link that takes recipients from an email or SMS message directly to a specific screen or content in a mobile app (product-specific)
  • Universal links (iOS) / App links (Android): HTTPS-based deep links the configuration on this page applies to (product-specific)
  • AASA / assetLinks.json: The association files hosted on your delegated subdomain for iOS (AASA) and Android (assetLinks.json) (product-specific)
  • /ee/v1/mclick/*: Tracked URLs that Adobe hosts and resolves for deep link clicks when link tracking is enabled (product-specific)

Guardrails:

  • Deep links will not work unless you complete both the configuration and the mobile app implementation steps on this page.
  • Deep linking is supported for both iOS and Android using tracked URLs (/ee/v1/mclick/*) for compatibility and click tracking.
  • The configuration section applies when you use universal links (iOS) and app links (Android), which are HTTPS-based deep links.
  • Tracked deep link clicks use URLs under /ee/v1/mclick/*, which Adobe hosts and resolves, and apply when link tracking is enabled for the message.
  • For non-tracked links, the URL is not rewritten through Adobe systems; you must configure universal links or app links on your own domains and hosting.
  • The app must perform a GET on the mclick URL and read the Location header, then route based on the final URL; do not simply open the mclick URL in a browser.
  • Hosting the AASA (iOS) and assetLinks.json (Android) files requires contacting Adobe Customer Care with the delegated subdomain and app bundle ID; Android also requires the SHA-256 certificate fingerprint.

Terminology:

  • Canonical name: Deep link — Acronym: n/a — variants: deeplink, Deeplink (Insert link option)
  • Synonyms: “universal links” (iOS) and “app links” (Android) = the HTTPS-based deep link setup
  • Do not confuse: “/ee/v1/mclick/*” (tracked deep link flow handled as an app deep link) ≠ “/ee/v1/click/” (opens in the device’s default web browser, standard click tracking)
  • Do not confuse: “tracked links” (rewritten through Adobe, use mclick) ≠ “non-tracked links” (not rewritten; configured on your own domains)

FAQ:

  • Q: What must be done before deep links work? — Complete both the configuration steps in Journey Optimizer and the mobile app implementation steps for iOS and Android.
  • Q: How should the app handle the tracked link? — Perform a GET on the mclick URL, read the Location header, and route based on the final URL; do not open the mclick URL directly in a browser.
  • Q: What happens if the app is not installed? — If the same HTTPS URL can be served by your website, the link can open a web page as a fallback.
  • Q: Are UTM parameters available in the app? — Yes; UTM parameters configured in Journey Optimizer are included in the final URL returned in the Location header.
  • Q: How do I test end-to-end? — Send a proof (create a proof with a deep link) and click it on iOS and Android devices, for both installed and not-installed scenarios, validating on real devices.
  • Q: Should I use a custom URL scheme like appname://path? — You can, but the recommended approach is a universal link or app link (https://) matching the HTTPS-based setup on this page.
recommendation-more-help
journey-optimizer-help