ユニファイド ディープリンク(UDL)

概要:Unified Deep Linking(UDL)により、アプリ起動時に新規および既存ユーザーを特定のアプリ内アクティビティ(例えば、アプリ内の特定のページなど)に誘導することができます。

📘

UDLのプライバシー保護

新規ユーザーの場合、UDLメソッドはディファードディープリンクに関するパラメーターのみを返します:deep_link_value および deep_link_sub1-10。その他のパラメーター(media_sourcecampaignaf_sub1-5 など)を取得しようとすると、null を返します。

フロー

UDLはモバイルユーザーをアプリ内の特定のアクティビティまたはコンテンツに誘導します。

計測フローは次のとおりです。

  1. ユーザーがOneLinkのリンクをクリックします。
    • ユーザーがアプリをインストールしている場合は、AndroidアプリリンクまたはURIスキームでアプリを開きます。
    • ユーザーがアプリをインストールしていない場合は、アプリストアにリダイレクトされ、ダウンロード後、アプリを開きます。
  2. アプリ起動がAppsFlyer SDKをトリガーします。
  3. AppsFlyer SDKはUDL APIを実行します。
  4. UDL APIはOneLinkデータをAppsFlyerサーバーから取得します。
  5. UDL APIは、DeepLinkingListener クラスの onDeepLinking()メソッドをコールバックします。
  6. onDeepLinking() メソッドは、DeepLinkResult オブジェクトを取得します。
  7. DeepLinkResult オブジェクトには以下が含まれています。
    • Status (Found/Not found/Error)
    • deep_link_valuedeep_link_sub1-10 パラメーターを持つ DeepLinkオブジェクト。これはOneLinkの主な目的である、ユーザーを特定のアプリ内アクティビティに誘導するためにディベロッパーが使用します。

前提条件

  • UDL には、AppsFlyer Android SDK V6.1以降が必要です。

計画

OneLinkを設定する際は、マーケティング担当者はこのパラメーターをリンクを作成するために使用し、ディベロッパーは、受け取った値をもとにアプリの動作をカスタマイズします。アプリ内でのルーティングやリンク先でのデータのパーソナライズなど、アプリ内でパラメータが正しく処理されるように実装するのはディベロッパーの責任です。

OneLinkの計画方法:

  1. ユーザーがURLをクリックしたときに、どのような動作が発生し、どのような体験をするのかをマーケティング担当者からヒアリングしてください。
  2. 希望する動作に基づいて、ユーザーにパーソナライズれた体験を提供するために必要な deep_link_value とその他のパラメーターを計画してください。
    • deep_link_value は、URL上でマーケティング担当者により設定され、ディベロッパーがユーザーをアプリ内の特定の場所にリダイレクトするために使用します。例えば、フルーツストアアプリ内でユーザーをリンゴのページにリダイレクトしたい場合、deep_link_value の値は apples となります。
    • deep_link_sub1-10 パラメーターはURLに追加することができ、ユーザー体験をパーソナライズすることができます。例えば、10%割引をオファーする場合、deep_link_sub1の値は、10となります。

実装

UDL APIを選択したパラメーターと値に基づいて実装してください。

  1. subscribeForDeepLink() メソッド(AppsFlyerLib から)を使用して、DeepLinkListener インターフェイスリスナーを登録してください。
  2. 必ずコールバック関数 onDeepLinking() をオーバーライドしてください。
    onDeepLinking() は、DeepLinkResult オブジェクトを引数として受け取ります。
  3. getStatus() を使用して、ディープリンクのマッチが見つかるかどうかクエリしてください。
  4. ステータスがエラーの場合は、getError() を呼び出して、エラーフローを実行します。
  5. ステータスが見つかった場合には、getDeepLink() を使用して、DeepLink オブジェクトを取得します。
    DeepLink オブジェクトには、ディープリンク情報とヘルパー関数が含まれており、既知の OneLink キーから値を簡単に取得できます(例:getDeepLinkValue()など)。
  6. getDeepLinkValue() を使って deep_link_value を取得してください。
  7. getStringValue("deep_link_sub1") を使って deep_link_sub1 を取得してください。deep_link_sub2-10 パラメーターについても同じ操作を行い、必要に応じて文字列値を変更してください。
  8. deep_link_valuedeep_link_sub1-10 が取得できたら、アプリ内ルーターへ渡しユーザー体験をパーソナライズするために使用してください。

Code example

appsflyer.subscribeForDeepLink(new DeepLinkListener(){
            @Override
            public void onDeepLinking(@NonNull DeepLinkResult deepLinkResult) {
                DeepLinkResult.Status dlStatus = deepLinkResult.getStatus();
                if (dlStatus == DeepLinkResult.Status.FOUND) {
                    Log.d(LOG_TAG, "Deep link found");
                } else if (dlStatus == DeepLinkResult.Status.NOT_FOUND) {
                    Log.d(LOG_TAG, "Deep link not found");
                    return;
                } else {
                    // dlStatus == DeepLinkResult.Status.ERROR
                    DeepLinkResult.Error dlError = deepLinkResult.getError();
                    Log.d(LOG_TAG, "There was an error getting Deep Link data: " + dlError.toString());
                    return;
                }
                DeepLink deepLinkObj = deepLinkResult.getDeepLink();
                try {
                    Log.d(LOG_TAG, "The DeepLink data is: " + deepLinkObj.toString());
                } catch (Exception e) {
                    Log.d(LOG_TAG, "DeepLink data came back null");
                    return;
                }
                // An example for using is_deferred
                if (deepLinkObj.isDeferred()) {
                    Log.d(LOG_TAG, "This is a deferred deep link");
                } else {
                    Log.d(LOG_TAG, "This is a direct deep link");
                }
                
                // ** Next if statement is optional **
                // Our sample app's user-invite carries the referrerID in deep_link_sub2
                // See the user-invite section in FruitActivity.java
                if (dlData.has("deep_link_sub2")){
                    referrerId = deepLinkObj.getStringValue("deep_link_sub2");
                    Log.d(LOG_TAG, "The referrerID is: " + referrerId);
                } else {
                    Log.d(LOG_TAG, "deep_link_sub2/Referrer ID not found");
                }
                // An example for using a generic getter
                String fruitName = "";
                try {
                    fruitName = deepLinkObj.getDeepLinkValue();
                    Log.d(LOG_TAG, "The DeepLink will route to: " + fruitName);
                } catch (Exception e) {
                    Log.d(LOG_TAG, "Custom param fruit_name was not found in DeepLink data");
                    return;
                }
                goToFruit(fruitName, deepLinkObj);
            }
        });

⇲ Github リンク:Java


このページは役に立ちましたか?