アプリがインストールされているユーザーがAdjustリンクをクリックすると、ダイレクトディープリンク機能により、アプリ内の特定のコンテンツへ直接遷移させることができます。
仕組み
- ユーザーがAdjustリンクをクリックします。
- OSがアプリを開き、ディープリンクをネイティブコード(iOS または Android)に渡します。
app_linksライブラリがFlutterコードにリンクを転送します。- コードがリンクをAdjust SDKに渡し、アトリビューションを行います。SDKはショートブランドリンクを解析します。
- コードは解析されたリンクに基づいてユーザーをナビゲートします。
Adjust SDKメソッド
ディープリンクを処理する(推奨)
Adjust.processDeeplinkメソッドを使用すると、以下の処理が実行されます。
- ディープリンククリックによるアトリビューションを記録する
- ショートブランドリンクを長いブランドリンクに解析する
- その他のリンクをそのまま渡す
static Future<String?> processDeeplink(String deeplink)アプリがURLを開く(レガシー)
Adjust.appWillOpenUrlメソッドはディープリンククリックからのアトリビューションを記録しますが、ショートブランドリンクは解析されません。
static void appWillOpenUrl(String url)processDeeplinkメソッドは、このレガシーメソッドより優先されます。
実装
app_linksライブラリを使用して、ディープリンクを受信しAdjust SDKに渡します。
dependencies: app_links: ^6.0.0 # check pub.dev for latest versionfinal _appLinks = AppLinks();
Future<void> _initDeepLinks() async { // Handle link when app is started from a deep link final initialLink = await _appLinks.getInitialLink(); if (initialLink != null) { _handleDeepLink(initialLink); }
// Handle links when app is already running _appLinks.uriLinkStream.listen(_handleDeepLink);}
Future<void> _handleDeepLink(Uri incomingLink) async { // Send deep link to Adjust's servers for attribution. // If short branded link, receive long link. // Otherwise, receive original link. final resolvedLink = await Adjust.processDeeplink(incomingLink.toString());
// Handle failure if resolvedLink is null if (resolvedLink == null) return;
/* * TODO: Handle the deep link and navigate to the appropriate screen. * * Possible resolvedLink formats: * * 1. https://brandname.go.link/?adj_t=def456& * adj_link=https%3A%2F%2Fexample.com%2Fsummer-clothes%3Fpromo%3Dbeach * -> extract and decode the deep link from adj_link * * 2. https://brandname.go.link/summer-clothes?promo=beach&adj_t=def456 * -> extract path from the URL * * 3. example://summer-clothes?promo=beach&adj_t=def456 * -> extract path from the URL * * Note (Android only): If your Android app scheme path differs from iOS, * you may receive: * https://brandname.go.link/?adj_t=def456& * adj_deep_link=example%3A%2F%2Fandroid-specific-path%3Fparam%3Dvalue * -> extract and decode the deep link from adj_deep_link */}Android:専用ディープリンクアクティビティ
メインアクティビティがsingleTop、standardの場合、または起動モードに指定されていない場合は、アプリの実行中にディープリンクが正しく開くように、専用のディープリンクアクティビティを作成する必要があります。
これは、適切に設定しないと、ディープリンクによってアプリが新しいタスク内で起動したり、ブラウザーなど別のアプリのタスク内で起動したりする可能性があり、アプリの2つのインスタンスが同時に実行されてることがあるためです。
ネイティブAndroid設定
- 専用ディープリンクアクティビティ アプローチを使用してマニフェストを設定する
- メインのFlutterActivityにディープリンクを転送するDedicatedDeepLinkActivityを作成する
ディープリンクがFlutterコードに到達する仕組み
- ユーザーがAdjustリンクをクリックします。
- OSがディープリンクインテントで
DedicatedDeepLinkActivityを開きます。 DedicatedDeepLinkActivityが既存のインスタンスを前面に押し出すフラグを使用して、メインのFlutterActivityにインテントを転送します。FlutterActivityがディープリンクURIをFlutterEngineにパスします。- FlutterEngineは、
app_linksが受信するDartコードにURIを配信します。
どのFlutterディープリンクライブラリを使用していてもこのフローは同じです。上記に示すもの以外に、Adjust SDKと連携するのに必要なFlutterコードはありません。