Beagle v1.6 não é mais mantida ativamente. A versão documentada que você está visualizando pode conter funcionalidades depreciadas. Para obter as funcionalidades mais recentes, consulte a nossa última versão .
O Beagle realiza todas as suas navegações a partir da dependência deepLinkHandler
presente no BeagleDependencies, ela é do tipo DeepLinkScreenManaging
.
O protocolo DeepLinkScreenManaging
possui um método chamado getNativeScreen que retorna um UIViewController a partir de um determinado path
do tipo String. É possível passar dados adicionais através de um dicionário do tipo [String: String].
public protocol DeepLinkScreenManaging {
func getNativeScreen(with path: String, data: [String: String]?) throws -> UIViewController
}
Para utilizar o protocolo DeepLinkScreenManaging
, veja as seções abaixo:
O primeiro passo é criar uma classe chamada de DeeplinkScreenManager
que irá conformar com o protocolo DeepLinkScreenManaging
.
final class DeeplinkScreenManager: DeepLinkScreenManaging {
func getNativeScreen(with path: String, data: [String: String]?) throws -> UIViewController {
}
}
Foi criado um protocolo chamado DeeplinkScreen
, onde cada tela em que será necessário utilizar deeplink para navegação irá conformar com este protocolo.
O protocolo possui dois métodos principais:
init(path: String, data: [String: String]?)
: o método de inicialização quando necessário;func screenController() -> UIViewController
: o método no qual vamos retornar a UIViewController para qual iremos navegar.
protocol DeeplinkScreen {
init(path: String, data: [String: String]?)
func screenController() -> UIViewController
}
Veja abaixo o exemplo completo da classe criada que herda de DeepLinkScreenManaging
. Nele, foi criado um dicionário que possui uma String
como chave e um valor de DeeplinkScreen.Type
e um método subscript para facilitar o acesso aos elementos do dicionário.
No método getNativeScreen
verifique se existe uma tela com o path passado e caso tenha, retorne um UIViewController
relacionado à ele. Caso contrário, um NSError é lançado.
final class DeeplinkScreenManager: DeepLinkScreenManaging {
public static let shared = DeeplinkScreenManager()
private var screens: [String: DeeplinkScreen.Type] = [:]
public subscript(path: String) -> DeeplinkScreen.Type? {
get {
return screens[path]
}
set {
screens[path] = newValue
}
}
func getNativeScreen(with path: String, data: [String: String]?) throws -> UIViewController {
guard let screenType = self[path] else {
throw NSError(domain: "DeeplinkScreenManager", code: 1, userInfo: nil)
}
return screenType.init(path: path, data: data).screenController()
}
}
Crie uma tela que irá herdar do protocolo DeeplinkScreen
, nele você terá um método chamado screenController usado na classe DeeplinkScreenManager
para conectar os paths aos UIViewControllers onde será realizado as navegações de deeplink.
struct TextScreen: DeeplinkScreen {
init(path: String, data: [String: String]?) {}
func screenController() -> UIViewController {
return BeagleScreenViewController(.declarative(screen))
}
var screen: Screen {
return Screen(
navigationBar: NavigationBar(title: "Text Screen", showBackButton: true),
child: Text("Beagle")
)
}
}
No AppDelegate ou na classe de configurações do ambiente do Beagle, atribua a instância de DeeplinkScreenManager
ao atributo deepLinkHandler
presente no BeagleDependencies:
let dependencies = BeagleDependencies()
let deepLinkHandler = DeeplinkScreenManager.shared
deepLinkHandler["PathDaSuaScreen"] = SuaScreen.self
dependencies.deepLinkHandler = deepLinkHandler
Beagle.dependencies = dependencies
Pronto! Agora o Beagle utilizará a sua classe com todas as modificações e definições necessárias para realizar suas navegações de Deeplink.
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.