С помощью Firebase Dynamic Links Builder API можно создавать короткие или длинные Dynamic Links. Этот API принимает либо длинный URL Dynamic Link, либо объект, содержащий параметры Dynamic Link, и возвращает URL, подобные следующим:
https://example.com/link/WXYZ https://example.page.link/WXYZ
Требования
Прежде всего добавьте Firebase в проект iOS.
Настройте Firebase и SDK Dynamic Links
Для установки зависимостей Firebase и управления ими используйте Swift Package Manager.
- Откройте проект приложения в Xcode и перейдите в меню File (Файл) > Add Packages (Добавить пакеты).
- Когда появится запрос, добавьте хранилище Firebase SDK для платформ Apple:
- Выберите библиотеку Dynamic Links.
- Добавьте флаг
-ObjCв раздел Other Linker Flags (Другие флаги компоновщика) в настройках сборки целевого объекта. - Чтобы использовать все возможности Dynamic Links, рекомендуем включить Google Analytics в проекте Firebase и добавить в приложение Firebase SDK для Google Аналитики. Вы можете выбрать подходящую библиотеку в зависимости от того, нужно ли собирать IDFA. Ознакомьтесь с разделом часто задаваемых вопросов о последней организации модулей в Google Analytics для Firebase SDK.
- После этого Xcode автоматически начнет распознавать и скачивать зависимости в фоновом режиме.
https://github.com/firebase/firebase-ios-sdk.git
Затем выполните настройку:
- В консоли Firebase откройте раздел Dynamic Links.
-
Если вы ещё не приняли условия использования и не задали префикс URI для Dynamic Links, сделайте это, когда появится запрос.
Если у вас уже есть префикс URI Dynamic Links, запишите его. Его необходимо указывать при программном создании Dynamic Links.
- Рекомендуется указать шаблоны URL, которые разрешены в ссылках на контент и резервных ссылках. Это не позволит посторонним лицам создавать Dynamic Links, которые перенаправляют пользователей с вашего домена на сайты, которые вы не контролируете. Подробнее о том, как разрешить определенные шаблоны URL…
-
Убедитесь, что в настройках приложения указаны его идентификатор в магазине приложений и префикс идентификатора. Чтобы посмотреть и изменить настройки приложения, перейдите на страницу настроек проекта Firebase и выберите приложение для iOS.
Убедитесь, что проект Firebase правильно настроен для использования Dynamic Links в приложении iOS. Для этого откройте файл
apple-app-site-association, размещенный в домене Dynamic Links. Firebase будет показывать файл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содержит ссылку на префикс идентификатора приложения и идентификатор пакета. Пример:{"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}Если свойство
detailsпустое, проверьте, указали ли вы префикс идентификатора приложения. Обратите внимание, что префикс идентификатора приложения может не совпадать с идентификатором команды.
Добавление Firebase в приложение
- Импортируйте модуль
FirebaseCoreвUIApplicationDelegate, а также любые другие модули Firebase, которые использует делегат приложения. Например, чтобы использовать свойства Cloud Firestore и Authentication, нужно добавить разметку типа .SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Swift
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objective-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Настройте общий экземпляр
FirebaseAppв методеapplication(_:didFinishLaunchingWithOptions:)делегата приложения:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Swift
// Use Firebase library to configure APIs FirebaseApp.configure()
Objective-C
// Use Firebase library to configure APIs [FIRApp configure];
- Если вы используете SwiftUI, вам нужно создать делегат приложения и прикрепить его к структуре
Appс помощьюUIApplicationDelegateAdaptorилиNSApplicationDelegateAdaptor. Также необходимо отключить подмену делегата приложения. Дополнительную информацию можно найти в инструкциях по SwiftUI.SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
Используйте консоль Firebase
Если вы хотите создать одну ссылку Dynamic Link для тестирования или для маркетинговой команды, чтобы она могла легко создать ссылку, которую можно использовать, например, в публикации в социальных сетях, проще всего перейти в консоль Firebase и создать ее вручную, следуя пошаговой форме.
Как использовать iOS Builder API
Вы можете использовать iOS Builder API, чтобы создавать Dynamic Links на основе параметров или сокращать длинные Dynamic Link.
Создать Dynamic Link на основе параметров
Чтобы создать Dynamic Link, создайте новый объект DynamicLinkComponents и укажите параметры Dynamic Link, задав соответствующие свойства объекта. Затем получите длинную ссылку из свойства url объекта или короткую ссылку, вызвав shorten().
В следующем примере создается длинная ссылка Dynamic Link на https://www.example.com/my-page, которая открывается в вашем приложении для iOS и в приложении com.example.android для Android:
Swift
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
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);
Чтобы создать короткую ссылку Dynamic Link, создайте DynamicLinkComponents таким же образом, а затем вызовите shorten().
Для создания короткой ссылки требуется сетевой вызов, поэтому вместо прямого возврата ссылки shorten() принимает обработчик завершения, который вызывается по завершении запроса. Пример:
Swift
linkBuilder.shorten() { url, warnings, error in guard let url = url, error != nil else { return } print("The short URL is: \(url)") }
Objective-C
[linkBuilder shortenWithCompletion:^(NSURL * _Nullable shortURL, NSArray<NSString *> * _Nullable warnings, NSError * _Nullable error) { if (error || shortURL == nil) { return; } NSLog(@"The short URL is: %@", shortURL); }];
По умолчанию короткие Dynamic Links генерируются с суффиксами из 17 символов, поэтому угадать действительную Dynamic Link практически невозможно. Если в вашем случае нет ничего страшного в том, что кто-то угадает короткую ссылку, вы можете генерировать суффиксы, длина которых достаточна только для обеспечения уникальности. Для этого задайте свойство dynamicLinkComponentsOptions:
Swift
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
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
Вы можете использовать Dynamic Link Builder API, чтобы создавать Dynamic Links с любыми поддерживаемыми параметрами. Подробная информация приведена в документации по API.
В следующем примере создается объект Dynamic Link с несколькими общими параметрами:
Swift
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
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);
Вы можете задать параметры Dynamic Link с помощью следующих объектов и свойств:
| DynamicLinkComponents | |
|---|---|
| ссылка |
Ссылка, которая будет открываться в приложении. Укажите URL, который может обрабатывать ваше приложение (обычно это контент или полезная нагрузка приложения), чтобы инициировать логику приложения (например, предоставить пользователю купон или показать экран приветствия). Ссылка должна быть правильно отформатированным URL, закодированным надлежащим образом, использовать протокол HTTP или HTTPS и не быть другой динамической ссылкой. |
| domainURIPrefix | Префикс URL Dynamic Link, который можно найти в консоли Firebase. Примеры доменов Dynamic Link:
https://example.com/link https://example.page.link |
| DynamicLinkAndroidParameters | |
|---|---|
| fallbackURL | Ссылка, которая открывается, если приложение не установлено. Укажите это значение, если хотите, чтобы при отсутствии приложения выполнялось другое действие, например открывалась мобильная версия сайта или рекламная страница приложения. |
| minimumVersion | versionCode минимальной версии приложения, в которой можно открыть ссылку. Если на устройстве установлена более ранняя версия приложения, пользователь будет перенаправлен в Google Play, чтобы обновить его. |
| DynamicLinkIOSParameters | |
|---|---|
| appStoreID | Идентификатор приложения в App Store, который используется для перенаправления пользователей в App Store, если приложение не установлено. |
| fallbackURL | Ссылка, которая открывается, если приложение не установлено. Укажите это значение, чтобы при отсутствии приложения выполнялось другое действие, например открывалась мобильная версия контента или рекламная страница приложения. |
| customScheme | Специальная схема URL вашего приложения, если она отличается от идентификатора пакета приложения. |
| iPadFallbackURL | Ссылка, которая будет открываться на iPad, если приложение не установлено. Укажите этот параметр, чтобы при отсутствии приложения, установленного из магазина приложений, выполнялось другое действие, например открывалась веб-версия контента или рекламная страница приложения. |
| iPadBundleID | Идентификатор пакета приложения для iOS, которое будет использоваться на устройствах iPad для открытия ссылки. Приложение должно быть подключено к вашему проекту на обзорной странице в консоли Firebase. |
| minimumAppVersion | Номер минимальной версии приложения, которая может открыть ссылку. Этот флаг передается в приложение при его открытии, и приложение должно решить, что с ним делать. |
| DynamicLinkNavigationInfoParameters | |
|---|---|
| forcedRedirectEnabled | Если задано значение 1, то при открытии Dynamic Link страница предварительного просмотра приложения будет пропущена и пользователь будет перенаправлен в приложение или магазин. Страница предварительного просмотра приложения (включена по умолчанию) позволяет более надежно направлять пользователей в наиболее подходящее место назначения, когда они открывают Dynamic Links в приложениях. Однако если вы ожидаете, что Dynamic Link будет открываться только в приложениях, которые могут надежно открывать Dynamic Links без этой страницы, вы можете отключить ее с помощью этого параметра. Этот параметр влияет на поведение Dynamic Link только на устройствах iOS. |
| DynamicLinkSocialMetaTagParameters | |
|---|---|
| название | Заголовок, который будет использоваться, когда Dynamic Link будет опубликован в сообщении в социальной сети. |
| descriptionText | Описание, которое будет использоваться, когда Dynamic Link будет опубликовано в сообщении в социальной сети. |
| imageURL | URL изображения, связанного с этой ссылкой. Размер изображения должен быть не менее 300 x 200 пикселей, а размер файла – не более 300 КБ. |
| DynamicLinkGoogleAnalyticsParameters | |
|---|---|
| source medium campaign term content |
Параметры аналитики Google Play. Эти параметры (utm_source, utm_medium, utm_campaign, utm_term, utm_content) передаются в Google Play и добавляются в полезную нагрузку ссылки.
|
| DynamicLinkItunesConnectAnalyticsParameters | |
|---|---|
| providerToken affiliateToken campaignToken |
Параметры аналитики iTunes Connect. Эти параметры (pt, at, ct) передаются в магазин приложений. |
Сократить длинный Dynamic Link
Чтобы сократить длинную Dynamic Link, передайте ееDynamic Link в
shortenURL(url:options:) вместе с объектом
DynamicLinkComponentsOptions, если вы хотите создать
ссылку с коротким суффиксом:
Swift
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
[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 для Dynamic Links
По умолчанию Dynamic Links использует идентификатор пакета приложения в качестве схемы URL, необходимой для открытия приложения. Рекомендуем оставить значение по умолчанию, чтобы упростить реализацию.
Однако разработчики, которые уже используют специальную схему URL для других целей, могут захотеть использовать ее и для Dynamic Links. В этом случае вы можете указать другую схему URL для Firebase Dynamic Links, выполнив следующие действия:
- При настройке приложения укажите схему URL по умолчанию, которая будет использоваться приложением, прежде чем настраивать общий экземпляр
FirebaseApp:Swift
Примечание. Этот продукт 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; }
- При создании Dynamic Link необходимо указать специальную схему URL, которая используется в вашем приложении. Это можно сделать в консоли Firebase, задав
customSchemeв Builder API, указав параметрiusв URL или отправив параметрiosCustomSchemeв REST API.
Дальнейшие действия
Теперь, когда вы создали Dynamic Links, вам нужно настроить приложение так, чтобы оно получало Dynamic Links и направляло пользователей в нужный раздел приложения после того, как они открывают их.
Чтобы получать Dynamic Links в приложении, ознакомьтесь с документацией для iOS, Android, C++ и Unity.