ディープリンクサポートの追加
ディープリンクは、ユーザーをアプリ内の特定のコンテンツに誘導します。アプリがインストールされたデバイスでユーザーがディープリンクをタップすると、アプリは製品ページや特定の体験など、目的のコンテンツに直接開きます。
Singularトラッキングリンクは、標準ディープリンク(インストール済みアプリ用)とディファードディープリンク(新規インストール用)の両方をサポートしています。包括的な情報については、ディープリンクFAQと シンギュラーリンクFAQをご覧ください。
必要条件
前提条件
アプリのディープリンクを有効にするには、Singular Links Prerequisitesを完了してください。
シンギュラーリンクハンドラの実装
SingularLinkHandler は、アプリが開いたときに Singular トラッキングリンクからディープリンク、ディファードディープリンク、パススルーパラメータを取得するコールバックメカニズムを提供します。
利用可能なパラメータ
- ディープリンク (_dl):リンクをクリックしたユーザーのアプリ内のリンク先URL
- ディファードディープリンク(_ddl):リンクをクリックした後にアプリをインストールしたユーザーのリンク先URL
- パススルー (_p):追加コンテキストのためにトラッキングリンクを通して渡されるカスタムデータ
SDKコンフィギュレーション
コンフィグにSingularLinkHandlerを追加
SDKの初期化中にSingularLinkHandlerを設定し、入力されるディープリンクと遅延ディープリンクデータを処理します。
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()
}
}
private void initSingularSDK() {
SingularConfig config = new SingularConfig("SDK_KEY", "SDK_SECRET")
.withSingularLink(getIntent(), new SingularLinkHandler() {
@Override
public void onResolved(SingularLinkParams params) {
String deeplink = params.getDeeplink();
String passthrough = params.getPassthrough();
boolean isDeferred = params.isDeferred();
Log.d("SingularLink", "Deeplink: " + (deeplink != null ? deeplink : "null"));
Log.d("SingularLink", "Passthrough: " + (passthrough != null ? passthrough : "null"));
Log.d("SingularLink", "Is Deferred: " + isDeferred);
// Handle deep link routing
if (deeplink != null) {
handleDeepLink(deeplink, isDeferred);
}
}
});
try {
Singular.init(getApplicationContext(), config);
Log.d("Singular", "SDK initialized successfully");
} catch (Exception e) {
Log.e("Singular", "SDK initialization failed: " + e.getMessage());
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// Configure onNewIntent to handle Warm start deeplinks
if (intent != null) {
setIntent(intent);
initSingularSDK();
}
}
注意:SingularLinkHandlerは、アプリがSingular Linkを介して開いた場合にのみトリガーされます。詳細については、Singular Links FAQを参照してください。
ハンドラの動作
SingularLinkHandler の実行について
SingularLinkHandler は、アプリがインストールされたばかりか、既にインストールされているかによって動作が異なります。
新規インストール (ディープリンクの遅延)
新規インストールでは、アプリの起動時に Open URL は存在しません。トラッキングリンクにディープリンクまたはディファードディープリンクの値が含まれているかどうかを判断するために、Singular はアトリビューションを完了します。
ディファードディープリンクのフロー
- ユーザーがディープリンク値で設定されたSingularトラッキングリンクをクリックする。
- ユーザーがアプリをインストールして初めて開く
- Singular SDKが最初のセッションをSingularサーバーに送信します。
- アトリビューションが完了し、トラッキングリンクからディープリンクが特定される
-
ディープリンクの値が、
isDeferred = trueのdeeplinkパラメータで SingularLinkHandler に返されます。
ディファードディープリンクのテスト
- テストデバイスからアプリをアンインストールする(現在インストールされている場合)
- テスト端末のGoogle Advertising ID (GAID)をリセットします。
- デバイスからSingularトラッキングリンクをクリックします(ディープリンク値が設定されていることを確認します)。
- アプリをインストールして開く
アトリビューションが正常に完了し、延期されたディープリンクの値がSingularLinkHandlerに渡されます。
プロのヒント異なるパッケージ名(例えば、com.example.prod
の代わりにcom.example.dev)を使用する開発ビルドでディープリンクをテストする場合、開発アプリのパッケージ名専用にトラッキングリンクを設定してください。テストリンクをクリックした後、アプリストアから本番アプリをダウンロードするのではなく、Android
Studio または APK を使用して開発ビルドをデバイスに直接インストールします。
インストール済み(即時ディープリンク)
アプリが既にインストールされている場合、Singular Linkをクリックすると、Android App Linksテクノロジーを使用してアプリが即座に開きます。
即時ディープリンクフロー:
- ユーザーがSingularトラッキングリンクをクリック
- Android OSはSingularトラッキングリンク全体を含むOpen URLを提供します。
- SDKの初期化中に、SingularがAndroid Intentを解析します。
-
Singular は
deeplinkとpassthroughの値を抽出します。 -
値はSingularLinkHandlerを通して
isDeferred = false。
パススルーパラメータ
パススルーパラメータを使用して、トラッキングリンククリックから追加データを取得します。
トラッキングリンクにpassthrough (_p) パラメータが含まれている場合、SingularLinkHandler
のpassthrough パラメータに対応するデータが含まれます。キャンペーンメタデータ、ユーザーセグメンテーションデータ、またはアプリで必要なカスタム情報を取得するために使用します。
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
.withSingularLink(intent) { params ->
// Extract passthrough data
params.passthrough?.let { passthroughData ->
// 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")
}
}
SingularConfig config = new SingularConfig("SDK_KEY", "SDK_SECRET")
.withSingularLink(getIntent(), new SingularLinkHandler() {
@Override
public void onResolved(SingularLinkParams params) {
// Extract passthrough data
String passthroughData = params.getPassthrough();
if (passthroughData != null) {
try {
// Parse and use custom data
JSONObject jsonData = new JSONObject(passthroughData);
String campaignId = jsonData.optString("campaign_id");
String userSegment = jsonData.optString("segment");
Log.d("SingularLink", "Campaign ID: " + campaignId);
Log.d("SingularLink", "User Segment: " + userSegment);
} catch (JSONException e) {
Log.e("SingularLink", "Error parsing passthrough data");
}
}
}
});
すべてのクエリパラメータを転送
_forward_params=2 パラメータを追加することで、トラッキングリンクURLからすべてのクエリパラメータをキャプチャします。
_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"