获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

在 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 ,并将适用于 Google Analytics 的 Firebase SDK 添加到您的应用程序中。您可以选择没有 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文件将包含对您应用程序的应用程序 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 SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    迅速

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    目标-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()

    目标-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)")

目标-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)")
}

目标-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)")
}

目标-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)")

目标-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,并且不能是另一个动态链接。

域 URIP 前缀您的动态链接网址前缀,您可以在 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后备网址未安装应用程序时在 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 Store 并附加到链接负载。
DynamicLinkItunesConnectAnalyticsParameters
提供商令牌
affiliateToken
活动代币
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)")
}

目标-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
    }
    

    目标-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的文档。