Android SDK - ディープリンクのサポート

ディープリンクのサポートを追加する

ディープリンク は、ユーザーをアプリ内の特定のコンテンツに誘導します。アプリがインストールされたデバイスでユーザーがディープリンクをタップすると、アプリは商品ページや特定の体験など、意図したコンテンツを直接開きます。

Singularトラッキングリンクは、標準のディープリンク(インストール済みアプリ用)とディファードディープリンク(新規インストール用)の両方をサポートします。詳細については、 ディープリンクFAQ および Singular Links FAQ を参照してください。


要件

前提条件

アプリのディープリンクを有効にするには、 Singular Linksの前提条件 を完了してください。


Singular Linksハンドラーの実装

SingularLinkHandlerは、アプリが開かれるときにSingularトラッキングリンクからディープリンク、ディファードディープリンク、およびパススルーのパラメータを取得するためのコールバックメカニズムを提供します。

利用可能なパラメータ:

  • ディープリンク (_dl): リンクをクリックしたユーザー向けのアプリ内宛先URL
  • ディファードディープリンク (_ddl): リンクをクリックした後にアプリをインストールするユーザー向けの宛先URL
  • パススルー (_p): 追加のコンテキスト用にトラッキングリンクを介して渡されるカスタムデータ

SDKの設定

AndroidManifestの設定

SDKがディープリンクを解決する前に、アクティビティはインテントフィルターを宣言して、Androidが受信した ACTION_VIEW インテントをそのアクティビティにルーティングするようにする必要があります。 AndroidManifest.xml のランチャーアクティビティ(またはディープリンクを受信するアクティビティ)にフィルターを追加し、独自のschemeとhostに置き換えてください。

<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <!-- Custom URI scheme deep link -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="yourapp" />
    </intent-filter>

    <!-- HTTPS Singular Link (replace with your branded subdomain) -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http" />
        <data android:scheme="https" />
        <data android:host="yourcompany.sng.link" />
        <data android:pathPrefix="/A"/>
        <data android:pathPrefix="/B"/>
        <data android:pathPrefix="/E"/>
        <data android:pathPrefix="/F"/>
    </intent-filter>
</activity>

これらのインテントフィルターがない場合、OSはディープリンクのインテントをアクティビティに配信せず、 SingularLinkHandler コールバックは実行されません。 android:autoVerify="true" を伴うHTTPS schemeのApp Linksには、宛先ドメインにホストされた /.well-known/assetlinks.json ファイルも必要です。


ConfigにSingularLinkHandlerを追加

SDKの初期化中にSingularLinkHandlerを設定して、受信するディープリンクおよびディファードディープリンクのデータを処理します。

Kotlin Java
private fun initSingularSDK() {
    val config = SingularConfig("SDK_KEY", "SDK_SECRET")
        .withSingularLink(intent) { params ->
            val deeplink = params.deeplink
            val passthrough = params.passthrough
            val isDeferred = params.isDeferred

            Log.d("SingularLink", "Deeplink: ${deeplink ?: "null"}")
            Log.d("SingularLink", "Passthrough: ${passthrough ?: "null"}")
            Log.d("SingularLink", "Is Deferred: $isDeferred")

            // Handle deep link routing
            deeplink?.let { url ->
                handleDeepLink(url, isDeferred)
            }
        }

    try {
        Singular.init(applicationContext, config)
        Log.d("Singular", "SDK initialized successfully")
    } catch (e: Exception) {
        Log.e("Singular", "SDK initialization failed: ${e.message}")
    }
}

override fun onNewIntent(intent: Intent?) {
  super.onNewIntent(intent)
  // Configure onNewIntent to handle Warm start deeplinks
  intent?.let {
    setIntent(intent)
    initSingularSDK()
  }
}

注意: SingularLinkHandlerは、アプリがSingular Linkを通じて開かれた場合にのみトリガーされます。詳細については、 Singular Links FAQ を参照してください。

withSingularLink shortlinkTimeoutSec 引数なしで呼び出された場合、短縮リンクの解決タイムアウトはデフォルトで10秒です。これをオーバーライドするには、3つの引数を持つオーバーロード withSingularLink(Intent intent, SingularLinkHandler handler, long shortlinkTimeoutSec) を使用してください。インテントアクションが ACTION_VIEW の場合、SDKはセッションをディープリンクで開かれたものとしてマークし、これはアトリビューションに影響します。


