在 iOS 上創建動態鏈接

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

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

先決條件

在開始之前,請務必火力地堡添加到您的iOS項目

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

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

  6. 推薦:指定允許在您的深層鏈接和後備鏈接URL模式。通過這樣做,您可以防止未經授權的各方創建從您的域重定向到您無法控制的站點的動態鏈接。請參閱允許特定的URL模式
  7. 確保在應用設置中指定了應用的 App Store ID 和應用 ID 前綴。要查看和編輯您的應用程序的設置,去你的火力地堡項目的設置頁面,選擇您的iOS應用。

    確認您的火力地堡的項目配置正確通過打開使用動態鏈接在iOS應用apple-app-site-association是在您的動態鏈接域名託管文件。火力地堡將服務於apple-app-site-association從域的根目錄以及文件.well-known子目錄。例如:

        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

    迅速

    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 控制台

如果你想生成一個動態鏈接,無論是出於測試目的,或為營銷團隊可以輕鬆地創建可以像使用社交媒體帖子中使用的鏈接,最簡單的方法是將訪問火力地堡控制台,並創建一個按照分步表格手動操作。

使用 iOS 構建器 API

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

要創建一個動態鏈接,創建一個新的DynamicLinkComponents對象,並通過設置對象的相應屬性指定的動態鏈接參數。然後,您可以通過對象的長鏈接url屬性或致電獲取短鏈接shorten()

下面的小例子,創建一個長期的動態鏈接https://www.example.com/my-page與iOS上您的iOS應用和應用打開com.example.android在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。

為了縮短長的動態鏈接,通過長期動態鏈接到shortenURL(url:options:)與沿DynamicLinkComponentsOptions如果你想生成一個短後綴的鏈接對象:

迅速

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. 當設置你的應用程序,請確保您指定默認的URL方案的應用程序中使用配置您之前FirebaseApp共享的實例:

    迅速

    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

    - (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 方案。您可以通過控制台火力地堡做到這一點,設置customScheme構建器API中,指定ius在你的URL參數,或者發送iosCustomScheme參數的REST API

下一步

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

要接收動態鏈接在你的應用程序,請參閱該文檔的iOS安卓C ++ ,和團結