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

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

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

Предварительные условия

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

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

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

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

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

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

  3. Рекомендуется : укажите шаблоны URL-адресов, разрешенные в глубоких ссылках и резервных ссылках. Поступая таким образом, вы предотвращаете создание неавторизованными лицами динамических ссылок, которые перенаправляют с вашего домена на сайты, которые вы не контролируете. См. раздел Разрешить определенные шаблоны URL-адресов .
  4. Убедитесь, что идентификатор вашего приложения в App Store и префикс идентификатора приложения указаны в настройках вашего приложения. Чтобы просмотреть и изменить настройки вашего приложения, перейдите на страницу настроек вашего проекта Firebase и выберите свое приложение для iOS.

    Убедитесь, что ваш проект Firebase правильно настроен для использования динамических ссылок в вашем приложении iOS, открыв файл apple-app-site-association , который размещен в вашем домене динамических ссылок. 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 и аутентификацию:

    SwiftUI

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

    Быстрый

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Цель-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()

    Цель-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

Если вы хотите создать одну динамическую ссылку либо для целей тестирования, либо для того, чтобы ваша маркетинговая команда могла легко создать ссылку, которую можно использовать в чем-то вроде сообщения в социальной сети, самый простой способ — посетить консоль Firebase и создать ее. вручную, следуя пошаговой форме.

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

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

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

В следующем минимальном примере создается длинная динамическая ссылка на 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)")

Цель-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);
}];
      

Вы можете использовать API Dynamic Link Builder для создания динамических ссылок с любым из поддерживаемых параметров. Подробности см. в справочнике по 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);

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

Компоненты DynamicLink
связь

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

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

Чтобы сократить длинную динамическую ссылку, передайте длинную динамическую ссылку в 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)")
}

Цель-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-адресов и для своих динамических ссылок. Если вы находитесь в такой ситуации, вы можете указать другую схему URL-адресов для динамических ссылок Firebase, выполнив следующие действия:

  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
    }
    

    Цель-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, установив customScheme в API Builder, указав параметр ius в своем URL-адресе или отправив параметр iosCustomScheme в REST API.

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

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

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