iOS で Dynamic Links を作成する

Firebase Dynamic Links の Builder API を使用して短いダイナミック リンクまたは長いダイナミック リンクを作成できます。この API は、長いダイナミック リンクと、ダイナミック リンクのパラメータを含むオブジェクトのいずれかを受け入れ、次の例のような URL を返します。

https://example.com/link/WXYZ
https://example.page.link/WXYZ

前提条件

作業を開始する前に、iOS プロジェクトに Firebase を追加していることを確認してください。

Swift Package Manager を使用して Firebase の依存関係のインストールと管理を行います。

  1. Xcode でアプリのプロジェクトを開いたまま、[File] > [Add Packages] の順に移動します。
  2. プロンプトが表示されたら、Firebase Apple プラットフォーム SDK リポジトリを追加します。
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Dynamic Links ライブラリを選択します。
  5. Dynamic Links でのエクスペリエンスを最適化するために、Firebase プロジェクトで Google アナリティクスを有効にして、Google アナリティクス用の Firebase SDK をアプリに追加することをおすすめします。ライブラリで IDFA の収集を行う / 行わないを選択できます。
  6. 上記の作業が完了すると、Xcode は依存関係の解決とバックグラウンドでのダウンロードを自動的に開始します。

次に、構成ステップを行います。

  1. Firebase コンソールで [Dynamic Links] セクションを開きます。
  2. 利用規約に同意せずに Dynamic Links の URI 接頭辞を設定している場合、プロンプトに従って利用規約に同意します。

    Dynamic Links の URI 接頭辞がすでに存在する場合は、それをメモしておきます。ダイナミック リンクをプログラムで作成する場合は、ダイナミック リンクのドメインを指定する必要があります。

  3. 推奨: ディープリンクやフォールバック リンクで許可する URL パターンを指定します。これにより、不正なユーザーがお客様のドメインからお客様の管理外のサイトへリダイレクトする Dynamic Links を作成することを防ぎます。 特定の URL パターンを許可するをご覧ください。
  4. アプリの 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 を追加する

  1. UIApplicationDelegateFirebaseCore モジュールと、アプリのデリゲートが使用する他の 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;
    // ...
          
  2. アプリ デリゲートの 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];
  3. 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

注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。
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

注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。
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

注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。
linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

Objective-C

注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。
[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

注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。
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

注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。
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

注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。
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

注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。
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_sourceutm_mediumutm_campaignutm_termutm_content)は、リンクのペイロードに追加されるだけでなく、Play ストアにも渡されます。
DynamicLinkItunesConnectAnalyticsParameters
providerToken
affiliateToken
campaignToken
iTunes Connect の解析パラメータ。これらのパラメータ(ptatct)は App Store に渡されます。

長いダイナミック リンクを短縮する場合に、短いサフィックスが付加されたリンクを生成するのであれば、長いダイナミック リンクを DynamicLinkComponentsOptions オブジェクトとともに shortenURL(url:options:) に渡します。

Swift

注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。
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

注: この Firebase プロダクトは、macOS、Mac Catalyst、tvOS、watchOS の各ターゲットでは使用できません。
[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 スキームとしてアプリのバンドル ID を使用します。実装をシンプルにしておくために、このデフォルト値を変更しないことをおすすめします。

ただし、他の目的でカスタム URL スキームをすでに使用している場合は、Dynamic Links にも同じカスタム URL スキームを使用するのが望ましいこともあります。このような場合は、次の手順で Firebase Dynamic Links に別の URL スキームを指定できます。

  1. アプリを設定するときは、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;
    }
  2. ダイナミック リンクを作成するたびに、アプリで使用されるカスタム URL スキームを指定する必要があります。これは、Firebase コンソールを使用して、Builder API で customScheme を設定する、URL に ius パラメータを指定する、REST API に iosCustomScheme パラメータを送信するといった方法で行えます。

次のステップ

Dynamic Links を作成した後は、ダイナミック リンクを受信するアプリを設定し、ユーザーがアプリを開いた後にアプリ内の適切な場所にユーザーを送信する必要があります。

アプリでダイナミック リンクを受信する方法については、iOSAndroidC++Unity のドキュメントをご覧ください。