作成した Firebase Dynamic Links を受け取るには、Dynamic Links SDK をアプリにhandleUniversalLink:
、アプリの読み込み時に handleUniversalLink: メソッドとdynamicLinkFromCustomSchemeURL:
メソッドを呼び出して、Dynamic Link で渡されたデータを取得する必要があります。
前提条件
開始する前に、必ずFirebase を iOS プロジェクトに追加してください。
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 コレクションのないライブラリまたは IDFA コレクションのあるライブラリのいずれかを選択できます。
- 完了すると、Xcode はバックグラウンドで依存関係の解決とダウンロードを自動的に開始します。
https://github.com/firebase/firebase-ios-sdk
ここで、いくつかの構成手順を実行します。
- Firebase コンソールで、[ Dynamic Links]セクションを開きます。プロンプトが表示されたら、利用規約に同意します。
アプリの App Store ID とアプリ ID プレフィックスがアプリの設定で指定されていることを確認してください。アプリの設定を表示および編集するには、Firebase プロジェクトの[設定] ページに移動し、iOS アプリを選択します。
次の URL を開くと、iOS アプリで Dynamic Links を使用するように Firebase プロジェクトが適切に構成されていることを確認できます。
https://your_dynamic_links_domain/apple-app-site-association
アプリが接続されている場合、
apple-app-site-association
ファイルには、アプリのアプリ ID プレフィックスとバンドル ID への参照が含まれています。例えば:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}
details
フィールドが空の場合は、App ID プレフィックスを指定したことを再確認してください。アプリ ID プレフィックスは、チーム ID と同じではない場合があることに注意してください。オプション: Dynamic Links SDK による iOS ペーストボードの使用を無効にします。
デフォルトでは、Dynamic Links SDK はペーストボードを使用して、インストール後のディープ リンクの信頼性を向上させます。ペーストボードを使用することで、Dynamic Links は、ユーザーが Dynamic Links を開いたときに最初にアプリをインストールする必要がある場合、ユーザーがインストール後に初めてアプリを開いたときに、元のリンクされたコンテンツにすぐに移動できるようにします。
これの欠点は、iOS 14 以降でペーストボードを使用すると通知がトリガーされることです。そのため、ユーザーがアプリを初めて開いたときに、ペーストボードに URL が含まれていると、アプリがペーストボードにアクセスしたという通知が表示され、混乱を招く可能性があります。
この動作を無効にするには、Xcode プロジェクトの
Info.plist
ファイルを編集し、FirebaseDeepLinkPasteboardRetrievalEnabled
キーをNO
に設定します。
アプリでダイナミック リンクを開く
- アプリの Xcode プロジェクトの [情報] タブで、ダイナミック リンクに使用する新しい URL タイプを作成します。識別子フィールドを一意の値に設定し、 URL スキームフィールドをバンドル ID に設定します。これは、Dynamic Links で使用されるデフォルトの URL スキームです。
- アプリの Xcode プロジェクトの [機能] タブで、関連付けられたドメインを有効にし、関連付けられたドメインのリストに次を追加します:
applinks:your_dynamic_links_domain
- フルカスタム ドメインでダイナミック リンクを受け取りたい場合は、Xcode プロジェクトの
Info.plist
ファイルで、FirebaseDynamicLinksCustomDomains
というキーを作成し、アプリのダイナミック リンク URL プレフィックスに設定します。例:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share -
UIApplicationDelegate
にFirebaseCore
モジュールをインポートし、アプリ デリゲートが使用する他のすべてのFirebase モジュールをインポートします。たとえば、Cloud Firestore と認証を使用するには:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
迅速
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()
迅速
// 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() } } } }
- 次に、
application:continueUserActivity:restorationHandler:
メソッドで、アプリが既にインストールされている場合にユニバーサル リンクとして受け取ったリンクを処理します。迅速
注:この製品は、macOS、Mac Catalyst、tvOS、または watchOS ターゲットでは使用できません。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
注:この製品は、macOS、Mac Catalyst、tvOS、または watchOS ターゲットでは使用できません。- (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; }
- 最後に、
application:openURL:options:
で、アプリのカスタム URL スキームを介して受信したリンクを処理します。このメソッドは、インストール後に初めてアプリを開いたときに呼び出されます。アプリの初回起動時にダイナミック リンクが見つからない場合、このメソッドは
DynamicLink
のurl
をnil
に設定して呼び出され、SDK が一致する保留中のダイナミック リンクを見つけられなかったことを示します。迅速
注:この製品は、macOS、Mac Catalyst、tvOS、または watchOS ターゲットでは使用できません。@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
注:この製品は、macOS、Mac Catalyst、tvOS、または watchOS ターゲットでは使用できません。- (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; }
作成した Firebase Dynamic Links を受け取るには、Dynamic Links SDK をアプリにhandleUniversalLink:
、アプリの読み込み時に handleUniversalLink: メソッドとdynamicLinkFromCustomSchemeURL:
メソッドを呼び出して、Dynamic Link で渡されたデータを取得する必要があります。
前提条件
開始する前に、必ずFirebase を iOS プロジェクトに追加してください。
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 コレクションのないライブラリまたは IDFA コレクションのあるライブラリのいずれかを選択できます。
- 完了すると、Xcode はバックグラウンドで依存関係の解決とダウンロードを自動的に開始します。
https://github.com/firebase/firebase-ios-sdk
ここで、いくつかの構成手順を実行します。
- Firebase コンソールで、[ Dynamic Links]セクションを開きます。プロンプトが表示されたら、利用規約に同意します。
アプリの App Store ID とアプリ ID プレフィックスがアプリの設定で指定されていることを確認してください。アプリの設定を表示および編集するには、Firebase プロジェクトの[設定] ページに移動し、iOS アプリを選択します。
次の URL を開くと、iOS アプリで Dynamic Links を使用するように Firebase プロジェクトが適切に構成されていることを確認できます。
https://your_dynamic_links_domain/apple-app-site-association
アプリが接続されている場合、
apple-app-site-association
ファイルには、アプリのアプリ ID プレフィックスとバンドル ID への参照が含まれています。例えば:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["NOT /_/*","/*"]}]}}
details
フィールドが空の場合は、App ID プレフィックスを指定したことを再確認してください。アプリ ID プレフィックスは、チーム ID と同じではない場合があることに注意してください。オプション: Dynamic Links SDK による iOS ペーストボードの使用を無効にします。
デフォルトでは、Dynamic Links SDK はペーストボードを使用して、インストール後のディープ リンクの信頼性を向上させます。ペーストボードを使用することで、Dynamic Links は、ユーザーが Dynamic Links を開いたときに最初にアプリをインストールする必要がある場合、ユーザーがインストール後に初めてアプリを開いたときに、元のリンクされたコンテンツにすぐに移動できるようにします。
これの欠点は、iOS 14 以降でペーストボードを使用すると通知がトリガーされることです。そのため、ユーザーがアプリを初めて開いたときに、ペーストボードに URL が含まれていると、アプリがペーストボードにアクセスしたという通知が表示され、混乱を招く可能性があります。
この動作を無効にするには、Xcode プロジェクトの
Info.plist
ファイルを編集し、FirebaseDeepLinkPasteboardRetrievalEnabled
キーをNO
に設定します。
アプリでダイナミック リンクを開く
- アプリの Xcode プロジェクトの [情報] タブで、ダイナミック リンクに使用する新しい URL タイプを作成します。識別子フィールドを一意の値に設定し、 URL スキームフィールドをバンドル ID に設定します。これは、Dynamic Links で使用されるデフォルトの URL スキームです。
- アプリの Xcode プロジェクトの [機能] タブで、関連付けられたドメインを有効にし、関連付けられたドメインのリストに次を追加します:
applinks:your_dynamic_links_domain
- フルカスタム ドメインでダイナミック リンクを受け取りたい場合は、Xcode プロジェクトの
Info.plist
ファイルで、FirebaseDynamicLinksCustomDomains
というキーを作成し、アプリのダイナミック リンク URL プレフィックスに設定します。例:FirebaseDynamicLinksCustomDomains https://example.com/promos https://example.com/links/share -
UIApplicationDelegate
にFirebaseCore
モジュールをインポートし、アプリ デリゲートが使用する他のすべてのFirebase モジュールをインポートします。たとえば、Cloud Firestore と認証を使用するには:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
迅速
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()
迅速
// 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() } } } }
- 次に、
application:continueUserActivity:restorationHandler:
メソッドで、アプリが既にインストールされている場合にユニバーサル リンクとして受け取ったリンクを処理します。迅速
注:この製品は、macOS、Mac Catalyst、tvOS、または watchOS ターゲットでは使用できません。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
注:この製品は、macOS、Mac Catalyst、tvOS、または watchOS ターゲットでは使用できません。- (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; }
- 最後に、
application:openURL:options:
で、アプリのカスタム URL スキームを介して受信したリンクを処理します。このメソッドは、インストール後に初めてアプリを開いたときに呼び出されます。アプリの初回起動時にダイナミック リンクが見つからない場合、このメソッドは
DynamicLink
のurl
をnil
に設定して呼び出され、SDK が一致する保留中のダイナミック リンクを見つけられなかったことを示します。迅速
注:この製品は、macOS、Mac Catalyst、tvOS、または watchOS ターゲットでは使用できません。@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
注:この製品は、macOS、Mac Catalyst、tvOS、または watchOS ターゲットでは使用できません。- (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; }