ディープリンクサポートの追加
ディープリンクは、ユーザーをアプリ内の特定のコンテンツに誘導します。アプリがインストールされたデバイスでユーザーがディープリンクをタップすると、アプリは製品ページや特定の体験など、目的のコンテンツに直接開きます。
Singularトラッキングリンクは、標準ディープリンク(インストール済みアプリ用)とディファードディープリンク(新規インストール用)の両方をサポートしています。包括的な情報については、ディープリンクFAQと シンギュラーリンクFAQをご覧ください。
必要条件
前提条件
アプリのディープリンクを有効にするには、Singular Links Prerequisitesを完了してください。
必要な設定ステップ
- 関連ドメイン:Xcode で、Singular Custom Subdomain をSigning & Capabilities > Associated Domainsに追加します。
- URL タイプ: Info (情報)] > [URL Types (URLタイプ)]で、アプリのスキームをURLタイプに追加します。
- Singular Platform:SingularプラットフォームのAppsページにApple DeveloperTeam IDと スキームを追加します。
注意事項
- アプリがすでにiOSユニバーサルリンクを使用するように設定されている場合、ユニバーサルリンクのドメインはすでにAssociated Domains(関連付けられたドメイン)に存在しており、そのまま使用できます。このドメインは、以下の詳細セクションで説明するように、Supported Domains設定オプションに追加する必要があります。
- Singularがマーケティングキャンペーンからのアトリビューションをトラッキングし、キャンペーンからのディープリンクを処理できるように、Singularカスタムリンクドメインも含める必要があります。
Singularリンクハンドラの実装
SingularLinkHandler は、アプリが開いたときに Singular トラッキングリンクからディープリンク、ディファードディープリンク、パススルーパラメータを取得するためのコールバックメカニズムを提供します。
利用可能なパラメータ
- ディープリンク:リンクをクリックしたユーザーのアプリ内のリンク先URL
- ディファードディープリンク:リンクをクリックした後にアプリをインストールしたユーザーのリンク先URL
- パススルー:追加コンテキストのためにトラッキングリンクを通して渡されるカスタムデータ
- URLパラメータ:トラッキングリンクURLのすべてのクエリパラメータ
SDKコンフィギュレーション
コンフィグにSingularLinkHandlerを追加
SDK初期化中にSingularLinkHandlerを設定し、入力されるディープリンクと遅延ディープリンクデータを処理します。
func getConfig() -> SingularConfig? {
// Create config with API credentials
guard let config = SingularConfig(apiKey: "SDK_KEY", andSecret: "SDK_SECRET") else {
return nil
}
// Set deep link handler
config.singularLinksHandler = { params in
self.handleDeeplink(params: params)
}
return config
}
func handleDeeplink(params: SingularLinkParams?) {
// Get Deeplink data from Singular Link
let deeplink = params?.getDeepLink()
let passthrough = params?.getPassthrough()
let isDeferred = params?.isDeferred()
let urlParams = params?.getUrlParameters()
print("Deeplink: \(deeplink ?? "null")")
print("Passthrough: \(passthrough ?? "null")")
print("Is Deferred: \(isDeferred ?? false)")
// Handle deep link routing
if let url = deeplink {
handleDeepLinkRouting(url: url, isDeferred: isDeferred ?? false)
}
}
- (SingularConfig *)getConfig {
// Create config with API credentials
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"SDK_KEY"
andSecret:@"SDK_SECRET"];
// Set deep link handler
config.singularLinksHandler = ^(SingularLinkParams *params) {
[self handleDeeplink:params];
};
return config;
}
- (void)handleDeeplink:(SingularLinkParams *)params {
// Get Deeplink data from Singular Link
NSString *deeplink = [params getDeepLink];
NSString *passthrough = [params getPassthrough];
BOOL isDeferred = [params isDeferred];
NSDictionary *urlParams = [params getUrlParameters];
NSLog(@"Deeplink: %@", deeplink ?: @"null");
NSLog(@"Passthrough: %@", passthrough ?: @"null");
NSLog(@"Is Deferred: %d", isDeferred);
// Handle deep link routing
if (deeplink) {
[self handleDeepLinkRouting:deeplink isDeferred:isDeferred];
}
}
注意:SingularLinkHandlerは、アプリがSingular Linkを介して開いた場合にのみトリガーされます。詳細については、Singular Links FAQを参照してください。
ハンドラの動作
SingularLinkHandler の実行について
SingularLinkHandler は、アプリがインストールされたばかりか、既にインストールされているかによって動作が異なります。
新規インストール (ディープリンクの遅延)
新規インストールでは、アプリの起動時に Open URL は存在しません。トラッキングリンクにディープリンクまたはディファードディープリンクの値が含まれているかどうかを判断するために、Singular はアトリビューションを完了します。
ディファードディープリンクのフロー
- ユーザーがディープリンク値で設定されたSingularトラッキングリンクをクリックする。
- ユーザーがアプリをインストールして初めて開く
- Singular SDKが最初のセッションをSingularサーバーに送信します。
- アトリビューションが完了し、トラッキングリンクからディープリンクが特定される
-
ディープリンクの値が
isDeferred = trueとともに SingularLinkHandler に返される
ディファードディープリンクのテスト
- テストデバイスからアプリをアンインストールする (現在インストールされている場合)
- デバイスのIDFAをリセットします([設定] > [プライバシー] > [Apple Advertising] > [Advertising Identifierをリセット])。
- デバイスからSingularトラッキングリンクをクリックします(ディープリンク値が設定されていることを確認します)。
- アプリをインストールして開く
アトリビューションが正常に完了し、延期されたディープリンク値がSingularLinkHandlerに渡されます。
プロのヒント異なるバンドル識別子(例えば、com.example.prod の代わりにcom.example.dev )を使用する開発ビルドでディープリンクをテストする場合、開発アプリのバンドル識別子専用にトラッキングリンクを設定します。テストリンクをクリックした後、本番アプリを App Store からダウンロードするのではなく、Xcode または TestFlight を介して、開発ビルドをデバイスに直接インストールします。
インストール済み(即時ディープリンク)
アプリが既にインストールされている場合、Singular Link をクリックすると、iOS Universal Links テクノロジーを使用してアプリがすぐに開きます。
即時ディープリンクフロー:
- ユーザーがSingularトラッキングリンクをクリック
- iOSはSingularトラッキングリンク全体を含むOpen URLを提供します。
- SDKの初期化中に、SingularはNSUserActivityまたはURLを解析します。
- Singularはディープリンクとパススルーの値を抽出します。
-
値はSingularLinkHandlerを通して
isDeferred = false。
パススルーパラメータ
パススルーパラメータを使用して、トラッキングリンククリックから追加データを取得します。
パススルーパラメータがトラッキングリンクに含まれている場合、SingularLinkHandler のpassthrough パラメータには対応するデータが含まれます。キャンペーンメタデータ、ユーザーセグメンテーションデータ、またはアプリで必要なカスタム情報を取得するために使用します。
func handleDeeplink(params: SingularLinkParams?) {
// Extract passthrough data
if let passthroughData = params?.getPassthrough() {
// Parse JSON passthrough data
if let data = passthroughData.data(using: .utf8),
let jsonData = try? JSONSerialization.jsonObject(with: data) as? [String: Any] {
let campaignId = jsonData["campaign_id"] as? String
let userSegment = jsonData["segment"] as? String
print("Campaign ID: \(campaignId ?? "unknown")")
print("User Segment: \(userSegment ?? "unknown")")
}
}
}
- (void)handleDeeplink:(SingularLinkParams *)params {
// Extract passthrough data
NSString *passthroughData = [params getPassthrough];
if (passthroughData) {
// Parse JSON passthrough data
NSData *data = [passthroughData dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:data
options:0
error:&error];
if (!error && jsonData) {
NSString *campaignId = jsonData[@"campaign_id"];
NSString *userSegment = jsonData[@"segment"];
NSLog(@"Campaign ID: %@", campaignId ?: @"unknown");
NSLog(@"User Segment: %@", userSegment ?: @"unknown");
}
}
}
URLパラメータ
getUrlParameters() メソッドを使用して、トラッキングリンクURLからすべてのクエリパラメータをキャプチャします。
SingularLinkHandler はトラッキングリンクから全ての URL パラメータへのアクセスを提供し、カスタムパラメータや UTM タグへの完全なアクセスを提供します。
func handleDeeplink(params: SingularLinkParams?) {
// Get all URL parameters
if let urlParams = params?.getUrlParameters() {
for (key, value) in urlParams {
print("Parameter: \(key) = \(value)")
}
// Access specific parameters
if let utmSource = urlParams["utm_source"] as? String {
print("UTM Source: \(utmSource)")
}
if let promoCode = urlParams["promo"] as? String {
print("Promo Code: \(promoCode)")
}
}
}
- (void)handleDeeplink:(SingularLinkParams *)params {
// Get all URL parameters
NSDictionary *urlParams = [params getUrlParameters];
if (urlParams) {
for (NSString *key in urlParams) {
NSLog(@"Parameter: %@ = %@", key, urlParams[key]);
}
// Access specific parameters
NSString *utmSource = urlParams[@"utm_source"];
if (utmSource) {
NSLog(@"UTM Source: %@", utmSource);
}
NSString *promoCode = urlParams[@"promo"];
if (promoCode) {
NSLog(@"Promo Code: %@", promoCode);
}
}
}
トラッキングリンクの例
https://yourapp.sng.link/A1b2c/abc123?_dl=myapp://product/123&utm_source=facebook&promo=SALE2024
SingularLinkHandler はgetUrlParameters() メソッドを通してutm_source とpromo を含む全てのパラメータにアクセスします。
高度な設定
非Singularユニバーサルリンクの処理
アトリビューショントラッキングのために、Google AdsやFacebookなどのサードパーティパートナーからのユニバーサルリンクをサポートします。
Singular iOS SDKバージョン12.0.3以上では、Singular以外のユニバーサルリンクがデフォルトでサポートされています。
旧バージョンのSDKでサードパーティのディープリンクをサポートするには:
- Singular SDKが初期化されるたびに、すべての関連ドメイン(sng.linkを除く)をConfigオブジェクトのsupportedDomains設定オプションに追加してください。
- これにより、サードパーティのディープリンクの動作が可能になりますが、ディープリンクへのアトリビューションはできません。アトリビューションのためには、Singularトラッキングリンクを使用する必要があります。
- supportedDomains機能は、ユニバーサルリンク用にアプリを設定し、現在ドメイン上で独自のAASAファイルをホストしていることを前提としています。
func getConfig() -> SingularConfig? {
guard let config = SingularConfig(apiKey: "SDK_KEY", andSecret: "SDK_SECRET") else {
return nil
}
// Add supported domains for third-party Universal Links
config.supportedDomains = [
"subdomain.mywebsite.com",
"anothersubdomain.myotherwebsite.com"
]
return config
}
- (SingularConfig *)getConfig {
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"SDK_KEY"
andSecret:@"SDK_SECRET"];
// Add supported domains for third-party Universal Links
config.supportedDomains = @[
@"subdomain.mywebsite.com",
@"anothersubdomain.myotherwebsite.com"
];
return config;
}
ESPカスタムトラッキングリンクドメインのサポート
Eメールサービスプロバイダー(ESP)が提供するユニバーサルリンクを、メールキャンペーンのアトリビューションに使用できるようにします。
ESPのドメインはHTTPSに対応している必要があります。Appleは、iOSアプリがリダイレクトなしでHTTPS対応のエンドポイントからapple-app-site-associationファイルを取得することを要求しています。あなたのサイトのDNSにDNS設定が必要な場合があるので、あなたのアプリのためにこのファイルをホストする方法をESPに確認してください。
ESPドメインをサポートするには、Singular SDKが初期化されるたびに、configオブジェクトのespDomains設定オプションにカスタムトラッキングドメインを追加してください。
func getConfig() -> SingularConfig? {
guard let config = SingularConfig(apiKey: "SDK_KEY", andSecret: "SDK_SECRET") else {
return nil
}
// Add ESP domains for email campaign tracking
config.espDomains = ["links.mywebsite.com"]
return config
}
- (SingularConfig *)getConfig {
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"SDK_KEY"
andSecret:@"SDK_SECRET"];
// Add ESP domains for email campaign tracking
config.espDomains = @[@"links.mywebsite.com"];
return config;
}