ディープリンクのサポートを追加
ディープリンク は、アプリ内の特定のコンテンツにユーザーを誘導します。アプリがインストール されているデバイスでユーザーがディープリンクをタップすると、アプリが 製品ページや特定のエクスペリエンスなど、意図したコンテンツに直接開きます。
Singularのトラッキングリンクは、標準のディープリンク(インストール済みアプリ用) とディファードディープリンク(新規インストール用)の両方をサポートします。 詳細については、 ディープリンクFAQ および Singular Links FAQ を参照してください。
要件
前提条件
アプリでディープリンクを有効化するには、 Singular Linksの前提条件 を完了してください。
必要な構成ステップ:
- Associated Domains: Xcodeで、 Signing & Capabilities > Associated Domains にSingularカスタムサブドメインを追加します
- URL Types: Info > URL Types で、アプリスキームをURL Typesに追加します
- Singularプラットフォーム: Singularプラットフォームの Apps ページで、Apple Developerの Team ID と Scheme を追加します
注:
- アプリがすでにiOS Universal Linksを使用するように構成されている場合、 Universal Linkドメイン はすでにAssociated Domainsに存在し、そのまま残すことができます。 このドメインは、以下の高度な設定セクションで説明されているように、 Supported Domains構成オプション に追加する必要があります
- また、 Singularカスタムリンクドメイン も含める必要があります。 これにより、Singularはマーケティングキャンペーンのアトリビューションを 追跡し、これらのキャンペーンからのディープリンクを処理できます
Singular Linksハンドラーの実装
SingularLinkHandlerは、アプリが開いたときにSingularトラッキングリンクから ディープリンク、ディファードディープリンク、パススルーパラメーターを 取得するためのコールバックメカニズムを提供します。
使用可能なパラメーター:
- Deep Link: リンクをクリックしたユーザー向けのアプリ内宛先URL
- Deferred Deep Link: リンクをクリックした後にアプリをインストールしたユーザー向けの宛先URL
- Passthrough: 追加のコンテキストのためにトラッキングリンクを通じて渡されるカスタムデータ
- URL Parameters: トラッキングリンクURLのすべてのクエリパラメーター
SDK構成
SingularLinkHandlerをConfigに追加
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をリセットします(Settings > Privacy > Apple Advertising > Reset 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がディープリンクとパススルー値を抽出します
-
値が
isDeferred = falseとともにSingularLinkHandlerを通じて返されます
Passthroughパラメーター
パススルーパラメーターを使用して、トラッキングリンクのクリックから追加データを取得します。
トラッキングリンクにパススルーパラメーターが含まれている場合、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以外のUniversal Linksの処理
アトリビューショントラッキングのために、Google AdsやFacebookなどの サードパーティパートナーのUniversal Linksをサポートします。
Singular iOS SDKバージョン12.0.3以降では、Singular以外のUniversal Linksがデフォルトでサポートされます。
非推奨の機能:
supportedDomains
プロパティと
startSession:...andSupportedDomains:
オーバーロードは、現在のSDKで
__attribute__((deprecated))
として注釈されています。以下のブロックはレガシーSDKバージョン(12.0.3未満)でのみ
表示されます。新しいコードで
supportedDomains
を設定し続けるのではなく、SDKをアップグレードしてください。
古いバージョンのSDKでサードパーティのディープリンクをサポートするには:
- Singular SDKが初期化されるたびに、Configオブジェクトの supportedDomains 構成オプションに、関連付けられたすべてのドメイン( sng.link を除く)を追加します
- これによりサードパーティのディープリンク動作は可能になりますが、 ディープリンクへのアトリビューションは許可されません。アトリビューションには、 引き続きSingularトラッキングリンクを使用する必要があります
- supportedDomains 機能は、アプリがUniversal Links用に構成されており、現在自身のドメインで 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カスタムトラッキングリンクドメインのサポート
メールキャンペーンのアトリビューションのために、メールサービスプロバイダー (ESP)が提供するUniversal Linksを有効にします。
ESPドメインはHTTPS対応である必要があります。Appleは、iOSアプリが リダイレクトなしでHTTPS対応エンドポイントからapple-app-site-association ファイルを取得することを 要求 しています。サイトの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;
}