디퍼드 딥링킹을 사용하면 앱을 설치하지 않은 사용자가 Adjust 링크를 클릭하여 앱 스토어에서 앱을 설치한 후, 처음 앱을 열 때 원하는 콘텐츠로 이동할 수 있습니다.
작동 방식
다음은 디퍼드 딥링킹의 기본 흐름입니다.
-
사용자가 Adjust 딥링크를 클릭합니다.
-
Adjust 서버가 사용자를 앱 스토어로 리다이렉트합니다.
-
사용자가 앱을 설치 또는 재설치한 후 실행합니다.
-
Adjust SDK가
/session요청과/attribution요청을 Adjust 서버로 전송합니다. -
Adjust 서버가 클릭을 설치 또는 재설치와 매칭하고, 다음 응답 중 하나에서 디퍼드 딥링크를 SDK에 반환합니다.
/session응답(최적화된 디퍼드 딥링킹)/attribution응답(레거시 방식)
Adjust SDK는 디퍼드 딥링크 콜백을 통해 디퍼드 딥링크를 앱에 전달합니다.
-
해당되는 경우, 앱은 온보딩 화면 및 사용자 로그인 화면 같은 초기 화면을 표시합니다.
-
앱이 딥링크를 처리하여 적절한 화면으로 이동합니다.
디퍼드 딥링크 형식
사용자가 Adjust 브랜드 링크(brandname.go.link)를 클릭하고 링크가 디퍼드되면, Adjust 서버는 Adjust 대시보드의 iOS 플랫폼 설정에서 구성된 앱 스킴을 사용하여 해당 링크를 앱 스킴 형식(example://)으로 변환한 후 Adjust SDK로 전달합니다.
설정
디퍼드 딥링크 콜백 설정
AdjustConfig객체를 생성합니다.AdjustConfig객체에 디퍼드 딥링크 콜백을 설정합니다. Adjust SDK는 디퍼드 딥링크를 수신한 후 이 메서드를 호출합니다.isDeferredDeeplinkOpeningEnabled속성을 설정하여 SDK가 딥링크를 자동으로 열지 지정합니다.- SDK를 초기화합니다.
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);adjustConfig.deferredDeeplinkCallback = (String? deeplink) { /* * TODO: Handle the deep link * (for example, store it or handle it immediately) * * deep link format: * * example://summer-clothes?promo=beach&adj_t=def456 */};
adjustConfig.isDeferredDeeplinkOpeningEnabled = false; // or true based on your use case (see below)
Adjust.initSdk(adjustConfig);딥링크 열기 옵션
isDeferredDeeplinkOpeningEnabled 속성은 콜백 코드가 실행된 이후의 동작을 결정합니다.
false으로 설정 (가장 일반적)
앱에서 디퍼드 딥링크를 처리하는 시점과 방법을 완전히 제어하려면 이 방법을 사용합니다. false로 설정 시, Adjust SDK는 디퍼드 딥링크를 열려고 시도하지 않습니다. 예를 들어, 앱이 초기 화면(예: 온보딩 또는 로그인)을 먼저 표시하고 그 이후에 디퍼드 딥링크를 처리해야 하는 경우 이 접근 방식이 적합합니다.
true로 설정 (기본 설정)
콜백 코드가 실행된 직후 Adjust SDK가 디퍼드 딥링크를 열도록 하려면 이 방법을 사용합니다. 예를 들어, 앱에 초기 화면이 없는 경우 이 접근 방식이 적합합니다.
Adjust SDK가 디퍼드 딥링크를 수신하면 콜백 코드가 실행되고, Adjust SDK는 네이티브 OS 메서드(iOS에서는 application(_:open:options:), Android에서는 startActivity(Intent))를 사용하여 딥링크 URL을 엽니다. 이후 Adjust SDK는 네이티브 코드에서 OS로부터 링크를 수신하고, directDeeplinkCallback로 전달합니다.
전체 코드 예시
본 예시는 온보딩 프로세스가 있는 앱이 디퍼드 딥링크를 어떻게 처리하는지 보여줍니다. 앱의 내부 흐름을 요약하면 다음과 같습니다.
-
사용자가 앱을 처음으로 실행합니다.
-
앱이 온보딩 프로세스를 시작합니다.
-
앱의 콜백은 Adjust SDK로부터 디퍼드 딥링크를 수신하고, 온보딩 프로세스가 완료되었는지 확인합니다.
- 온보딩이 완료되면 즉시 딥링크를 처리합니다.
- 온보딩이 완료되지 않은 경우 딥링크를 저장합니다.
-
온보딩이 완료되면 앱은 저장된 디퍼드 딥링크를 확인하고 처리합니다.
-
앱이 사용자를 딥링크 화면으로 이동시킵니다.
import 'package:adjust_sdk/adjust.dart';import 'package:adjust_sdk/adjust_config.dart';import 'package:flutter/foundation.dart';
String? _pendingDeeplink;
void initAdjust() { // Configure Adjust SDK // Replace {YourAppToken} with your Adjust app token const appToken = '{YourAppToken}'; AdjustConfig? adjustConfig;
// Enable verbose logging for deep link testing if (kDebugMode) { adjustConfig = AdjustConfig(appToken, AdjustEnvironment.sandbox); adjustConfig.logLevel = AdjustLogLevel.verbose; } else { adjustConfig = AdjustConfig(appToken, AdjustEnvironment.production); adjustConfig.logLevel = AdjustLogLevel.suppress; }
// Disable automatic opening so we can handle it manually adjustConfig.isDeferredDeeplinkOpeningEnabled = false;
// Set up deferred deep link callback adjustConfig.deferredDeeplinkCallback = (String? deeplink) { if (deeplink == null) return;
if (hasCompletedOnboarding) { // If onboarding is complete, handle deferred deep link immediately
// deep link format: // // example://summer-clothes?promo=beach&adj_t=def456 // // TODO: Handle the deep link and navigate to the appropriate screen. } else { // Store deferred deep link to handle after onboarding _pendingDeeplink = deeplink; } };
// Initialize Adjust SDK Adjust.initSdk(adjustConfig);}
// When onboarding completes:void onOnboardingComplete() { if (_pendingDeeplink != null) { // deep link format: // // example://summer-clothes?promo=beach&adj_t=def456 // // TODO: Handle the deep link and navigate to the appropriate screen. _pendingDeeplink = null; }}