iOS SDK - 딥 링크 지원

문서

딥링킹 지원 추가

딥링크는사용자를 앱 내의 특정 콘텐츠로 연결합니다. 사용자가 앱이 설치된 기기에서 딥링크를 탭하면 앱이 제품 페이지나 특정 경험 등 의도한 콘텐츠로 바로 연결됩니다.

Singular 추적 링크는 표준 딥링킹(설치된 앱의 경우)과 디퍼드 딥링킹(신규 설치의 경우)을 모두 지원합니다. 자세한 내용은 딥링킹 FAQSingular 링크 FAQ를 참조하세요.


요구 사항

전제 조건

앱에 딥링킹을 사용하려면 Singular 링크 사전 요구 사항을완료하세요.

필수 구성 단계:

  • 연결된 도메인: Xcode에서 서명 및 기능 > 연결된 도메인에Singular 사용자 지정 하위 도메인을 추가합니다.
  • URL 유형: 정보 > URL 유형에서 URL 유형에 앱 체계를 추가합니다.
  • Singular 플랫폼: Singular 플랫폼의 페이지에서 Apple 개발자 팀 ID스키마를 추가합니다.

참고:

  • 참고: 앱이 이미 iOS 유니버설 링크를 사용하도록 구성된 경우 유니버설 링크 도메인은 연관된 도메인에 이미 존재하며 그대로 유지될 수 있습니다. 이 도메인은 아래의 고급 섹션에 명시된 대로 지원되는 도메인 구성 옵션에 추가해야 합니다.
  • 또한 Singular가 마케팅 캠페인의 어트리뷰션을 추적하고 이러한 캠페인의 딥링크를 처리할 수 있도록 Singular 사용자 지정 링크 도메인을 포함해야 합니다.

Singular 링크 핸들러 구현

Singular 링크 핸들러는 앱이 열릴 때 Singular 추적 링크에서 딥링크, 디퍼드 딥링크 및 패스스루 파라미터를 검색하는 콜백 메커니즘을 제공합니다.

사용 가능한 파라미터

  • 딥링크: 링크를 클릭하는 사용자의 앱 내 목적지 URL입니다.
  • 디퍼드 딥링크: 링크를 클릭한 후 앱을 설치하는 사용자를 위한 목적지 URL
  • 패스스루: 추가 컨텍스트를 위해 추적 링크를 통해 전달되는 사용자 지정 데이터
  • URL 파라미터: 추적 링크 URL의 모든 쿼리 파라미터

SDK 구성

구성에 Singular링크 핸들러 추가하기

들어오는 딥링크 및 디퍼드 딥링크 데이터를 처리하도록 SDK 초기화 중에 SingularLinkHandler를 구성합니다.

SwiftObjective-C
func getConfig() -> SingularConfig? {
    // Create config with API credentials
    guard let config = SingularConfig(apiKey: "SDK_KEY", andSecret: "SDK_SECRET") else {
        return nil
    }
    
    // Set deep link handler
    config.singularLinksHandler = { params in
        self.handleDeeplink(params: params)
    }
    
    return config
}

func handleDeeplink(params: SingularLinkParams?) {
    // Get Deeplink data from Singular Link
    let deeplink = params?.getDeepLink()
    let passthrough = params?.getPassthrough()
    let isDeferred = params?.isDeferred()
    let urlParams = params?.getUrlParameters()
    
    print("Deeplink: \(deeplink ?? "null")")
    print("Passthrough: \(passthrough ?? "null")")
    print("Is Deferred: \(isDeferred ?? false)")
    
    // Handle deep link routing
    if let url = deeplink {
        handleDeepLinkRouting(url: url, isDeferred: isDeferred ?? false)
    }
}

참고: 싱귤래러링크 핸들러는 앱이 싱귤래러 링크를 통해 열릴 때만 트리거됩니다. 자세한 내용은 Singular 링크 FAQ를 참조하세요.


핸들러 동작

Singular링크 핸들러는 앱이 새로 설치되었는지 또는 이미 설치되었는지에 따라 다르게 동작합니다.

새로 설치(디퍼드 딥링크)

새로 설치한 경우 앱이 실행될 때 오픈 URL이 존재하지 않습니다. 추적 링크에 딥링크 또는 디퍼드 딥링크 값이 포함되어 있는지 확인하기 위해 Singular 어트리뷰션이 완료됩니다.

디퍼드 딥링크 흐름:

  1. 사용자가 딥링크 값으로 구성된 Singular 트래킹 링크를 클릭합니다.
  2. 사용자가 앱을 설치하고 처음 실행합니다.
  3. Singular SDK가 첫 번째 세션을 Singular 서버로 전송합니다.
  4. 어트리뷰션이 트래킹 링크에서 딥링크를 식별하고 어트리뷰션을 완료합니다.
  5. 딥링크 값이 isDeferred = true를 사용하여 SingularLinkHandler로 반환됩니다.

디퍼드 딥링크 테스트:

  1. 테스트 기기에서 앱을 제거합니다(현재 앱이 설치되어 있는 경우).
  2. 기기에서 IDFA를 재설정합니다(설정 > 개인정보 > Apple 광고 > 광고 식별자 재설정).
  3. 기기에서 Singular 추적 링크를 클릭합니다(딥링크 값으로 구성되었는지 확인).
  4. 앱을 설치하고 엽니다.

어트리뷰션이 성공적으로 완료되고 디퍼드 딥링크 값이 Singular링크핸들러에 전달됩니다.

