iOS での Firebase Dynamic Links

Firebase Dynamic Links を使用すると、アプリの新しいユーザー個人に合わせたオンボーディング プロセスを提供できます。そのため、ユーザーの登録数、定着率、長期的なエンゲージメントを増やすことができます。

ダイナミック リンクはアプリへのリンクで、ユーザーがアプリをインストール済みかどうかにかかわらず機能します。インストールされていないアプリへのダイナミック リンクをユーザーが開くと、そのアプリの App Store ページが開き、そこからアプリをインストールすることができます。ユーザーがアプリをインストールして開くと、アプリによってリンクが処理されます。

アプリがリンクを処理する方法として、iOS 8 ではカスタム URL スキームを使ってアプリのコンテンツを開いたり、iOS 9 以降ではユニバーサル リンクを処理したりすることがあります。または、アプリでリンクを処理して、ユーザーへのクーポン付与や特定の開始画面の表示といったアプリ固有のロジックを開始することもできます。

前提条件

Firebase Dynamic Links は iOS 8 以降で動作します。アプリで iOS 7 をターゲットに設定することもできますが、アプリが実行されているのが iOS 8 以降ではない場合、すべての Firebase Dynamic Links SDK の呼び出しは行われません。

Firebase と Dynamic Links SDK を設定する

  1. Firebase を iOS プロジェクトに追加しますPodfile で次のポッドを追加します。
     verbatim e58425e560bf02801c62857983667627 pod 'Firebase/DynamicLinks' endverbatim e58425e560bf02801c62857983667627 
  2. pod install を実行して、作成した .xcworkspace ファイルを開きます。
  3. Firebase console で [Dynamic Links] のセクションを開きます。
    1. 利用規約に同意するための画面が表示された場合は、同意します。
    2. [Dynamic Links] ページの上部に表示されている、プロジェクトのダイナミック リンクのドメインを書き写します。プログラムによってダイナミック リンクを作成するには、このドメインが必要となります。ダイナミック リンクのドメインは app_code.app.goo.gl のように表示されます。

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

    次の URL を開くと、iOS アプリで Dynamic Links を使用するよう Firebase プロジェクトが正しく設定されていることを確認できます。

    https://app_code.app.goo.gl/apple-app-site-association
    アプリが接続されている場合、アプリの App Store ID とバンドル ID の参照が apple-app-site-association ファイルに含まれます。次に例を示します。
    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}
    details フィールドが空の場合、チーム ID を既に指定したことを再確認してください。

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

Firebase console を使用すると、ダイナミック リンクを簡単に作成できます。ダイナミック リンクのパラメータを含む URL を構築して、プログラムによってダイナミック リンクを作成することもできます。

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

  1. Firebase console を開きます。
  2. サイドバー メニューの [Dynamic Links] をクリックし、[Dynamic Links] ページを開きます。このページには、作成済みダイナミック リンクの一覧とそれぞれのクリック率が表示されます。
  3. [新しいダイナミック リンク] をクリックし、[ダイナミック リンクを生成] が選択されていることを確認します。
  4. 作成するダイナミック リンクの基本情報を入力します。
    ダイナミック リンクの基本パラメータ
    リンク名 ダイナミック リンクの名前。
    リンク先 URL

    アプリで開くリンク。アプリ内のコンテンツへのリンクや、ユーザーへのクーポン付与や特定の開始画面の表示といったアプリ固有のロジックを開始する URL など、アプリで処理できるあらゆる URL を指定できます。このリンクは適切な形式の URL で、正しく URL エンコードされ、HTTP または HTTPS のスキームを使用している必要があります。

    iOS アプリ リンクを開くために使う iOS アプリのバンドル ID。Firebase console の [Overview] ページで、アプリとプロジェクトが接続されている必要があります。iOS アプリを開くダイナミック リンクでは必須のパラメータです。
    上記のパラメータを指定すると、基本的な機能を備えたダイナミック リンクを作成できます。ダイナミック リンクをクリックすると指定したアプリでリンクが開かれ、アプリがインストールされていない場合は、まずインストールが促されます。
  5. 省略可: 詳細オプションを指定して、ダイナミック リンクの動作をきめ細かく調整することもできます。
    iOS 向け詳細パラメータ
    フォールバック リンク アプリがインストールされていない場合に開くリンク。モバイルウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作をさせる場合に指定します。
    iOS カスタム スキーム アプリのカスタム URL スキーム(アプリのバンドル ID とは異なるものを定義している場合)。
    iPad アプリ iPad でリンクを開くために使う iOS アプリのバンドル ID。Firebase console の [Overview] ページで、アプリとプロジェクトが接続されている必要があります。
    iPad のフォールバック リンク アプリがインストールされていない場合に iPad で開くリンク。ウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作をさせる場合に指定します。

