Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

在 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 ,並將 Firebase SDK for Google Analytics 添加到您的應用中。您可以選擇沒有 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文件包含對您的應用程序的 App 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 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()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

使用 Firebase 控制台

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

使用 iOS 生成器 API

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

要創建動態鏈接,請創建一個新的DynamicLinkComponents對象並通過設置對象的相應屬性來指定動態鏈接參數。然後,從對象的url屬性中獲取長鏈接或通過調用 short 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 ,然後調用 short 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);
}];
      

您可以使用 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)")

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