Catch up on highlights from Firebase at Google I/O 2023. Learn more

在 iOS 上創建動態鏈接

您可以使用 Firebase Dynamic Links Builder API 創建短動態鏈接或長動態鏈接。此 API 接受長動態鏈接或包含動態鏈接參數的對象,並返回如下例所示的 URL:

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

先決條件

在開始之前,請確保將Firebase 添加到您的 iOS 項目中

使用 Swift Package Manager 安裝和管理 Firebase 依賴項。

  1. 在 Xcode 中,打開您的應用程序項目,導航至File > Add Packages
  2. 出現提示時,添加 Firebase Apple 平台 SDK 存儲庫:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. 選擇動態鏈接庫。
  5. 為了獲得動態鏈接的最佳體驗,我們建議在您的 Firebase 項目中啟用 Google Analytics ,並將適用於 Google Analytics 的 Firebase SDK 添加到您的應用程序中。您可以選擇沒有 IDFA 集合或有 IDFA 集合的庫。
  6. 完成後,Xcode 將自動開始在後台解析和下載您的依賴項。

現在,執行一些配置步驟:

  1. 在 Firebase 控制台中,打開動態鏈接部分。
  2. 如果您尚未接受服務條款並為您的動態鏈接設置 URI 前綴,請在出現提示時執行此操作。

    如果您已有動態鏈接 URI 前綴,請記下它。當您以編程方式創建動態鏈接時,您需要提供它。

  3. 推薦:指定深層鏈接和後備鏈接中允許的 URL 模式。這樣做可以防止未經授權的各方創建從您的域重定向到不受您控制的網站的動態鏈接。請參閱允許特定的 URL 模式
  4. 確保您的應用程序的 App Store ID 和您的應用程序 ID 前綴已在您的應用程序設置中指定。要查看和編輯您應用的設置,請轉到您的 Firebase 項目的設置頁面並選擇您的 iOS 應用。

    通過打開動態鏈接域上託管的apple-app-site-association文件,確認您的 Firebase 項目已正確配置為在您的 iOS 應用程序中使用動態鏈接。 Firebase 將從域的根目錄以及.well-known子目錄提供apple-app-site-association文件。例如:

        https://example.com/apple-app-site-association
        https://example.com/.well-known/apple-app-site-association
        

    如果您的應用程序已連接, apple-app-site-association文件將包含對您應用程序的應用程序 ID 前綴和包 ID 的引用。例如:

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

    如果details屬性為空,請仔細檢查您是否指定了 App ID 前綴。請注意,您的 App ID 前綴可能與您的團隊 ID 不同。

將 Firebase 添加到您的應用

  1. 在您的UIApplicationDelegate中導入FirebaseCore模塊,以及您的應用委託使用的任何其他Firebase 模塊。例如,要使用 Cloud Firestore 和身份驗證:

    斯威夫特用戶界面

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    迅速

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    目標-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. 在您的應用委託的application(_:didFinishLaunchingWithOptions:)方法中配置一個FirebaseApp共享實例:

    斯威夫特用戶界面

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

    迅速

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

    目標-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. 如果您使用的是 SwiftUI,則必須創建一個應用程序委託並通過UIApplicationDelegateAdaptorNSApplicationDelegateAdaptor將其附加到您的App結構。您還必須禁用應用委託調配。有關詳細信息,請參閱SwiftUI 說明

    斯威夫特用戶界面

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

使用 Firebase 控制台

如果您想生成單個動態鏈接,無論是出於測試目的,還是為了讓您的營銷團隊輕鬆創建可用於社交媒體帖子等內容的鏈接,最簡單的方法是訪問Firebase 控制台並創建一個按照分步表格手動操作。

使用 iOS 構建器 API

您可以使用 iOS Builder API 從參數構建動態鏈接,或縮短較長的動態鏈接。

要創建動態鏈接,請創建一個新的DynamicLinkComponents對象並通過設置該對象的相應屬性來指定動態鏈接參數。然後,從對象的url屬性獲取長鏈接或通過調用shorten()獲取短鏈接。

以下最小示例創建了一個指向https://www.example.com/my-page長動態鏈接,該鏈接在 iOS 上打開您的 iOS 應用程序,在 Android 上打開應用程序com.example.android

迅速

注意:此 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)")

目標-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()不是直接返回鏈接,而是接受一個完成處理程序,該處理程序在請求完成時調用。例如:

迅速

注意:此 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)")
}

目標-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屬性來實現:

迅速

注意:此 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)")
}

目標-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 參考

以下示例創建了一個包含多個常用參數集的動態鏈接:

迅速

注意:此 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)")

