iOS でダイナミック リンクを作成する

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

https://example.page.link/WXYZ

前提条件

Firebase Dynamic Links は iOS 8 以降で動作します。アプリのターゲットに iOS 7 を設定することはできますが、Firebase Dynamic Links SDK は iOS 8 以降で実行されるアプリでしか機能しません。

Firebase と Dynamic Links SDK を設定する

  1. Firebase を iOS プロジェクトに追加しますPodfile で次のポッドを追加します。
    pod 'Firebase/Core'
    pod 'Firebase/DynamicLinks'
        
  2. pod install を実行して、作成された .xcworkspace ファイルを開きます。
  3. Firebase コンソールで [Dynamic Links] セクションを開きます。
  4. 利用規約に同意せずに Dynamic Links ドメインを設定している場合、プロンプトに従って利用規約に同意します。

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

  5. アプリの App Store ID と App ID Prefix がアプリの設定で指定されていることを確認します。アプリの設定を表示して編集するには、Firebase プロジェクトの [設定] ページに移動して iOS アプリを選択します。

    ダイナミック リンクのドメインにホストされている apple-app-site-association ファイルを開き、iOS アプリでダイナミック リンクを使用するように Firebase プロジェクトが正しく構成されていることを確認します。次に例を示します。

    https://example.page.link/apple-app-site-association

    アプリが接続されている場合、アプリの App Store ID とバンドル ID の参照が apple-app-site-association ファイルに含まれます。次に例を示します。

    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}

    details プロパティが空の場合、App ID Prefix が指定済みであることを再確認してください。App ID Prefix はチーム ID と同じでない場合があるので注意してください。

アプリに Firebase を追加する

  1. UIApplicationDelegate で Firebase モジュールをインポートします。

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  2. FirebaseApp 共有インスタンスを構成します。通常はアプリケーションの application:didFinishLaunchingWithOptions: メソッドで行います。

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    

Firebase コンソールを使用する

テスト用に、またはマーケティング チームがソーシャル メディア投稿などで使用できるリンクを簡単に作成できるように、1 つのダイナミック リンクを生成する必要がある場合、Firebase コンソールを開き、各手順が示されたフォームに沿って手動で作成するのが最も簡単です。

iOS Builder API を使用する

iOS Builder API を使用して、パラメータからダイナミック リンクを作成したり、長いダイナミック リンクを短縮したりできます。

パラメータからダイナミック リンクを作成する

ダイナミック リンクを作成するには、新しい 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 dynamicLinksDomain = "example.page.link"
let linkBuilder = DynamicLinkComponents(link: link, domain: dynamicLinksDomain)
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 *dynamicLinksDomain = @"example.page.link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                               domain:dynamicLinksDomain];
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.dynamicLinkComponentsOptions = DynamicLinkComponentsOptions()
linkBuilder.dynamicLinkComponentsOptions.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 dynamicLinksDomain = "example.page.link"
let linkBuilder = DynamicLinkComponents(link: link, domain: dynamicLinksDomain)

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 *dynamicLinksDomain = @"example.page.link";
FIRDynamicLinkComponents *linkBuilder = [[FIRDynamicLinkComponents alloc]
                                         initWithLink:link
                                         domain:dynamicLinksDomain];

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 のいずれかを使用してください。他のダイナミック リンクであってはなりません。

domain ダイナミック リンクのドメイン。これは、Firebase コンソールで確認できます。ダイナミック リンクのドメインは 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 のみですが、将来的には Android でも表示される可能性があります。このパラメータは、両方のプラットフォームでダイナミック リンクの動作に影響します。
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

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);
}];

ダイナミック リンクのカスタム URL スキームの指定

ダイナミック リンクはデフォルトで、アプリを開くために必要な URL スキームとしてアプリのバンドル ID を使用します。実装をシンプルにしておくために、このデフォルト値を変更しないことをおすすめします。

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

  1. アプリを設定するときは、FirebaseApp 共有インスタンスを構成する前に、アプリで使用するデフォルトの URL スキームを指定します。

    Swift

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      FirebaseOptions.defaultOptions()?.deepLinkURLScheme = self.customURLScheme
      FirebaseApp.configure()
    
      return true
    }

    Objective-C

    - (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 パラメータを送信するといった方法で行えます。

次のステップ

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

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

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。