프로 팁: 다른 번들 식별자(예: com.example.prod 대신 com.example.dev )를 사용하는 개발 빌드로 딥링크를 테스트하는 경우, 개발 앱의 번들 식별자에 맞게 추적 링크를 구성하세요. 테스트 링크를 클릭한 후 앱 스토어에서 프로덕션 앱을 다운로드하지 않고 Xcode 또는 TestFlight를 통해 개발 빌드를 기기에 직접 설치합니다.


이미 설치됨(즉시 딥 링크)

앱이 이미 설치된 경우, Singular 링크를 클릭하면 iOS 유니버설 링크 기술을 사용하여 앱이 즉시 열립니다.

즉시 딥링크 흐름:

  1. 사용자가 Singular 추적 링크를 클릭합니다.
  2. iOS는 전체 Singular 트래킹 링크가 포함된 오픈 URL을 제공합니다.
  3. SDK 초기화 중에 Singular는 NSUserActivity 또는 URL을 파싱합니다.
  4. Singular가 딥링크와 패스스루 값을 추출합니다.
  5. 값은 isDeferred = false를 사용하여 SingularLinkHandler를 통해 반환됩니다.

패스스루 매개변수

패스스루 매개변수를 사용하여 추적 링크 클릭에서 추가 데이터를 캡처합니다.

트래킹 링크에 패스스루 파라미터가 포함된 경우, Singular링크핸들러의 passthrough 파라미터에 해당 데이터가 포함됩니다. 캠페인 메타데이터, 사용자 세분화 데이터 또는 앱에 필요한 사용자 지정 정보를 캡처하는 데 이 파라미터를 사용합니다.

SwiftObjective-C
func handleDeeplink(params: SingularLinkParams?) {
    // Extract passthrough data
    if let passthroughData = params?.getPassthrough() {
        // Parse JSON passthrough data
        if let data = passthroughData.data(using: .utf8),
           let jsonData = try? JSONSerialization.jsonObject(with: data) as? [String: Any] {
            
            let campaignId = jsonData["campaign_id"] as? String
            let userSegment = jsonData["segment"] as? String
            
            print("Campaign ID: \(campaignId ?? "unknown")")
            print("User Segment: \(userSegment ?? "unknown")")
        }
    }
}

URL 파라미터

getUrlParameters() 메서드를 사용하여 추적 링크 URL에서 모든 쿼리 파라미터를 캡처합니다.

Singular링크핸들러는 추적 링크의 모든 URL 파라미터에 대한 액세스를 제공하여 사용자 지정 파라미터 및 UTM 태그에 대한 완전한 액세스를 제공합니다.

SwiftObjective-C
func handleDeeplink(params: SingularLinkParams?) {
    // Get all URL parameters
    if let urlParams = params?.getUrlParameters() {
        for (key, value) in urlParams {
            print("Parameter: \(key) = \(value)")
        }
        
        // Access specific parameters
        if let utmSource = urlParams["utm_source"] as? String {
            print("UTM Source: \(utmSource)")
        }
        
        if let promoCode = urlParams["promo"] as? String {
            print("Promo Code: \(promoCode)")
        }
    }
}

추적 링크 예시:
https://yourapp.sng.link/A1b2c/abc123?_dl=myapp://product/123&utm_source=facebook&promo=SALE2024

Singular링크 핸들러는 getUrlParameters() 메서드를 통해 utm_sourcepromo 을 포함한 모든 파라미터에 대한 액세스를 제공합니다.


고급 구성

어트리뷰션 추적을 위해 구글 광고 및 페이스북과 같은 타사 파트너의 유니버설 링크를 지원합니다.

Singular iOS SDK 버전 12.0.3 이상에서는 기본적으로 비Singular 유니버설 링크가 지원됩니다.

이전 버전의 SDK에서 타사 딥링크를 지원하려면다음과 같이하세요:

  • Singular SDK가 초기화될 때마다 모든 관련 도메인( sng.link 제외)을 Config 개체의 supportedDomains 구성 옵션에 추가합니다.
  • 이렇게 하면 타사 딥링크 동작은 허용되지만 딥링크에 대한 어트리뷰션은 허용되지 않습니다. 어트리뷰션의 경우 여전히 Singular 추적 링크를 사용해야 합니다.
  • 지원되는 도메인 기능은 유니버설 링크에 대해 앱을 구성하고 현재 도메인에서 자체 AASA 파일을 호스팅하고 있다고 가정합니다.
SwiftObjective-C
func getConfig() -> SingularConfig? {
    guard let config = SingularConfig(apiKey: "SDK_KEY", andSecret: "SDK_SECRET") else {
        return nil
    }
    
    // Add supported domains for third-party Universal Links
    config.supportedDomains = [
        "subdomain.mywebsite.com",
        "anothersubdomain.myotherwebsite.com"
    ]
    
    return config
}

이메일 캠페인 어트리뷰션을 위해 이메일 서비스 제공업체(ESP)가 제공하는 유니버설 링크를 사용하도록 설정합니다.

ESP 도메인은 HTTPS를 사용해야 합니다. Apple은 iOS 앱이 리디렉션 없이 HTTPS 사용 엔드포인트에서 apple-app-site-association 파일을 가져올 것을 요구합니다. 사이트의 DNS에 DNS 구성이 필요할 수 있으므로 앱에서 이 파일을 호스팅하는 방법을 ESP에 문의하세요.

ESP 도메인을 지원하려면 Singular SDK를 초기화할 때마다 구성 개체의 espDomains 구성 옵션에 사용자 지정 추적 도메인을 추가하세요.

SwiftObjective-C
func getConfig() -> SingularConfig? {
    guard let config = SingularConfig(apiKey: "SDK_KEY", andSecret: "SDK_SECRET") else {
        return nil
    }
    
    // Add ESP domains for email campaign tracking
    config.espDomains = ["links.mywebsite.com"]
    
    return config
}