iOS 확장 디퍼드 딥링킹
개요
확장된 디퍼드 딥링킹을 사용하면 다음과 같은 특정 시나리오에서 새 사용자를 위한 딥링킹이 가능합니다.
- 관련 인스톨이 발생하는 경우에도 UDL이
NOT_FOUND
even though a relevant install occurred.
Main example for such a scenario:- 클릭과 인스톨 사이의 시간이 UDL 전환 확인 기간(15분)을 초과.
- 관련 인스톨이 발생하는 경우에도 UDL이
FOUND
을 반환하지만 딥 링크가 다음이 아닌 파라미터를 누락하는 경우.deep_link_value
anddeep_link_sub1-10
.
이러한 시나리오의 주요 예시:- 메타 광고나 트위터와 같은 SRN(셀프 리포팅 네트워크)에서 링크를 클릭.
- 딥링킹에 사용되는
deep_link_value
ordeep_link_sub1-10
가 없는 링크를 클릭. 예를 들어,deep_link_value
가 존재하기 전에 작성된 오래된 링크는 아직 사용 중입니다. - 클릭과 인스톨 사이의 시간이 UDL 전환 확인 기간(15분)을 초과.
UDL이 NOT_FOUND를 반환할 때 디퍼드 딥링킹을 허용하려면 NOT_FOUND
, onConversionDataSuccess
콜백이 디퍼드 딥링킹을 처리해야 하는지 여부를 확인해야 합니다.
onConversionDataSuccess
는 전환 데이터 가져오기(GCD) API의 일부입니다. 기본 목적은 디바이스 내부에서 변환 데이터를 수집하는 것입니다.
여기에 설명한 사용 사례에서 onConversionDataSuccess
는 모든 디퍼드 딥링킹 파라미터가 변환 데이터 위에 있는 콜백으로 전달된다는 사실을 활용합니다.
선행 조건
- 통합 딥링킹을 구현하여 디퍼드 딥링킹과 다이렉트 딥링킹을 모두 처리합니다.
- 다음
onConversionDataSuccess
을 구현하여 GCD API를 사용한 디퍼드 딥링킹을 처리합니다.
구현하기
onConversionDataSuccess
는 UDL이 처리하지 않은 디퍼드 딥링킹이 발생해야 하는 경우를 감지해야 합니다.자세한 코드 해부 참조
onConversionDataSuccess
는 콜백에 전달된 딥링킹 파라미터를 기반으로 디퍼드 딥링킹 대상으로 사용자를 라우팅하게 됩니다.
코드 예시
Code dissect
- 다음 전환 데이터 가져오기 API 대리자 구현:
AppsFlyerLibDelegate
.다음 메서드만 구현:
onConversionDataSuccess
andonConversionDataFail
.
메서드onAppOpenAttribution
andonAttributionFailure
는 UDL과 상호 배타적이며 호출되지 않습니다. - 디퍼드 딥링킹 시나리오를 감지하려면 다음과 같이 변환 데이터 페이로드를 필터링합니다.
af_status == Non-organic
is_first_launch == true
- 디퍼드 딥링킹이 감지되면 UDL에서 이미 처리된 케이스를 필터링합니다.
다음 예제에서 모든 링크에는 다음이 포함됩니다:deep_link_value
.
UDL은 디퍼드 딥링킹이 이미 처리되고 있음을 플래그로 알리는 것이 좋으며onConversionDataSuccess
는 건너뜁니다. onConversionDataSuccess
는 애플리케이션 내에서 사용자를 라우팅하는 데 사용되는 변환 데이터를 보유한 파라미터를 확인해야 합니다. 예시:fruit_name
다음 예시에서.- 디퍼드 딥링크 대상으로 사용자를 라우팅합니다.
Code snippet
extension AppDelegate: AppsFlyerLibDelegate {
// Handle Organic/Non-organic installation
func onConversionDataSuccess(_ data: [AnyHashable: Any]) {
ConversionData = data
print("onConversionDataSuccess data:")
for (key, value) in data {
print(key, ":", value)
}
if let conversionData = data as NSDictionary? as! [String:Any]? {
if let status = conversionData["af_status"] as? String {
if (status == "Non-organic") {
if let sourceID = conversionData["media_source"],
let campaign = conversionData["campaign"] {
NSLog("[AFSDK] This is a Non-Organic install. Media source: \(sourceID) Campaign: \(campaign)")
}
} else {
NSLog("[AFSDK] This is an organic install.")
}
if let is_first_launch = conversionData["is_first_launch"] as? Bool,
is_first_launch {
NSLog("[AFSDK] First Launch")
if !conversionData.keys.contains("deep_link_value") && conversionData.keys.contains("fruit_name"){
switch conversionData["fruit_name"] {
case let fruitNameStr as String:
NSLog("This is a deferred deep link opened using conversion data")
walkToSceneWithParams(fruitName: fruitNameStr, deepLinkData: conversionData)
default:
NSLog("Could not extract deep_link_value or fruit_name from deep link object using conversion data")
return
}
}
} else {
NSLog("[AFSDK] Not First Launch")
}
}
}
}
func onConversionDataFail(_ error: Error) {
NSLog("[AFSDK] \(error)")
}
}
⇲ Github 링크: Swift
테스트
중요 정보
다음 테스트 시나리오는 커스텀 파라미터를 포함하지만
deep_link_value
anddeep_link_sub1-10
파라미터는 포함하지 않는 링크에서 디퍼드 딥링킹을 처리하는 방법을 보여줍니다.
이 테스트 시나리오는 앞에서 설명한 모든 확장 디퍼드 딥링킹과도 관련이 있습니다.
Before you begin
- 앞에서 설명한 구현을 완료합니다.
- 테스트 기기 등록.
- 앱에서 디버그 모드 활성화를 수행합니다.
- 앱이 기기에 설치되어 있지 않은지 확인합니다.
The test link
기존 OneLink 링크를 사용하거나 마케터에게 테스트할 새 링크를 만들도록 요청할 수 있습니다. 짧은 원링크 URL과 긴 원링크 URL을 모두 사용할 수 있습니다.
링크에 애드혹 파라미터 추가
- 다음 예와 같이 링크의 도메인과 원링크 템플릿만 사용합니다.
https://onelink-basic-app.onelink.me/H5hv
. - 애플리케이션에서 예상한 대로
deep_link_value
anddeep_link_sub1-10
이외의 원링크 커스텀 파라미터를 추가합니다. - 파라미터는 쿼리 파라미터로 추가해야 합니다.
- 예:
https://onelink-basic-app.onelink.me/H5hv?my_inapp_dest=apples&my_inapp_value=23
- 예:
Perform the test
- 기기에서 링크를 클릭합니다.
- 원링크는 링크 설정에 따라 사용자를 앱 스토어 또는 웹사이트로 리디렉션합니다.
- 애플리케이션을 인스톨합니다.
중요 정보
- 애플리케이션이 개발 중이고 아직 스토어에 업로드되지 않은 경우 다음 이미지가 표시됩니다.
- Xcode 또는 사용하는 다른 IDE에서 애플리케이션을 설치합니다.
- 애플리케이션이 개발 중이고 아직 스토어에 업로드되지 않은 경우 다음 이미지가 표시됩니다.
- UDL은 디퍼드 딥링킹을 검색하고 인스톨을 클릭과 일치시키며 원링크 파라미터를
didResolveDeepLink
콜백으로 검색합니다. UDL은 라우팅 및 종료할 파라미터를 찾지 못합니다. onConversionDataSuccess
콜백은 커스텀 파라미터와 어트리뷰션 데이터를 모두 포함하는 변환 데이터를 사용하여 호출됩니다.onConversionDataSuccess
는 사용자를 애플리케이션 내부로 라우팅하기 위한 커스텀 파라미터를 설정합니다.
Expected logs results
다음 로그는 [디버그 모드가 활성화된 경우]에만 사용할 수 있습니다. (https://dev.appsflyer.com/hc/docs/integrate-ios-sdk#enabling-debug-mode)
-
SDK가 초기화되었습니다.
[AppsFlyerSDK] [com.apple.main-thread] AppsFlyer SDK version 6.6.0 started build
-
UDL API가 시작됩니다.
[AppsFlyerSDK] [com.appsflyer.serial] [DDL] Start DDL
-
UDL은 앱스플라이어 에 서비스쿼리를 보내 이 인스톨과 매치되는 항목을 쿼리합니다.
[AppsFlyerSDK] [com.appsflyer.serial] [DDL] URL: https://dlsdk.appsflyer.com/v1.0/ios/id1512793879?sdk_version=6.6&af_sig=c9a1d5b34d68e584d0db2a20f4049fb7cd2e785c3383bXXXXXXXXXXXXXXXXXXXXXXXX
-
UDL이 응답을 받고 호출
didResolveDeepLink
콜백status=FOUND
및 OneLink 링크 데이터:[AppsFlyerSDK] [com.appsflyer.serial] [DDL] Calling didResolveDeepLink with: {"af_sub4":"","click_http_referrer":"","af_sub1":"","click_event":{"af_sub4":"","click_http_referrer":"","af_sub1":"","af_sub3":"","deep_link_value":"","campaign":"","match_type":"probabilistic","af_sub5":"","campaign_id":"","media_source":"","af_sub2":""},"af_sub3":"","deep_link_value":"","campaign":"","match_type":"probabilistic","af_sub5":"","media_source":"","campaign_id":"","af_sub2":""}
-
GCD는 전환 데이터를 가져옵니다.
[AppsFlyerSDK] [com.appsflyer.serial] [GCD-B01] GCD 4.0 URL: https://gcdsdk.appsflyer.com/install_data/v4.0/id1512793879?devkey=s*****4&device_id=1672050642148-9221195
onConversionDataSuccess
는 변환 데이터를 입력하여 호출됩니다.
[AppsFlyerSDK] [com.appsflyer.serial] [GCD-A02] -[basic_app.AppDelegate onConversionDataSuccess:]:
{
...
is_first_launch=true,
...
fruit_amount=56,
fruit_name=apples,
...
af_status=Non-organic,
...
}
최신 데이터 약 2개월 전