graph LR
A(OneLink 클릭) --> B{어플리케이션이 설치되어있는가?}
B --> |YES|C
B --> |NO|D(앱스토어로 이동)
D --> E(어플리케이션 설치)
E --> C(어플리케이션 실행)
C --> F(지정 스크린으로 이동)
| Android | iOS | |
|---|---|---|
| Deferred Deep Link | 스토어로 정상이동 ⇒ 다운로드 후 DeepLinking 동작 X | 기본 브라우저가 Chrome 일때 ⇒ 스토어로 정상이동 ⇒ Deep Linking 정상 동작 |
| 그 외 브라우저일 경우 ⇒ 스토어로 정상이동 ⇒ Deep Linking 동작 X | ||
| Direct Deep Link | 정상 동작 | 정상 동작 |
현재 사용중인 딥링킹 라이브러리 react-native-appsflyer 업데이트 및 Unified Deep Linking API(이하 UDL)을 사용하여 딥링크 논리를 처리
기본적인 UDL 동작 Flow
onDeepLink Listener를 트리거하고 딥링크 결과 개체를 사용자에게 전달~~UDL 작업을 위해 AOS/iOS 각각 네이티브 코드 추가가 필요~~
UDL 사용을위한 Deep Linking Listener 변경 필요
// As-is : onAppOpenAttribution listener를 통해 처리
Appsflyer.onAppOpenAttribution(res => {
// Response Sample
{
"status": "success",
"type": "onAppOpenAttribution",
"data": {
"af_dp": "",
"install_time": "2023-02-01 02:35:17",
"media_source": "UDL_test",
"scheme": "",
"link": "",
"af_status": "Non-organic",
"af_deeplink": "true",
"path": "/187",
"af_xp": "custom",
"af_force_deeplink": "true",
"host": "",
"campaign": "None",
"source_caller": "ui",
"shortlink": "m0zorhly"
}
}
...
});
// To-be: onDeepLink listener로 변경
Appsflyer.onDeepLink(res => {
// Response Sample
{
"deepLinkStatus": "FOUND",
"status": "success",
"type": "onDeepLinking",
"data": {
"af_dp": "", // Direct Deep Link 일경우만 유효
"path": "/187/chapters/952918436",
"media_source": "TikTok",
"scheme": "",
"af_xp": "custom",
"link": "",
"host": "",
"campaign": "",
"source_caller": "ui",
"deep_link_value": "",
"is_deferred": false
}
}
const {
deepLinkStatus,
data,
isDeferred,
} = res;
if (deepLinkStatus === 'FOUND') {
// deepLinkStatus === 'FOUND'일 경우만 object 존재
const {
af_dp,
deep_link_value,
} = data;
// deep_link_value 우선으로 사용하나 레거시코드에서
// deep_link_value가 없고 af_dp만 존재할 경우 대응
// 단, Direct Deep Link일 경우에만 af_dp값 확인 가능. (Deferred Deep Link일 경우 af_dp값 확인 불가.)
const rawLink = deep_link_value || af_dp;
if (isNotEmpty(rawLink)) {
// onDeepLink 리스너에서 deferred(지연) 여부를 확인할 수 있기에
// 기존에 onInstallConversionData 리스너에서 해주던 부분 변경
isDeferred
? setDeferredLink(decodeURIComponent(rawLink))
: setLink(decodeURIComponent(rawLink));
}
}
})
UDL 변경에 따른 기존 레거시 OneLink 대응
deep_link_value가 설정되어있는 경우에는 onDeepLink 리스너에서 deep_link_value 값을 통해 딥링킹 처리 가능.deep_link_value가 설정되어 있지않고 fallback url만 설정되어있는 경우와 같이 af_dp가 설정되어있는 동적 링크는 onDeepLink 리스너에서 af_dp 값을 확인할 수 없기에 레거시 OneLink 대응 불가onDeepLink 리스너에서 deep_link_value, af_dp 모두 확인 가능하므로 대응 가능.react-native-appsflyer 라이브러리 업데이트 후 기존에 사용되던 기능 동작 이상없는지 체크deep_link_value & af_force_deeplink=true 설정 필수.