プログラムによってダイナミック リンクを作成する

次のフォームを使用して URL を構築することで、プログラムによってダイナミック リンクを作成することもできます。

https://domain/?link=your_link&ibi=bundle_id&ius=url_scheme[&ifl=fallback_link][&at=affiliate_token][&ct=campaign_text]
パラメータ
domain Firebase プロジェクトのダイナミック リンク ドメイン。この値は Firebase console の [Dynamic Links] セクションで確認できます。
link

アプリで開くリンク。アプリ内のコンテンツへのリンクや、ユーザーへのクーポン付与や特定の開始画面の表示といったアプリ固有のロジックを開始する URL など、アプリで処理できるあらゆる URL を指定できます。このリンクは適切な形式の URL で、正しく URL エンコードされ、HTTP または HTTPS のスキームを使用している必要があります。

ibi リンクを開くために使う iOS アプリのバンドル ID。Firebase console の [Overview] ページで、アプリとプロジェクトが接続されている必要があります。iOS アプリを開くダイナミック リンクでは必須のパラメータです。
ius 省略可: アプリのカスタム URL スキーム(アプリのバンドル ID とは異なるものを定義している場合)。
isi 省略可: アプリの App Store ID。アプリがインストールされていない場合に、ユーザーを App Store に転送するために使用されます。
ifl 省略可: アプリがインストールされていない場合に開くリンク。モバイルウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作をさせる場合に指定します。
ipbi 省略可: iPad でリンクを開くために使う iOS アプリのバンドル ID。Firebase console の [Overview] ページで、アプリとプロジェクトが接続されている必要があります。
ipfl 省略可: アプリがインストールされていない場合に iPad で開くリンク。ウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作をさせる場合に指定します。
  • utm_source
  • utm_medium
  • utm_campaign
  • utm_term
  • utm_content
  • gclid
省略可: カスタム キャンペーンのパラメータ。これらのパラメータは App Store に渡されます。
  • at
  • ct
  • mt
  • pt
省略可: App Store のアフィリエイト リンクのパラメータ。これらのパラメータは App Store に渡されます。
d 省略可: ダイナミック リンクを読み込む代わりにフローチャートを作成し、別のプラットフォームや設定でのダイナミック リンクの動作をプレビューするためにそれを使用できます。

次に例を示します。

https://example.app.goo.gl/?link=https://www.example.com/someresource&ibi=com.example.App&isi=1234567

