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

С помощью API Firebase Dynamic Links Builder можно создавать короткие или длинные Dynamic Links . Этот API принимает либо длинную Dynamic Link , либо объект, содержащий параметры Dynamic Link , и возвращает 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 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 или со сбором IDFA. См. раздел часто задаваемых вопросов (FAQ) о последней организации модулей в 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 содержит ссылку на префикс App ID и идентификатор пакета вашего приложения. Например:

    {"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 Префикс вашего Dynamic Link , который можно найти в консоли Firebase . Домен Dynamic Link выглядит следующим образом:
https://example.com/link
https://example.page.link
DynamicLinkAndroidParameters
fallbackURL Ссылка, которая будет открываться, если приложение не установлено. Укажите это, чтобы выполнить какое-либо действие, отличное от установки приложения из Play Store, если приложение не установлено, например, открыть мобильную веб-версию контента или отобразить рекламную страницу вашего приложения.
минимальная версия versionCode это минимальная версия вашего приложения, которая позволяет открыть ссылку. Если установленное приложение имеет более старую версию, пользователь будет перенаправлен в Play Store для обновления приложения.
Параметры DynamicLinkIOSParameters
appStoreID Идентификатор вашего приложения в App Store, используемый для перенаправления пользователей в App Store, если приложение не установлено.
fallbackURL Ссылка, которая будет открываться, если приложение не установлено. Укажите это, чтобы выполнить какое-либо действие, отличное от установки приложения из App Store, если приложение не установлено, например, открыть мобильную веб-версию контента или отобразить рекламную страницу вашего приложения.
индивидуальная схема Схема пользовательских URL-адресов вашего приложения, если она определена как нечто отличное от идентификатора пакета вашего приложения.
iPadFallbackURL Ссылка, которая будет открываться на iPad, если приложение не установлено. Укажите это, чтобы выполнить какое-либо действие, отличное от установки приложения из App Store, если приложение не установлено, например, открыть веб-версию контента или отобразить рекламную страницу вашего приложения.
iPadBundleID Идентификатор пакета iOS-приложения, которое будет использоваться на iPad для открытия ссылки. Приложение должно быть подключено к вашему проекту через страницу «Обзор» в консоли Firebase .
minimumAppVersion Номер версии минимальной версии вашего приложения, которая может открыть ссылку. Этот флаг передается вашему приложению при открытии ссылки, и ваше приложение должно решить, что с ним делать.
DynamicLinkNavigationInfoParameters
forcedRedirectEnabled Если установлено значение «1», страница предварительного просмотра приложения будет пропущена при открытии Dynamic Link , и вместо этого будет осуществлено перенаправление в приложение или магазин. Страница предварительного просмотра приложения (включена по умолчанию) может более надежно направлять пользователей на наиболее подходящий ресурс при открытии Dynamic Links в приложениях; однако, если вы ожидаете, что Dynamic Link будет открываться только в приложениях, которые могут надежно открывать Dynamic Links без этой страницы, вы можете отключить ее с помощью этого параметра. Этот параметр повлияет на поведение Dynamic Link только на iOS.
DynamicLinkSocialMetaTagParameters
заголовок Заголовок, используемый при публикации Dynamic Link в социальных сетях.
описаниеТекст Описание, используемое при публикации Dynamic Link в социальных сетях.
imageURL URL изображения, связанного с этой ссылкой. Размер изображения должен быть не менее 300x200 пикселей, а размер файла — менее 300 КБ.
DynamicLinkGoogleAnalyticsParameters
источник
середина
кампания
срок
содержание
Параметры аналитики Google Play. Эти параметры ( utm_source , utm_medium , utm_campaign , utm_term , utm_content ) передаются в Play Store, а также добавляются к полезной нагрузке ссылки.
DynamicLinkItunesConnectAnalyticsParameters
providerToken
affiliateToken
campaignToken
Параметры аналитики 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 .