ハンドラーの動作

SingularLinkHandlerは、アプリが新規にインストールされたか、すでにインストールされているかによって動作が異なります。

新規インストール (ディファードディープリンク)

新規インストールでは、アプリの起動時にOpen URLが存在しません。Singularは、トラッキングリンクにディープリンクまたはディファードディープリンクの値が含まれていたかどうかを判定するためにアトリビューションを完了します。

ディファードディープリンクのフロー:

  1. ユーザーがディープリンク値で構成されたSingularトラッキングリンクをクリックします
  2. ユーザーがアプリをインストールして初めて開きます
  3. Singular SDKが最初のセッションをSingularサーバーに送信します
  4. アトリビューションが完了し、トラッキングリンクからのディープリンクが識別されます
  5. ディープリンク値は、 isDeferred = true と共に deeplink パラメータでSingularLinkHandlerに返されます

ディファードディープリンクのテスト:

  1. テストデバイスからアプリをアンインストールします(現在インストールされている場合)
  2. デバイスでGoogle Advertising ID (GAID)をリセットします
  3. デバイスからSingularトラッキングリンクをクリックします(ディープリンク値で構成されていることを確認してください)
  4. アプリをインストールして開きます

アトリビューションが正常に完了し、ディファードディープリンクの値がSingularLinkHandlerに渡されます。

Pro Tip: 異なるパッケージ名(例: com.example.prod の代わりに com.example.dev )を持つ開発ビルドでディープリンクをテストする場合は、開発アプリのパッケージ名専用にトラッキングリンクを構成してください。テストリンクをクリックした後、アプリストアからプロダクションアプリをダウンロードするのではなく、Android StudioまたはAPKを介して開発ビルドをデバイスに直接インストールしてください。


既にインストール済み (即時ディープリンク)

アプリがすでにインストールされている場合、Singular Linkをクリックすると、Android App Linksテクノロジーを使用してアプリが即座に開きます。

即時ディープリンクのフロー:

  1. ユーザーがSingularトラッキングリンクをクリックします
  2. Android OSがSingularトラッキングリンク全体を含むOpen URLを提供します
  3. SDKの初期化中に、SingularがAndroid Intentを解析します
  4. Singularが deeplink および passthrough の値を抽出します
  5. 値は isDeferred = false と共にSingularLinkHandlerを通じて返されます

パススルーパラメータ

パススルーパラメータを使用して、トラッキングリンクのクリックから追加データを取得します。

トラッキングリンクに passthrough (_p) パラメータが含まれている場合、SingularLinkHandlerの passthrough パラメータには対応するデータが含まれます。これを使用して、キャンペーンのメタデータ、ユーザーセグメンテーションデータ、またはアプリで必要な任意のカスタム情報を取得できます。

Kotlin Java
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    .withSingularLink(intent) { params ->
        // Extract passthrough data
        params.passthrough?.let { passthroughData ->
            try {
                // Parse and use custom data
                val jsonData = JSONObject(passthroughData)
                val campaignId = jsonData.optString("campaign_id")
                val userSegment = jsonData.optString("segment")

                Log.d("SingularLink", "Campaign ID: $campaignId")
                Log.d("SingularLink", "User Segment: $userSegment")
            } catch (e: JSONException) {
                Log.e("SingularLink", "Error parsing passthrough data", e)
            }
        }
    }

すべてのクエリパラメータを転送

トラッキングリンクURLからすべてのクエリパラメータを取得するには、 _forward_params=2 パラメータを追加します。

_forward_params=2 がトラッキングリンクに追加されると、すべてのクエリパラメータがSingularLinkHandlerの deeplink パラメータに含まれ、すべてのパラメータを含む完全なURLにアクセスできるようになります。

トラッキングリンクの例:
https://yourapp.sng.link/A1b2c/abc123?_dl=myapp://product/123&_forward_params=2&utm_source=facebook&promo=SALE2024

SingularLinkHandlerは以下を受信します:
deeplink = "myapp://product/123?utm_source=facebook&promo=SALE2024"