iOS でダイナミック リンクを受信する

作成した Firebase Dynamic Links を受信するには、アプリに Dynamic Links SDK を組み込み、アプリの読み込み時に handleUniversalLink: メソッドと dynamicLinkFromCustomSchemeURL: メソッドを呼び出して、ダイナミック リンクで渡されたデータを取得する必要があります。

前提条件

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

Firebase と Dynamic Links SDK を設定する

  1. Firebase を iOS プロジェクトに追加しますPodfile で次のポッドを追加します。
    pod 'Firebase/Core'
    pod 'Firebase/DynamicLinks'
  2. pod install を実行して、作成した .xcworkspace ファイルを開きます。
  3. Firebase コンソールで [Dynamic Links] セクションを開きます。利用規約に同意するための画面が表示された場合は、同意します。
  4. アプリの App Store ID と App ID Prefix がアプリの設定で指定されていることを確認します。アプリの設定を表示して編集するには、Firebase プロジェクトの [設定] ページに移動して iOS アプリを選択します。

    次の URL を開くと、iOS アプリでダイナミック リンクを使用するよう Firebase プロジェクトが正しく構成されているか確認できます。

    https://your_dynamic_links_domain/apple-app-site-association

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

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

    details フィールドが空の場合、App ID Prefix を指定したことを再確認してください。App ID Prefix はチーム ID と同じでない場合があるので注意してください。

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

  1. アプリの Xcode プロジェクトの [Info] タブで、ダイナミック リンクに使用する新しい URL タイプを作成します。[Identifier] フィールドに一意の値を設定し、[URL scheme] フィールドにはバンドル ID を設定します。バンドル ID は、ダイナミック リンクにより使用されるデフォルトの URL スキームです。
  2. アプリの Xcode プロジェクトの [Capabilities] タブで関連ドメインを有効にし、[Associated Domains] リストに次のドメインを追加します。
    applinks:your_dynamic_links_domain
  3. ダイナミック リンクを受信するドメインを自由にカスタマイズするには、Xcode プロジェクトの Info.plist ファイル内で FirebaseDynamicLinksCustomDomains キーを作成し、アプリの Dynamic Links URL 接頭辞に追加します。例:
    FirebaseDynamicLinksCustomDomains
    
      https://example.com/promos
      https://example.com/links/share
    
    
  4. UIApplicationDelegate で Firebase モジュールをインポートします。

    Swift

    import Firebase
    

    Objective-C

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

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  6. 次に、application:continueUserActivity:restorationHandler: メソッドを使用して、アプリがインストールされている場合にユニバーサル リンクとして受信されるリンクを処理します(iOS 9 以降)。

    Swift

    func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
      let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
        // ...
      }
    
      return handled
    }

    Objective-C

    - (BOOL)application:(UIApplication *)application
    continueUserActivity:(nonnull NSUserActivity *)userActivity
     restorationHandler:
    #if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0)
    (nonnull void (^)(NSArray<id<UIUserActivityRestoring>> *_Nullable))restorationHandler {
    #else
        (nonnull void (^)(NSArray *_Nullable))restorationHandler {
    #endif  // __IPHONE_12_0
      BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL
                                                              completion:^(FIRDynamicLink * _Nullable dynamicLink,
                                                                           NSError * _Nullable error) {
                                                                // ...
                                                              }];
      return handled;
    }
  7. 最後に、application:openURL:sourceApplication:annotation: メソッド(iOS 8 以前)と application:openURL:options: メソッド(iOS 9 以降)で、アプリのカスタム URL スキームを通して受信したリンクを処理します。これらのメソッドが呼び出されるのは、アプリが iOS 8 以前でリンクを受信したときと、iOS(バージョンを問わず)にアプリをインストールした後にアプリが初めて開かれたときです。

    (iOS のすべてのバージョンに該当)アプリの最初の起動時にダイナミック リンクが見つからなかった場合、このメソッドは FIRDynamicLinkurlnil が設定された状態で呼び出されます。これは、対応する保留中のダイナミック リンクを SDK が見つけることができなかったことを示します。

    Swift

    @available(iOS 9.0, *)
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
      return application(app, open: url,
                         sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
                         annotation: "")
    }
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
      if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
        // 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
    }

    Objective-C

    - (BOOL)application:(UIApplication *)app
                openURL:(NSURL *)url
                options:(NSDictionary<NSString *, id> *)options {
      return [self application:app
                       openURL:url
             sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                    annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
    }
    
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
      FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
    
      if (dynamicLink) {
        if (dynamicLink.url) {
          // Handle the deep link. For example, show the deep-linked content,
          // apply a promotional offer to the user's account or show customized onboarding view.
          // ...
        } else {
          // Dynamic link has empty deep link. This situation will happens if
          // Firebase Dynamic Links iOS SDK tried to retrieve pending dynamic link,
          // but pending link is not available for this device/App combination.
          // At this point you may display default onboarding view.
        }
        return YES;
      }
      return NO;
    }

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

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