在 iOS 上建立動態鏈接

您可以使用 Firebase 動態連結產生器 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.git
  4. 選擇動態連結庫。
  5. -ObjC標誌新增至目標建置設定的「其他連結器標誌」部分。
  6. 為了獲得動態連結的最佳體驗,我們建議在您的 Firebase 專案中啟用 Google Analytics ,並將適用於 Google Analytics 的 Firebase SDK 新增至您的應用程式。您可以選擇沒有 IDFA 收集或有 IDFA 收集的庫。
  7. 完成後,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屬性為空,請仔細檢查您是否指定了應用程式 ID 前綴。請注意,您的應用程式 ID 前綴可能與您的團隊 ID 不同。

將 Firebase 新增到您的應用

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

    斯威夫特使用者介面

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

    迅速

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-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()

    Objective-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)")

Objective-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)")
}

Objective-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)")
}

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

您可以使用動態連結產生器 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)")

Objective-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,且不能是另一個動態連結。

域URI前綴您的動態連結 URL 前綴,您可以在 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回退URL未安裝應用程式時在 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 商店並附加到連結有效負載。
DynamicLinkItunesConnectAnalytics參數
提供者令牌
附屬代幣
活動令牌
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)")
}

Objective-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
    }
    

    Objective-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的文檔。