您可以使用 Firebase Dynamic Links Builder API 创建短动态链接或长动态链接。此 API 接受长动态链接或包含动态链接参数的对象,并返回如下例所示的 URL:
https://example.com/link/WXYZ https://example.page.link/WXYZ
先决条件
在开始之前,请确保将 Firebase 添加到您的 iOS 项目中。
设置 Firebase 和动态链接 SDK
使用 Swift Package Manager 安装和管理 Firebase 依赖项。
- 在 Xcode 中,打开您的应用程序项目,导航至File > Add Packages 。
- 出现提示时,添加 Firebase Apple 平台 SDK 存储库:
- 选择动态链接库。
- 为了获得动态链接的最佳体验,我们建议在您的 Firebase 项目中启用 Google Analytics ,并将适用于 Google Analytics 的 Firebase SDK 添加到您的应用程序中。您可以选择没有 IDFA 集合或有 IDFA 集合的库。
- 完成后,Xcode 将自动开始在后台解析和下载您的依赖项。
https://github.com/firebase/firebase-ios-sdk
现在,执行一些配置步骤:
- 在 Firebase 控制台中,打开动态链接部分。
如果您尚未接受服务条款并为您的动态链接设置 URI 前缀,请在出现提示时执行此操作。
如果您已有动态链接 URI 前缀,请记下它。当您以编程方式创建动态链接时,您需要提供它。
- 推荐:指定深层链接和后备链接中允许的 URL 模式。这样做可以防止未经授权的各方创建从您的域重定向到不受您控制的网站的动态链接。请参阅允许特定的 URL 模式。
确保您的应用程序的 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 添加到您的应用
- 在您的
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; // ...
- 在您的应用委托的
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];
- 如果您使用的是 SwiftUI,则必须创建一个应用程序委托并通过
UIApplicationDelegateAdaptor
或NSApplicationDelegateAdaptor
将其附加到您的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
:
迅速
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,并且不能是另一个动态链接。 |
域 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_source 、 utm_medium 、 utm_campaign 、 utm_term 、 utm_content )被传递到 Play Store 并附加到链接负载。 |
DynamicLinkItunesConnectAnalyticsParameters | |
---|---|
提供商令牌 affiliateToken 活动代币 | iTunes Connect 分析参数。这些参数( pt 、 at 、 ct )被传递到 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 方案用于其他目的的开发人员可能希望将相同的自定义 URL 方案也用于他们的动态链接。如果您遇到这种情况,您可以按照以下步骤为您的 Firebase 动态链接指定不同的 URL 方案:
- 设置应用程序时,请确保在配置
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; }
- 每当您创建任何动态链接时,您都需要指定您的应用使用的自定义 URL 架构。您可以通过 Firebase 控制台、在 Builder API 中设置
customScheme
、在您的 URL 中指定ius
参数或将iosCustomScheme
参数发送到 REST API 来执行此操作
下一步
现在您已经创建了动态链接,您需要设置您的应用程序以接收动态链接并在用户打开它们后将用户发送到您应用程序中的正确位置。
要在您的应用程序中接收动态链接,请参阅iOS 、 Android 、 C++和Unity的文档。