Создание динамических ссылок на 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 platform 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. Ознакомьтесь с нашими часто задаваемыми вопросами о последней организации модулей в 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 ID вашего приложения и префикс App ID указаны в настройках вашего приложения. Чтобы просмотреть и изменить настройки вашего приложения, перейдите на страницу настроек вашего проекта 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 вашего приложения и bundle ID. Например:

    {"applinks":{"apps":[],"details":[{"appID":"1234567890.com.example.ios","paths":["/*"]}]}}

    Если свойство details пустое, дважды проверьте, что вы указали префикс App ID. Обратите внимание, что ваш префикс App ID может не совпадать с вашим Team ID.

Добавьте 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 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 . Вы также должны отключить swizzling делегата приложения. Для получения дополнительной информации см. инструкции 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 со следующими объектами и свойствами:

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

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

доменURIPrefix Ваш префикс URL-адреса Dynamic Link , который вы можете найти в консоли Firebase . Домен Dynamic Link выглядит следующим образом:
https://example.com/link
https://example.page.link
DynamicLinkПараметры Android
fallbackURL Ссылка для открытия, когда приложение не установлено. Укажите это, чтобы сделать что-то, кроме установки вашего приложения из Play Store, когда приложение не установлено, например, открыть мобильную веб-версию контента или отобразить рекламную страницу для вашего приложения.
минимальная версия versionCode минимальной версии вашего приложения, которая может открыть ссылку. Если установленное приложение имеет более старую версию, пользователь перенаправляется в Play Store для обновления приложения.
DynamicLinkIOSПараметры
appStoreID Идентификатор вашего приложения в App Store, используемый для перенаправления пользователей в App Store, когда приложение не установлено.
fallbackURL Ссылка для открытия, когда приложение не установлено. Укажите это, чтобы сделать что-то иное, чем установить ваше приложение из App Store, когда приложение не установлено, например, открыть мобильную веб-версию контента или отобразить рекламную страницу для вашего приложения.
customScheme Пользовательская схема URL вашего приложения, если она определена как что-то иное, чем идентификатор пакета вашего приложения
iPadFallbackURL Ссылка для открытия на iPad, когда приложение не установлено. Укажите это, чтобы сделать что-то, кроме установки вашего приложения из App Store, когда приложение не установлено, например, открыть веб-версию контента или отобразить рекламную страницу для вашего приложения.
iPadBundleID Идентификатор пакета приложения iOS для использования на iPad для открытия ссылки. Приложение должно быть подключено к вашему проекту со страницы обзора консоли Firebase .
минимальная версия приложения Номер версии минимальной версии вашего приложения, которая может открыть ссылку. Этот флаг передается вашему приложению при его открытии, и ваше приложение должно решить, что с ним делать.
DynamicLinkNavigationInfoParameters
принудительноRedirectEnabled Если установлено значение «1», пропустите страницу предварительного просмотра приложения при открытии Dynamic Link и вместо этого перенаправьте в приложение или магазин. Страница предварительного просмотра приложения (включена по умолчанию) может более надежно отправлять пользователей в наиболее подходящее место назначения при открытии ими Dynamic Links в приложениях; однако, если вы ожидаете, что Dynamic Link будет открываться только в приложениях, которые могут надежно открывать Dynamic Links без этой страницы, вы можете отключить ее с помощью этого параметра. Этот параметр повлияет на поведение Dynamic Link только на iOS.
DynamicLinkSocialMetaTagПараметры
заголовок Заголовок, который будет использоваться при публикации Dynamic Link в социальной сети.
описаниеТекст Описание, которое будет использоваться при публикации Dynamic Link в социальной сети.
URL-адрес изображения URL-адрес изображения, связанного с этой ссылкой. Изображение должно быть размером не менее 300x200 пикселей и менее 300 КБ.
DynamicLinkGoogleAnalyticsПараметры
источник
середина
кампания
срок
содержание
Параметры аналитики Google Play. Эти параметры ( utm_source , utm_medium , utm_campaign , utm_term , utm_content ) передаются в Play Store, а также добавляются к полезной нагрузке ссылки.
DynamicLinkItunesConnectAnalyticsParameters
провайдерToken
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 в Builder API, указав параметр ius в вашем URL или отправив параметр iosCustomScheme в REST API

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

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

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