获取我们在 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 ,并将 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的文档。