Создание динамических ссылок на iOS

Вы можете создавать короткие и длинные Dynamic Links с помощью API Firebase Dynamic Links Builder. Этот API принимает как длинные Dynamic Link , так и объекты с параметрами Dynamic Link и возвращает URL-адреса, подобные следующим:

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

Предпосылки

Прежде чем начать, обязательно добавьте Firebase в свой проект iOS .

Используйте Swift Package Manager для установки и управления зависимостями Firebase.

  1. В Xcode откройте проект приложения и перейдите в Файл > Добавить пакеты .
  2. При появлении запроса добавьте репозиторий Firebase Apple Platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Выберите библиотеку Dynamic Links .
  5. Добавьте флаг -ObjC в раздел «Другие флаги компоновщика» настроек сборки вашей целевой системы.
  6. Для оптимальной работы с Dynamic Links рекомендуем включить Google Analytics в вашем проекте Firebase и добавить Firebase SDK для Google Analytics в приложение. Вы можете выбрать библиотеку без сбора IDFA или с его сбором. См. раздел часто задаваемых вопросов о новой организации модулей в Google Analytics для Firebase SDK .
  7. После завершения Xcode автоматически начнет разрешать и загружать ваши зависимости в фоновом режиме.

Теперь выполните некоторые шаги по настройке:

  1. В консоли Firebase откройте раздел Dynamic Links .
  2. Если вы еще не приняли условия обслуживания и не установили префикс URI для своих Dynamic Links , сделайте это при появлении соответствующего запроса.

    Если у вас уже есть префикс URI Dynamic Links , запишите его. Его необходимо указать при программном создании Dynamic Links .

  3. Рекомендуется : укажите шаблоны URL, разрешённые для ваших глубоких и резервных ссылок. Это предотвратит создание неавторизованными лицами Dynamic Links , перенаправляющих с вашего домена на сайты, которые вы не контролируете. См. раздел «Разрешить определённые шаблоны URL» .
  4. Убедитесь, что идентификатор App Store и префикс идентификатора приложения указаны в настройках приложения. Чтобы просмотреть и изменить настройки приложения, перейдите на страницу настроек проекта 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 в свое приложение

  1. Импортируйте модуль FirebaseCore в UIApplicationDelegate , а также любые другие модули Firebase, используемые вашим делегатом приложения. Например, чтобы использовать Cloud Firestore и Authentication :

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Быстрый

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. Настройте общий экземпляр FirebaseApp в методе application(_:didFinishLaunchingWithOptions:) делегата вашего приложения:

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Быстрый

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. Если вы используете 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 и создать ссылку вручную, следуя пошаговой форме.

Используйте API iOS Builder

Вы можете использовать API iOS Builder для создания Dynamic Links из параметров или для сокращения длинных Dynamic Link .

Чтобы создать Dynamic Link , создайте новый объект DynamicLinkComponents и укажите параметры Dynamic Link , установив соответствующие свойства объекта. Затем получите длинную ссылку из свойства url объекта или короткую ссылку, вызвав метод shorten() .

Следующий минимальный пример создает длинную Dynamic Link на https://www.example.com/my-page , которая открывается в вашем приложении iOS на iOS и в приложении com.example.android на 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);

Чтобы создать короткую Dynamic Link , создайте 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)")
}

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);
}];
      

По умолчанию короткие Dynamic Links генерируются с 17-символьными суффиксами, что делает крайне маловероятным угадывание корректной Dynamic Link . Если в вашем случае нет ничего плохого в том, что кто-то успешно угадывает короткую ссылку, вы можете предпочесть генерировать суффиксы, длина которых не превышает необходимой для обеспечения уникальности. Это можно сделать, установив свойство 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);
}];
      

Вы можете использовать API Dynamic Link Builder для создания Dynamic Links с любым из поддерживаемых параметров. Подробности см. в справочнике по API .

В следующем примере создается Dynamic Link с несколькими общими наборами параметров:

Быстрый

Примечание: этот продукт 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);

Вы можете задать параметры Dynamic Link с помощью следующих объектов и свойств:

DynamicLinkComponents
связь

Ссылка, которую откроет ваше приложение. Укажите URL-адрес, который может обрабатывать ваше приложение. Обычно это контент или полезная нагрузка приложения, которая запускает специфичную для приложения логику (например, предоставление пользователю купона или отображение приветственного экрана). Эта ссылка должна иметь корректный формат URL, быть правильно закодирована в URL, использовать протокол HTTP или HTTPS и не может быть другой динамической ссылкой.

