Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

在iOS上創建動態鏈接

您可以使用Firebase動態鏈接生成器API創建簡短的或較長的動態鏈接。該API接受長動態鏈接或包含動態鏈接參數的對象,並返回如下示例所示的URL:

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

先決條件

Firebase動態鏈接需要iOS 8或更高版本。您可以在應用程序中定位iOS 7,但Firebase Dynamic Links 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模式。這樣,您可以防止未經授權的各方創建動態鏈接,該動態鏈接從您的域重定向到您無法控制的站點。請參閱將網址格式列入白名單
  6. 確保在應用設置中指定了應用的應用商店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 Store ID和捆綁軟件ID的引用。例如:

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

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

將Firebase添加到您的應用

  1. 將Firebase模塊導入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控制台

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

使用iOS Builder API

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

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

構建短鏈接需要網絡調用,因此short 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.dynamicLinkComponentsOptions = DynamicLinkComponentsOptions()
linkBuilder.dynamicLinkComponentsOptions.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);

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

DynamicLinkComponents
鏈接

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

domainURIPrefix 您的動態鏈接URL前綴,可以在Firebase控制台中找到。動態鏈接域看起來像以下示例:
https://example.com/link
https://example.page.link
DynamicLinkAndroidParameters
fallbackURL 未安裝應用程序時打開的鏈接。指定此選項可以執行其他操作,而不是在未安裝應用程序時從Play商店安裝應用程序,例如打開內容的移動網絡版本,或顯示應用程序的宣傳頁。
minimumVersion 可以打開鏈接的應用程序最低版本的versionCode 。如果安裝的應用是較舊的版本,則將用戶帶到Play商店升級該應用。
DynamicLinkIOS參數
appStoreID 應用程序的App Store ID,用於在未安裝應用程序時將用戶發送到App Store
fallbackURL 未安裝應用程序時打開的鏈接。指定此選項可以執行其他操作,而不是在未安裝應用程序時從App Store安裝應用程序,例如打開內容的移動網絡版本,或顯示應用程序的促銷頁面。
customScheme 應用程序的自定義URL方案(如果定義為不同於應用程序包ID的內容)
iPadFallbackURL 未安裝應用程序時在iPad上打開的鏈接。指定此選項可以執行其他操作,而不是在未安裝應用程序時從App Store安裝應用程序,例如打開內容的網絡版本,或顯示應用程序的促銷頁面。
iPad捆綁ID iPad上用於打開鏈接的iOS應用程序的捆綁軟件ID。該應用程序必須從Firebase控制台的“概述”頁面連接到您的項目。
minimumAppVersion 可以打開鏈接的應用程序最低版本的版本號 。此標誌在打開時會傳遞給您的應用,並且您的應用必須決定如何處理。
DynamicLinkNavigationInfoParameters
forceRedirectEnabled 如果設置為“ 1”,則在打開“動態鏈接”時跳過應用程序預覽頁面,而是重定向到應用程序或商店。當用戶打開應用程序中的動態鏈接時,應用程序預覽頁面(默認情況下啟用)可以更可靠地將用戶發送到最合適的目的地;但是,如果您希望僅在無需此頁面就能可靠地打開動態鏈接的應用程序中打開動態鏈接,則可以使用此參數將其禁用。注意:應用預覽頁目前僅在iOS上顯示,但最終可能會在Android上顯示。此參數將影響兩個平台上的動態鏈接的行為。
DynamicLinkSocialMetaTagParameters
標題在社交信息中共享動態鏈接時使用的標題。
descriptionText 在社交信息中共享動態鏈接時使用的描述。
imageURL 與該鏈接相關的圖像的URL。圖片應至少為300x200像素,且小於300 KB。
DynamicLinkGoogleAnalyticsParameters
資源

運動
術語
內容
Google Play分析參數。這些參數( utm_sourceutm_mediumutm_campaignutm_termutm_content )被傳遞到Play商店,並附加到鏈接有效負載中。
DynamicLinkItunesConnectAnalytics參數
providerToken
affiliateToken
campaignToken
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動態鏈接指定其他URL方案:

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

下一步

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

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