Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

在 iOS 上創建動態鏈接

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

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

先決條件

Firebase 動態鏈接需要 iOS 8 或更高版本。您可以在應用中定位 iOS 7,但 Firebase 動態鏈接 SDK 僅在運行 iOS 8 或更高版本的應用上調用函數。

  1. 將 Firebase 添加到您的 iOS 項目。在您的Podfile包含以下 pod:
    pod 'Firebase/Analytics'
    pod 'Firebase/DynamicLinks'
        
  2. 運行pod install並打開創建的.xcworkspace文件。
  3. 在 Firebase 控制台中,打開動態鏈接部分。
  4. 如果您尚未接受服務條款並為您的動態鏈接設置 URI 前綴,請在出現提示時執行此操作。

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

  5. 推薦:指定深層鏈接和後備鏈接中允許的 URL 模式。通過這樣做,您可以防止未經授權的各方創建從您的域重定向到您無法控制的站點的動態鏈接。請參閱允許特定 URL 模式
  6. 確保在應用設置中指定了應用的 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導入 Firebase 模塊:

    迅速

    import Firebase

    目標-C

    @import Firebase;
  2. 配置FirebaseApp共享實例,通常在您應用的application:didFinishLaunchingWithOptions:方法中:

    迅速

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

    目標-C

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

使用 Firebase 控制台

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

使用 iOS 構建器 API

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

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

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

迅速

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

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

迅速

linkBuilder.shorten() { url, warnings, error in
  guard let url = url, error != nil else { return }
  print("The short URL is: \(url)")
}

目標-C

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

迅速

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

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

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

迅速

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

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

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

迅速

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

[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 動態鏈接指定不同的網址架構:

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

    迅速

    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 = self.customURLScheme
      FirebaseApp.configure()
    
      return true
    }

    目標-C

    - (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 控制台執行此customScheme ,在 Builder API 中設置customScheme ,在您的 URL 中指定ius參數,或將iosCustomScheme參數發送到 REST API

下一步

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

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