アプリでダイナミック リンクを開く

  1. アプリの Xcode プロジェクトの [Info] タブで、ダイナミック リンクに使用する新しい URL タイプを作成します。[Identifier] フィールドに一意の値を設定し、[URL scheme] フィールドにはバンドル ID または一意の値を設定します。URL スキームとしてバンドル ID 以外の値を設定した場合は、ダイナミック リンクを作成するときにバンドル ID を指定する必要があります。
  2. アプリの Xcode プロジェクトの [Capabilities] タブで関連ドメインを有効にし、[Associated Domains] リストに次のドメインを追加します。
    applinks:app_code.app.goo.gl
  3. Firebase モジュールをインポートします。

    Objective-C

    @import Firebase;

    Swift

    import Firebase
  4. 次に、didFinishLaunchingWithOptions: メソッドで FIRApp 共有インスタンスを設定します。

    Objective-C

     verbatim 5b54f6412cf5e54e3d8be5bbf94969f6 - (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;
    } endverbatim 5b54f6412cf5e54e3d8be5bbf94969f6 

    Swift

     verbatim c2d348cf6201fbcecc128bf3b2023d53 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
      // Set deepLinkURLScheme to the custom URL scheme you defined in your
      // Xcode project.
      FIROptions.default().deepLinkURLScheme = self.customURLScheme
      FIRApp.configure()
    
      return true
    } endverbatim c2d348cf6201fbcecc128bf3b2023d53 
  5. 次に、application:openURL:sourceApplication:annotation: メソッド(iOS 8 以前)と application:openURL:options: メソッド(iOS 9)で、アプリのカスタム URL スキームを通して受信したリンクを処理します。これらのメソッドが呼び出されるのは、アプリが iOS 8 以前でリンクを受信したときと、iOS(バージョンを問わず)にアプリをインストールした後にアプリが初めて開かれたときです。

    Objective-C

     verbatim b2445ea6b1d445ec85c1d5372096e937 - (BOOL)application:(UIApplication *)app
                openURL:(NSURL *)url
                options:(NSDictionary<NSString *, id> *)options {
      return [self application:app openURL:url sourceApplication:nil annotation:@{}];
    }
    
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
      FIRDynamicLink *dynamicLink =
      [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
    
      if (dynamicLink) {
        // Handle the deep link. For example, show the deep-linked content or
        // apply a promotional offer to the user's account.
        // ...
        return YES;
      }
    
      return NO;
    } endverbatim b2445ea6b1d445ec85c1d5372096e937 

    Swift

     verbatim 30f2557341b75202f8cc29b19e8512da func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
      return application(app, open: url, sourceApplication: nil, annotation: [:])
    }
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
      let dynamicLink = FIRDynamicLinks.dynamicLinks()?.dynamicLink(fromCustomSchemeURL: url)
      if let dynamicLink = dynamicLink {
        // Handle the deep link. For example, show the deep-linked content or
        // apply a promotional offer to the user's account.
        // ...
        return true
      }
    
      return false
    } endverbatim 30f2557341b75202f8cc29b19e8512da 
  6. 最後に application:continueUserActivity:restorationHandler: メソッドで、iOS 9 以降でユニバーサル リンクとして受信されるリンクを処理します。

    Objective-C

     verbatim 44b008e038713093e5e928042232ac22 - (BOOL)application:(UIApplication *)application
    continueUserActivity:(NSUserActivity *)userActivity
     restorationHandler:(void (^)(NSArray *))restorationHandler {
    
      BOOL handled = [[FIRDynamicLinks dynamicLinks]
                 handleUniversalLink:userActivity.webpageURL
                 completion:^(FIRDynamicLink * _Nullable dynamicLink,
                              NSError * _Nullable error) {
                   // ...
                 }];
    
      return handled;
    } endverbatim 44b008e038713093e5e928042232ac22 

    Swift

     verbatim 720140cfd43d51a66afec5e558f0bc2f @available(iOS 8.0, *)
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
      guard let dynamicLinks = FIRDynamicLinks.dynamicLinks() else {
        return false
      }
      let handled = dynamicLinks.handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
        // ...
      }
    
      return handled
    } endverbatim 720140cfd43d51a66afec5e558f0bc2f 

ダイナミック リンクのデバッグ

ダイナミック リンクをデバッグするために、自動生成されたフローチャートを使用して、別のプラットフォームや設定でのダイナミック リンクの動作をプレビューすることができます。いずれかの長いダイナミック リンクに d=1 パラメータを追加することで、フローチャートを生成します。

アナリティクス データを表示

プロモーションやキャンペーンの有効性を評価するために、アプリでショート ダイナミック リンクを開くと、次のアナリティクス イベントが自動的にログ記録されます。ショート ダイナミック リンクは Firebase console で作成できます。

アナリティクス イベント
dynamic_link_first_open ダイナミック リンクを使用して初めてアプリを開くと、ログに記録されます。
dynamic_link_app_open ダイナミック リンクを使用してアプリを開くと、ログに記録されます。

Firebase console の [Analytics] セクションで、ログに記録したデータを確認できます。

Firebase Analytics でのダイナミック リンク イベント ダイナミック リンク イベントをコンバージョンとしてマークすると、[アトリビューション] ページでダイナミック リンクのパフォーマンスを確認できます。

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