目標-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);

您可以使用以下對象和屬性設置動態鏈接參數:

動態鏈接組件
關聯

您的應用程序將打開的鏈接。指定您的應用程序可以處理的 URL,通常是應用程序的內容或負載,它會啟動特定於應用程序的邏輯(例如向用戶提供優惠券或顯示歡迎屏幕)。此鏈接必須是格式正確的 URL,經過正確的 URL 編碼,使用 HTTP 或 HTTPS,並且不能是另一個動態鏈接。

域 URIP 前綴您的動態鏈接網址前綴,您可以在 Firebase 控制台中找到它。動態鏈接域類似於以下示例:
https://example.com/link
https://example.page.link
DynamicLinkAndroid參數
後備網址未安裝應用程序時打開的鏈接。指定此項以在未安裝應用程序時執行除從 Play 商店安裝應用程序以外的操作,例如打開內容的移動網絡版本,或顯示應用程序的促銷頁面。
最小版本可以打開鏈接的應用程序的最低版本的versionCode 。如果安裝的應用程序是舊版本,用戶將被帶到 Play 商店升級應用程序。
DynamicLinkIOS參數
應用商店ID您應用的 App Store ID,用於在未安裝應用時將用戶引導至 App Store
後備網址未安裝應用程序時打開的鏈接。指定此選項以在未安裝應用程序時執行除從 App Store 安裝應用程序之外的操作,例如打開內容的移動網絡版本,或顯示應用程序的促銷頁面。
定制方案您應用的自定義 URL 方案(如果定義為您應用的捆綁包 ID 以外的內容)
iPad後備網址未安裝應用程序時在 iPad 上打開的鏈接。指定此選項以在未安裝應用程序時執行除從 App Store 安裝應用程序之外的操作,例如打開內容的 Web 版本,或顯示應用程序的促銷頁面。
iPadBundleID在 iPad 上用於打開鏈接的 iOS 應用程序的包 ID。該應用程序必須從 Firebase 控制台的概覽頁面連接到您的項目。
最小應用版本可以打開鏈接的應用程序的最低版本號。此標誌在打開時傳遞給您的應用程序,您的應用程序必須決定如何處理它。
動態鏈接導航信息參數
強制重定向啟用如果設置為“1”,則在打開動態鏈接時跳過應用程序預覽頁面,而是重定向到應用程序或商店。應用預覽頁面(默認啟用)可以更可靠地將用戶在應用中打開動態鏈接時發送到最合適的目的地;但是,如果您希望僅在無需此頁面即可可靠打開動態鏈接的應用程序中打開動態鏈接,則可以使用此參數禁用它。此參數僅會影響動態鏈接在 iOS 上的行為。
DynamicLinkSocialMetaTag參數
標題在社交帖子中共享動態鏈接時使用的標題。
描述文字在社交帖子中共享動態鏈接時使用的描述。
圖片網址與此鏈接相關的圖像的 URL。圖片應至少為 300x200 像素,且小於 300 KB。
DynamicLinkGoogleAnalytics參數
來源
中等的
活動
學期
內容
Google Play 分析參數。這些參數( utm_sourceutm_mediumutm_campaignutm_termutm_content )被傳遞到 Play Store 並附加到鏈接負載。
DynamicLinkItunesConnectAnalyticsParameters
提供商令牌
affiliateToken
活動代幣
iTunes Connect 分析參數。這些參數( ptatct )被傳遞到 App Store。

要縮短長動態鏈接,如果要生成帶有短後綴的鏈接,請將長動態鏈接與DynamicLinkComponentsOptions對像一起傳遞給shortenURL(url:options:)

迅速

注意:此 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)")
}

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

默認情況下,動態鏈接使用您應用程序的包標識符作為打開您的應用程序所需的 URL 架構。我們建議保留此默認值以使您的實施簡單。

但是,已經將自定義 URL 方案用於其他目的的開發人員可能希望也將相同的自定義 URL 方案用於他們的動態鏈接。如果您遇到這種情況,您可以按照以下步驟為您的 Firebase 動態鏈接指定不同的 URL 方案:

  1. 設置應用程序時,請確保在配置FirebaseApp共享實例之前指定應用程序要使用的默認 URL 架構:

    迅速

    注意:此 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
    }
    

    目標-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參數或將iosCustomScheme參數發送到 REST API 來執行此操作

下一步

現在您已經創建了動態鏈接,您需要設置您的應用程序以接收動態鏈接並在用戶打開它們後將用戶發送到您應用程序中的正確位置。

要在您的應用程序中接收動態鏈接,請參閱iOSAndroidC++Unity的文檔。