October 14, 2023

36. Открываем диплинки в другие приложения

Иногда нужно открыть диплинк (ссылку), ведущий в другое приложение, которое принадлежит другой компании. В этой статье покажу как просто это реализовать.

Возьмем две ссылки:

  1. https://t.me/easy_dev991 (стандартная ссылка)
  2. otherApp://linkToSupport (диплинк для другого приложения)

Добавим на экран две кнопки, по нажатию на которые должны открываться ссылки:

Кнопки для перехода по ссылкам

Для проверки, может ли система открыть ссылку, достаточно применить метод canOpenURL и сложить проверку в модификатор disabled:

import SwiftUI

struct ThirdPartyDeeplinkExample: View {
  struct Model: Identifiable {
    let id = UUID()
    let title: String
    let url: URL

    /// Проверка на возможность открытия ссылки
    var canOpenURL: Bool {
      UIApplication.shared.canOpenURL(url)
    }
  }

  private let items: [Model] = [
    .init(title: "Telegram", url: .init(string: "https://t.me/easy_dev991")!),
    .init(title: "OtherApp", url: .init(string: "otherApp://linkToSupport")!)
  ]

  var body: some View {
    VStack(spacing: 20) {
      ForEach(items) { item in
        Button(item.title) {
          UIApplication.shared.open(item.url)
        }
        .font(.title.bold())
        .disabled(!item.canOpenURL) // <- делаем кнопку недоступной, если ссылку нельзя открыть
      }
    }
  }
}

Теперь кнопку с диплинком нажать нельзя:

Кнопка с диплинком не нажимается

Чтобы поправить ситуацию, нужно настроить LSApplicationQueriesSchemes в info.plist:

Настройка info.plist

Теперь единственное условие для активации кнопки и перехода по диплинку - наличие соответствующего приложения на девайсе, в нашем случае otherApp.

Это может пригодиться, например, на экране перечисления информационных каналов компании в других соц.сетях, и нужно явно показать пользователю, может ли он перейти по ссылке (в том числе диплинку), или нет.

Код для этой статьи можно посмотреть тут, а другие статьи - тут.