ディファードディープリンクを使用すると、アプリをインストールしていないユーザーがAdjustのリンクをクリックしてストアからアプリをインストールし、アプリを初回起動した際に目的のコンテンツに誘導することができます。
仕組み
以下は、ディファードディープリンクの基本的なフローです。
- ユーザーがAdjustディープリンクをクリックします。
- Adjustサーバーがユーザーをアプリストアにリダイレクトします。
- ユーザーがアプリをインストールして開きます。
- SDKはセッションとアトリビューションリクエストをAdjustのサーバーに送信します。ODDLが有効化されており、インストールが対象となる場合、Adjustはセッションレスポンスでディファードディープリンクを返します。そうでない場合、Adjustはアトリビューションレスポンスでディープリンクを返します。
- 該当する場合、アプリにはオンボーディング画面やユーザーログインなどの初期画面が表示されます。
- アプリは設定したコールバックを通じてディファードディープリンクを受け取ります。その後、アプリがこのリンクを処理して、ユーザーを適切な画面に誘導します。
ディファードディープリンクのフォーマット
ユーザーがAdjustのブランドリンク (brandname.go.link)をクリックし、そのリンクがディファードリンクである場合、Adjustのサーバーはそれをアプリスキーム形式(example://)に変換し、Adjustダッシュボードのプラットフォーム設定で構成されたアプリスキームを使用して、SDKに渡す前に処理を行います。
設定
ディファードディープリンクのコールバックを設定する
AdjustConfigオブジェクトを作成します。AdjustConfigオブジェクトにディファードディープリンクのコールバックを設定します。Adjust SDKは、ディファードディープリンクを受け取った後にこのコールバックを呼び出します。launchDeferredDeeplinkプロパティを設定して、SDKが自動的にディープリンクを開くかどうかを制御します。- SDKを初期化します。
AdjustConfig adjustConfig = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);adjustConfig.deferredDeeplinkCallback = (String? uri) { /* * TODO: Store deep link or handle it immediately * * deeplink format: * * example://summer-clothes?promo=beach&adj_t=abc123 */};
adjustConfig.launchDeferredDeeplink = false; // or true based on your use case (see below)
Adjust.start(adjustConfig);ディープリンクの開封オプション
launchDeferredDeeplink プロパティによって、コールバックコードが実行された後に何が起こるかが決定します。
falseに設定(最も一般的)
アプリがいつ、どのようにディファードディープリンクを処理するかを完全に制御したい場合は、このアプローチを使用してください。これをfalseに設定すると、Adjust SDKはディファードディープリンクを開きません。例えば、アプリがディファードディープリンクを処理する前に初期画面(オンボーディングやログインなど)を表示してから移動する必要がある場合は、このアプローチが適切です。
trueに設定(デフォルト)
コールバックコードが実行された直後にAdjust SDKがディファードディープリンクを開くようにしたい場合は、このアプローチを使用してください。例えば、アプリに初期画面がない場合は、このアプローチが適切です。
Adjust SDKがディファードディープリンクを受け取ると、コールバックコードが実行され、その後Adjust SDKがネイティブOSメソッド(iOSではapplication(_:open:options:)、AndroidではstartActivity(Intent))を使用してディープリンクURLを開きます。その後、OSがリンクをapp_links uriLinkStreamリスナーに提供します。
完全なコード例
この例では、オンボーディングプロセスを実施しているアプリがディファードディープリンクを処理する方法を示します。アプリの内部フローの概要は以下のとおりです。
-
ユーザーがアプリを初回起動します。
-
アプリがオンボーディングを開始します。
-
アプリのコールバックが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.launchDeferredDeeplink = false;
// Set up deferred deep link callback adjustConfig.deferredDeeplinkCallback = (String? uri) { if (uri == null) return;
if (hasCompletedOnboarding) { // If onboarding is complete, handle deferred deep link immediately
// TODO: Handle the deferred deep link by parsing the path and // navigating to the appropriate screen. } else { // Store deferred deep link to handle after onboarding _pendingDeeplink = uri; } };
// Initialize Adjust SDK Adjust.start(adjustConfig);}
// When onboarding completes:void onOnboardingComplete() { if (_pendingDeeplink != null) { // TODO: Handle the deferred deep link by parsing the path and // navigating to the appropriate screen. _pendingDeeplink = null; }}