Firebase Dynamic Links の Builder API を使用して短いダイナミック リンクまたは長いダイナミック リンクを作成できます。この API は、長いダイナミック リンクと、ダイナミック リンクのパラメータを含むオブジェクトのいずれかを受け入れ、次の例のような URL を返します。
https://example.com/link/WXYZ https://example.page.link/WXYZ
前提条件
作業を開始する前に、iOS プロジェクトに Firebase を追加していることを確認してください。
Firebase と Dynamic Links SDK を設定する
Swift Package Manager を使用して Firebase の依存関係のインストールと管理を行います。
- Xcode でアプリのプロジェクトを開いたまま、[File] > [Add Packages] の順に移動します。
- プロンプトが表示されたら、Firebase Apple プラットフォーム SDK リポジトリを追加します。
- Dynamic Links ライブラリを選択します。
- Dynamic Links でのエクスペリエンスを最適化するために、Firebase プロジェクトで Google アナリティクスを有効にして、Google アナリティクス用の Firebase SDK をアプリに追加することをおすすめします。ライブラリで IDFA の収集を行う / 行わないを選択できます。
- 上記の作業が完了すると、Xcode は依存関係の解決とバックグラウンドでのダウンロードを自動的に開始します。
https://github.com/firebase/firebase-ios-sdk
次に、構成ステップを行います。
- Firebase コンソールで [Dynamic Links] セクションを開きます。
-
利用規約に同意せずに Dynamic Links の URI 接頭辞を設定している場合、プロンプトに従って利用規約に同意します。
Dynamic Links の URI 接頭辞がすでに存在する場合は、それをメモしておきます。ダイナミック リンクをプログラムで作成する場合は、ダイナミック リンクのドメインを指定する必要があります。
- 推奨: ディープリンクやフォールバック リンクで許可する URL パターンを指定します。これにより、不正なユーザーがお客様のドメインからお客様の管理外のサイトへリダイレクトする Dynamic Links を作成することを防ぎます。 特定の URL パターンを許可するをご覧ください。
-
アプリの App Store ID と App ID Prefix がアプリの設定で指定されていることを確認します。アプリの設定を表示して編集するには、Firebase プロジェクトの [設定] ページに移動して iOS アプリを選択します。
Dynamic Links のドメインにホストされている
apple-app-site-association
ファイルを開きます。iOS アプリで Dynamic Links を使用するために Firebase プロジェクトが正しく構成されていることを確認します。Firebase は、apple-app-site-association
ファイルをドメインのルートと.well-known
サブディレクトリから提供します。次に例を示します。https://example.com/apple-app-site-association https://example.com/.well-known/apple-app-site-association
アプリが接続されている場合、
apple-app-site-association
ファイルにはアプリの App ID Prefix とバンドル ID への参照が含まれます。次に例を示します。{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}
details
プロパティが空の場合、App ID Prefix が指定済みであることを再確認してください。App ID Prefix はチーム ID と同じでない場合があるので注意してください。
アプリに Firebase を追加する
UIApplicationDelegate
にFirebaseCore
モジュールと、アプリのデリゲートが使用する他の Firebase モジュールをインポートします。たとえば、Cloud Firestore と Authentication を使用するには、次のようにします。SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- アプリ デリゲートの
application(_:didFinishLaunchingWithOptions:)
メソッドで、FirebaseApp
共有インスタンスを構成します。SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- SwiftUI を使用している場合は、アプリケーション デリゲートを作成し、
UIApplicationDelegateAdaptor
またはNSApplicationDelegateAdaptor
を介してApp
構造体に接続する必要があります。また、アプリ デリゲートのメソッドの実装入れ替えを無効にする必要があります。詳細については、SwiftUI の手順をご覧ください。SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
Firebase コンソールを使用する
テスト用に、またはマーケティング チームがソーシャル メディア投稿などで使用できるリンクを簡単に作成できるよう、単一の Dynamic Links を生成する必要がある場合、Firebase コンソールを開き、各手順が示されたフォームに沿って手動で作成するのが最も簡単です。
iOS Builder API を使用する
iOS Builder API を使用して、パラメータから Dynamic Links を作成したり、長いダイナミック リンクを短縮したりできます。
パラメータからダイナミック リンクを作成する
ダイナミック リンクを作成するには、新しい DynamicLinkComponents
オブジェクトを作成し、オブジェクトに対応するプロパティを設定してダイナミック リンクのパラメータを指定します。続いて、オブジェクトの url
プロパティから長いリンクを取得するか、shorten()
を呼び出して短いリンクを取得します。
次のシンプルな例では、iOS 上の iOS アプリと Android 上のアプリ com.example.android
で開く、https://www.example.com/my-page
への長いダイナミック リンクを作成します。
Swift
guard let link = URL(string: "https://www.example.com/my-page") else { return } let dynamicLinksDomainURIPrefix = "https://example.com/link" let linkBuilder = DynamicLinkComponents(link: link, domainURIPrefix: dynamicLinksDomainURIPRefix) linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios") linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android") guard let longDynamicLink = linkBuilder.url else { return } print("The long URL is: \(longDynamicLink)")
Objective-C
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"]; NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link"; FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc] initWithLink:link domainURIPrefix:dynamicLinksDomainURIPrefix]; linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc] initWithBundleID:@"com.example.ios"]; linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc] initWithPackageName:@"com.example.android"]; NSLog(@"The long URL is: %@", linkBuilder.url);
短いダイナミック リンクを作成するには、同じ方法で DynamicLinkComponents
を作成してから shorten()
を呼び出します。
短いリンクの作成にはネットワーク呼び出しが必要となるため、shorten()
はリンクを直接返すのではなく、完了ハンドラを受け取ります。完了ハンドラはリクエストの完了時に呼び出されます。次に例を示します。
Swift
linkBuilder.shorten() { url, warnings, error in guard let url = url, error != nil else { return } print("The short URL is: \(url)") }
Objective-C
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL, NSArray<NSString *> * _Nullable warnings, NSError * _Nullable error) { if (error || shortURL == nil) { return; } NSLog(@"The short URL is: %@", shortURL); }];
デフォルトでは、短いダイナミック リンクは 17 文字のリンク サフィックス付きで生成されるため、他の誰かが有効なダイナミック リンクを推測することはほぼ不可能です。アプリの使用状況を考慮した上で、他の誰かが短いリンクを知ったとしても無害であると考えられる場合、生成されるサフィックスは、一意にするのに必要なだけの長さがあれば十分であると判断できます。そのようなサフィックスを生成するには、dynamicLinkComponentsOptions
プロパティを設定します。
Swift
linkBuilder.options = DynamicLinkComponentsOptions() linkBuilder.options.pathLength = .short linkBuilder.shorten() { url, warnings, error in guard let url = url, error != nil else { return } print("The short URL is: \(url)") }
Objective-C
linkBuilder.dynamicLinkComponentsOptions = [[FIRDynamicLinkComponentsOptions alloc] init]; linkBuilder.dynamicLinkComponentsOptions.pathLength = FIRShortDynamicLinkPathLengthShort; [linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL, NSArray<NSString *> * _Nullable warnings, NSError * _Nullable error) { if (error || shortURL == nil) { return; } NSLog(@"The short URL is: %@", shortURL); }];
ダイナミック リンクのパラメータ
Dynamic Link Builder API を使用して、サポートされている任意のパラメータが設定されたダイナミック リンクを作成できます。詳細については、API リファレンスをご覧ください。
次の例では、いくつかの一般的なパラメータが設定されたダイナミック リンクを作成します。
Swift
guard let link = URL(string: "https://www.example.com/my-page") else { return } let dynamicLinksDomainURIPrefix = "https://example.com/link" let linkBuilder = DynamicLinkComponents(link: link, domainURIPRefix: dynamicLinksDomainURIPrefix) linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.example.ios") linkBuilder.iOSParameters.appStoreID = "123456789" linkBuilder.iOSParameters.minimumAppVersion = "1.2.3" linkBuilder.androidParameters = DynamicLinkAndroidParameters(packageName: "com.example.android") linkBuilder.androidParameters.minimumVersion = 123 linkBuilder.analyticsParameters = DynamicLinkGoogleAnalyticsParameters(source: "orkut", medium: "social", campaign: "example-promo") linkBuilder.iTunesConnectParameters = DynamicLinkItunesConnectAnalyticsParameters() linkBuilder.iTunesConnectParameters.providerToken = "123456" linkBuilder.iTunesConnectParameters.campaignToken = "example-promo" linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters() linkBuilder.socialMetaTagParameters.title = "Example of a Dynamic Link" linkBuilder.socialMetaTagParameters.descriptionText = "This link works whether the app is installed or not!" linkBuilder.socialMetaTagParameters.imageURL = "https://www.example.com/my-image.jpg" guard let longDynamicLink = linkBuilder.url else { return } print("The long URL is: \(longDynamicLink)")
Objective-C
NSURL *link = [[NSURL alloc] initWithString:@"https://www.example.com/my-page"]; NSString *dynamicLinksDomainURIPrefix = @"https://example.com/link"; FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc] initWithLink:link domainURIPrefix:dynamicLinksDomainURIPrefix]; linkBuilder.iOSParameters = [[FIRDynamicLinkIOSParameters alloc] initWithBundleID:@"com.example.ios"]; linkBuilder.iOSParameters.appStoreID = @"123456789"; linkBuilder.iOSParameters.minimumAppVersion = @"1.2.3"; linkBuilder.androidParameters = [[FIRDynamicLinkAndroidParameters alloc] initWithPackageName:@"com.example.android"]; linkBuilder.androidParameters.minimumVersion = 123; linkBuilder.analyticsParameters = [[FIRDynamicLinkGoogleAnalyticsParameters alloc] initWithSource:@"orkut" medium:@"social" campaign:@"example-promo"]; linkBuilder.iTunesConnectParameters = [[FIRDynamicLinkItunesConnectAnalyticsParameters alloc] init]; linkBuilder.iTunesConnectParameters.providerToken = @"123456"; linkBuilder.iTunesConnectParameters.campaignToken = @"example-promo"; linkBuilder.socialMetaTagParameters = [[FIRDynamicLinkSocialMetaTagParameters alloc] init]; linkBuilder.socialMetaTagParameters.title = @"Example of a Dynamic Link"; linkBuilder.socialMetaTagParameters.descriptionText = @"This link works whether the app is installed or not!"; linkBuilder.socialMetaTagParameters.imageURL = @"https://www.example.com/my-image.jpg"; NSLog(@"The long URL is: %@", linkBuilder.url);
ダイナミック リンクのパラメータは、次のオブジェクトとプロパティで設定できます。
DynamicLinkComponents | |
---|---|
link |
アプリで開くリンク。アプリで処理可能な URL を指定します。通常、この URL はアプリ固有のロジック(ユーザーへのクーポン付与や特定の開始画面の表示など)を起動するアプリのコンテンツやペイロードへのリンクです。このリンクは適切な形式の URL で、正しく URL エンコードされている必要があります。HTTP または HTTPS のいずれかを使用してください。他のダイナミック リンクは使用できません。 |
domainURIPrefix | ダイナミック リンクの URL 接頭辞。Firebase コンソールで確認できます。ダイナミック リンクのドメインは次の例のようになります。
https://example.com/link https://example.page.link |
DynamicLinkAndroidParameters | |
---|---|
fallbackURL | アプリがインストールされていない場合に開くリンク。モバイルウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに Play ストアからアプリをインストールする以外の動作をさせる場合に指定します。 |
minimumVersion | リンクを開くことができるアプリの最小バージョンの versionCode 。インストールされているアプリのバージョンがそれよりも古い場合、ユーザーは Play ストアにリダイレクトされ、アプリのアップグレードを促されます。 |
DynamicLinkIOSParameters | |
---|---|
appStoreID | アプリの App Store ID。アプリがインストールされていない場合にユーザーを App Store に転送するために使用します。 |
fallbackURL | アプリがインストールされていない場合に開くリンク。モバイルウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作をさせる場合に指定します。 |
customScheme | アプリのカスタム URL スキーム(アプリのバンドル ID とは異なるものを定義している場合)。 |
iPadFallbackURL | アプリがインストールされていない場合に iPad で開くリンク。ウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作をさせる場合に指定します。 |
iPadBundleID | iPad でリンクを開くために使う iOS アプリのバンドル ID。Firebase コンソールの [概要] ページで、アプリとプロジェクトが接続されている必要があります。 |
minimumAppVersion | リンクを開くことができるアプリの最小バージョンのバージョン番号。このフラグは、リンクを開くとアプリに渡されますが、処理方法はアプリ側で決める必要があります。 |
DynamicLinkNavigationInfoParameters | |
---|---|
forcedRedirectEnabled | 「1」に設定されている場合は、ダイナミック リンクが開かれたときにアプリのプレビュー ページをスキップし、代わりにアプリまたはストアにリダイレクトします。アプリのプレビュー ページ(デフォルトで有効になっています)は、ユーザーがアプリでダイナミック リンクを開いたときにユーザーを最も適切な宛先に確実に転送できます。ただし、このページなしでダイナミック リンクを確実に開くことができるアプリのみでダイナミック リンクが開かれると想定する場合は、このパラメータを使用してアプリのプレビュー ページを無効にできます。このパラメータは、iOS のダイナミック リンクの動作のみに影響します。 |
DynamicLinkSocialMetaTagParameters | |
---|---|
title | ソーシャル投稿でダイナミック リンクを共有するときに使用するタイトル。 |
descriptionText | ソーシャル投稿でダイナミック リンクを共有するときに使用する説明。 |
imageURL | このリンクに関連する画像への URL。画像は 300 x 200 ピクセル以上、300 KB 未満である必要があります。 |
DynamicLinkGoogleAnalyticsParameters | |
---|---|
source medium campaign term content |
Google Play の解析パラメータ。これらのパラメータ(utm_source 、utm_medium 、utm_campaign 、utm_term 、utm_content )は、リンクのペイロードに追加されるだけでなく、Play ストアにも渡されます。 |
DynamicLinkItunesConnectAnalyticsParameters | |
---|---|
providerToken affiliateToken campaignToken |
iTunes Connect の解析パラメータ。これらのパラメータ(pt 、at 、ct )は App Store に渡されます。 |
長いダイナミック リンクを短縮する
長いダイナミック リンクを短縮する場合に、短いサフィックスが付加されたリンクを生成するのであれば、長いダイナミック リンクを DynamicLinkComponentsOptions
オブジェクトとともに shortenURL(url:options:)
に渡します。
Swift
DynamicLinkComponents.shortenURL(url: longLinkUrl, options: nil) { url, warnings, error in guard let url = url, error != nil else { return } print("The short URL is: \(url)") }
Objective-C
[FIRDynamicLinkComponents shortenURL:longLinkUrl options:nil completion:^(NSURL * _Nullable shortURL, NSArray<NSString *> * _Nullable warnings, NSError * _Nullable error) { if (error || shortURL == nil) { return; } NSLog(@"The short URL is: %@", shortURL); }];
Dynamic Links のカスタム URL スキームの指定
Dynamic Links はデフォルトで、アプリを開くために必要な URL スキームとしてアプリのバンドル ID を使用します。実装をシンプルにしておくために、このデフォルト値を変更しないことをおすすめします。
ただし、他の目的でカスタム URL スキームをすでに使用している場合は、Dynamic Links にも同じカスタム URL スキームを使用するのが望ましいこともあります。このような場合は、次の手順で Firebase Dynamic Links に別の URL スキームを指定できます。
- アプリを設定するときは、
FirebaseApp
共有インスタンスを構成する前に、アプリで使用するデフォルトの URL スキームを指定します。Swift
注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication .LaunchOptionsKey: Any]?) -> Bool { // Set deepLinkURLScheme to the custom URL scheme you defined in your // Xcode project. FirebaseOptions.defaultOptions()?.deepLinkURLScheme = customURLScheme FirebaseApp.configure() return true }
Objective-C
注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Set deepLinkURLScheme to the custom URL scheme you defined in your // Xcode project. [FIROptions defaultOptions].deepLinkURLScheme = CUSTOM_URL_SCHEME; [FIRApp configure]; return YES; }
- ダイナミック リンクを作成するたびに、アプリで使用されるカスタム URL スキームを指定する必要があります。これは、Firebase コンソールを使用して、Builder API で
customScheme
を設定する、URL にius
パラメータを指定する、REST API にiosCustomScheme
パラメータを送信するといった方法で行えます。
次のステップ
Dynamic Links を作成した後は、ダイナミック リンクを受信するアプリを設定し、ユーザーがアプリを開いた後にアプリ内の適切な場所にユーザーを送信する必要があります。
アプリでダイナミック リンクを受信する方法については、iOS、Android、C++、Unity のドキュメントをご覧ください。