domainURIPrefix Префикс URL-адреса Dynamic Link , который можно найти в консоли Firebase . Домен Dynamic Link выглядит следующим образом:
https://example.com/link
https://example.page.link
DynamicLinkAndroidParameters
fallbackURL Ссылка, которая открывается, когда приложение не установлено. Укажите этот параметр, чтобы выполнить действие, отличное от установки приложения из Play Маркета, когда оно не установлено, например, открыть мобильную веб-версию контента или отобразить рекламную страницу вашего приложения.
минимальная версия versionCode минимальной версии вашего приложения, в которой можно открыть ссылку. Если установлена более старая версия приложения, пользователь перейдет в Play Маркет для обновления.
DynamicLinkIOSParameters
appStoreID Идентификатор вашего приложения в App Store, используемый для перенаправления пользователей в App Store, когда приложение не установлено.
fallbackURL Ссылка, которая открывается, когда приложение не установлено. Укажите этот параметр, чтобы выполнить действие, отличное от установки приложения из App Store, когда оно не установлено, например, открыть мобильную веб-версию контента или отобразить рекламную страницу вашего приложения.
customScheme Пользовательская схема URL вашего приложения, если она определена как нечто иное, чем идентификатор пакета вашего приложения
iPadFallbackURL Ссылка, которая открывается на iPad, если приложение не установлено. Укажите этот параметр, чтобы приложение выполняло какие-либо действия, помимо установки из App Store, когда оно не установлено, например, открывало веб-версию контента или отображало рекламную страницу вашего приложения.
iPadBundleID Идентификатор пакета приложения iOS, который будет использоваться на iPad для открытия ссылки. Приложение должно быть подключено к вашему проекту на странице «Обзор» консоли Firebase .
минимальная версия приложения Номер минимальной версии вашего приложения, в которой может открыться ссылка. Этот флаг передаётся приложению при открытии, и оно само решает, что с ним делать.
DynamicLinkNavigationInfoParameters
forceRedirectEnabled Если установлено значение «1», страница предварительного просмотра приложения будет пропущена при открытии Dynamic Link и вместо этого будет перенаправлена в приложение или магазин. Страница предварительного просмотра приложения (включена по умолчанию) может более надёжно перенаправлять пользователей в наиболее подходящее место назначения при открытии Dynamic Links в приложениях. Однако, если вы ожидаете, что Dynamic Link будет открываться только в приложениях, которые могут открывать Dynamic Links без этой страницы, вы можете отключить её с помощью этого параметра. Этот параметр влияет на поведение Dynamic Link только в iOS.
DynamicLinkSocialMetaTagParameters
заголовок Заголовок, который будет использоваться при публикации Dynamic Link в социальной сети.
описаниеТекст Описание, которое будет использоваться при публикации Dynamic Link в социальной сети.
URL-адрес изображения URL-адрес изображения, связанного с этой ссылкой. Изображение должно быть размером не менее 300x200 пикселей и весом менее 300 КБ.
DynamicLinkGoogleAnalyticsParameters
источник
середина
кампания
срок
содержание
Параметры аналитики Google Play. Эти параметры ( utm_source , utm_medium , utm_campaign , utm_term , utm_content ) передаются в Play Store и добавляются к полезной нагрузке ссылки.
DynamicLinkItunesConnectAnalyticsParameters
providerToken
affiliateToken
токен кампании
Параметры аналитики iTunes Connect. Эти параметры ( pt , at , ct ) передаются в App Store.

Чтобы сократить длинную Dynamic Link , передайте длинную Dynamic Link в shortenURL(url:options:) вместе с объектом DynamicLinkComponentsOptions , если вы хотите создать ссылку с коротким суффиксом:

Быстрый

Примечание: этот продукт 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);
}];

По умолчанию Dynamic Links использует идентификатор пакета вашего приложения в качестве URL-схемы, необходимой для открытия приложения. Мы рекомендуем оставить это значение по умолчанию для упрощения реализации.

Однако разработчики, уже использующие собственную схему URL для других целей, могут использовать эту же собственную схему URL и для своих Dynamic Links . В такой ситуации вы можете указать другую схему URL для Firebase Dynamic Links , выполнив следующие действия:

  1. При настройке приложения обязательно укажите схему URL-адресов по умолчанию, которая будет использоваться вашим приложением, прежде чем настраивать общий экземпляр FirebaseApp :

    Быстрый

    Примечание: этот продукт 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. При создании любой Dynamic Link вам потребуется указать пользовательскую схему URL, используемую вашим приложением. Это можно сделать через консоль Firebase , настроив customScheme в API Builder, указав параметр ius в URL или отправив параметр iosCustomScheme в REST API.

Следующие шаги

Теперь, когда вы создали Dynamic Links , вам нужно настроить свое приложение для получения Dynamic Links и перенаправлять пользователей в нужное место в вашем приложении после того, как пользователь откроет их.

Чтобы получить Dynamic Links в своем приложении, ознакомьтесь с документацией для iOS , Android , C++ и Unity .