안드로이드 확장 디퍼드 딥링킹
개요
확장된 디퍼드 딥링킹을 사용하면 다음과 같은 특정 시나리오에서 새 사용자를 위한 딥링킹이 가능합니다.
- 관련 인스톨이 발생하는 경우에도 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
.
The Main example for such scenario is clicking a link that doesn't containdeep_link_value
ordeep_link_sub1-10
가 없는 링크를 클릭. 예를 들어,deep_link_value
가 존재하기 전에 작성된 오래된 링크는 아직 사용 중입니다.
UDL이 NOT_FOUND를 반환할 때 디퍼드 딥링킹을 허용하려면 NOT_FOUND
, onConversionDataSuccess
콜백이 디퍼드 딥링킹을 처리해야 하는지 여부를 확인해야 합니다.
onConversionDataSuccess
는 전환 데이터 가져오기(GCD) API의 일부입니다. 기본 목적은 디바이스 내부에서 변환 데이터를 수집하는 것입니다.
여기에 설명한 사용 사례에서 onConversionDataSuccess
는 모든 디퍼드 딥링킹 파라미터가 변환 데이터 위에 있는 콜백으로 전달된다는 사실을 활용합니다.
선행 조건
- 통합 딥링킹을 구현하여 디퍼드 딥링킹과 다이렉트 딥링킹을 모두 처리합니다.
- 다음
onConversionDataSuccess
GCD API를 사용한 디퍼드 딥링킹을 처리합니다.
구현하기
onConversionDataSuccess
는 UDL이 처리하지 않은 디퍼드 딥링킹이 발생해야 하는 경우를 감지해야 합니다.자세한 코드 해부 참조
onConversionDataSuccess
는 콜백에 전달된 딥링킹 파라미터를 기반으로 디퍼드 딥링킹 대상으로 사용자를 라우팅하게 됩니다.
코드 예시
Code dissect
- 다음 전환 데이터 가져오기 API 리스너 구현:
AppsFlyerConversionListener
.리스터의 모든 방법을 구현해야 합니다. 지어
onAppOpenAttribution
andonAttributionFailure
는 UDL과 상호 배타적이며 호출되지 않습니다. - 디퍼드 딥링킹 시나리오를 감지하려면 다음과 같이 변환 데이터 페이로드를 필터링합니다.
af_status == Non-organic
is_first_launch == true
- 디퍼드 딥링킹이 감지되면 UDL에서 이미 처리된 케이스를 필터링합니다.
다음 예제에서 모든 링크에는 다음이 포함됩니다:deep_link_value
.
UDL은 디퍼드 딥링킹이 이미 처리되고 있음을 플래그로 알리는 것이 좋으며onConversionDataSuccess
는 건너뜁니다. onConversionDataSuccess
는 애플리케이션 내에서 사용자를 라우팅하는 데 사용되는 변환 데이터를 보유한 파라미터를 확인해야 합니다. 예시:fruit_name
다음 예시에서.- 디퍼드 딥링크 대상으로 사용자를 라우팅합니다.
Code snippet
AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
@Override
public void onConversionDataSuccess(Map<String, Object> conversionDataMap) {
String status = Objects.requireNonNull(conversionDataMap.get("af_status")).toString();
if(status.equals("Non-organic")){
if( Objects.requireNonNull(conversionDataMap.get("is_first_launch")).toString().equals("true")){
Log.d(LOG_TAG,"Conversion: First Launch");
//Deferred deep link in case of a legacy link
if(conversionDataMap.containsKey("fruit_name")){
if (conversionDataMap.containsKey("deep_link_value")) { //Not legacy link
Log.d(LOG_TAG,"onConversionDataSuccess: Link contains deep_link_value, deep linking with UDL");
}
else{ //Legacy link
conversionDataMap.put("deep_link_value", conversionDataMap.get("fruit_name"));
String fruitNameStr = (String) conversionDataMap.get("fruit_name");
DeepLink deepLinkData = mapToDeepLinkObject(conversionDataMap);
goToFruit(fruitNameStr, deepLinkData);
}
}
} else {
Log.d(LOG_TAG,"Conversion: Not First Launch");
}
} else {
Log.d(LOG_TAG, "Conversion: This is an organic install.");
}
}
@Override
public void onConversionDataFail(String errorMessage) {
Log.d(LOG_TAG, "error getting conversion data: " + errorMessage);
}
@Override
public void onAppOpenAttribution(Map<String, String> attributionData) {
Log.d(LOG_TAG, "onAppOpenAttribution: This is fake call.");
}
@Override
public void onAttributionFailure(String errorMessage) {
Log.d(LOG_TAG, "error onAttributionFailure : " + errorMessage);
}
};
⇲ Github 링크: Java
테스트
중요 정보
다음 테스트 시나리오는 커스텀 파라미터를 포함하지만
deep_link_value
anddeep_link_sub1-10
파라미터는 포함하지 않는 링크에서 디퍼드 딥링킹을 처리하는 방법을 보여줍니다.
이 테스트 시나리오는 앞에서 설명한 모든 확장 디퍼드 딥링킹과도 관련이 있습니다.
Before you begin
- 앞에서 설명한 구현을 완료합니다.
- 테스트 기기 등록.
- 앱에서 디버그 모드 활성화를 수행합니다.
- 앱이 기기에 설치되어 있지 않은지 확인합니다.
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
- 기기에서 링크를 클릭합니다.
- 원링크는 링크 설정에 따라 Google Play 또는 웹사이트로 리디렉션합니다.
- 애플리케이션을 인스톨합니다.
중요 정보
- 애플리케이션이 개발 중이고 아직 스토어에 업로드되지 않은 경우 다음 이미지가 표시됩니다.
- Android Studio 또는 사용하는 다른 IDE로 애플리케이션을 설치합니다.
- 애플리케이션이 개발 중이고 아직 스토어에 업로드되지 않은 경우 다음 이미지가 표시됩니다.
- UDL은 디퍼드 딥링킹을 검색하고 인스톨을 클릭과 일치시키며 원링크 파라미터를
onDeepLinking
콜백으로 검색합니다. UDL은 라우팅 및 종료할 파라미터를 찾지 못합니다. onConversionDataSuccess
콜백은 커스텀 파라미터와 어트리뷰션 데이터를 모두 포함하는 변환 데이터를 사용하여 호출됩니다.onConversionDataSuccess
는 사용자를 애플리케이션 내부로 라우팅하기 위한 커스텀 파라미터를 설정합니다.
Expected logs results
다음 로그는 오직 디버그 모드가 활성화된 경우에만 사용할 수 있습니다.
-
SDK가 초기화되었습니다.
D/AppsFlyer_6.9.0: Initializing AppsFlyer SDK: (v6.9.0.126)
-
다음 로그는 디렉트 딥링킹을 나타내며 디퍼드 딥링킹 시나리오에서는 무시할 수 있습니다.
D/AppsFlyer_6.9.0: No deep link detected
-
UDL API가 시작됩니다.
D/AppsFlyer_6.9.0: [DDL] start
-
UDL은 앱스플라이어에 쿼리를 보내 이 인스톨과 매치되는 항목을 쿼리합니다.
D/AppsFlyer_6.9.0: [DDL] Preparing request 1 ... I/AppsFlyer_6.9.0: call = https://dlsdk.appsflyer.com/v1.0/android/com.appsflyer.onelink.appsflyeronelinkbasicapp?af_sig=<>&sdk_version=6.9; size = 239 bytes; body = { ... TRUNCATED ... }
-
UDL이 응답을 받고 호출
onDeepLinking
콜백status=FOUND
및 OneLink 링크 데이터:D/AppsFlyer_6.9.0: [DDL] Calling onDeepLinking with: {"deepLink":"{\"campaign_id\":\"\",\"af_sub3\":\"\",\"match_type\":\"probabilistic\",\"af_sub1\":\"\",\"deep_link_value\":\"\",\"campaign\":\"\",\"af_sub4\":\"\",\"timestamp\":\"2022-12-07T09:32:52.256\",\"click_http_referrer\":\"\",\"af_sub5\":\"\",\"media_source\":\"\",\"af_sub2\":\"\",\"is_deferred\":true}","status":"FOUND"}
-
GCD는 전환 데이터를 가져옵니다.
GET:https://gcdsdk.appsflyer.com/install_data/v4.0/com.appsflyer.onelink.appsflyeronelinkbasicapp?devkey=XXXXXXXXX&device_id=1670405582645-822555416155480367
onConversionDataSuccess
는 변환 데이터를 입력하여 호출됩니다.
D/AppsFlyer_6.9.0: [GCD-A02] Calling onConversionDataSuccess with:
{
...
is_first_launch=true,
...
fruit_amount=56,
fruit_name=apples,
...
af_status=Non-organic,
...
}
최신 데이터 30일 전