Birbonus uses a destination-based navigation model. Each main destination can contain an optional sub-destination for more granular routing.
Create a UINavigationController, initialize EcoCoordinator, and start the required destination.
let navigationController = UINavigationController()
let coordinator = EcoCoordinator(
router: navigationController,
configurator: configurator
)
coordinator.start(with: .benefits(.mainPage))public enum Destination {
case birbonusCabinet(BirbonusCabinetDestination?)
case benefits(BenefitsDestination?)
case bravoClub(BravoClubDestination?)
case subscription(SubscriptionDestination?)
}public enum BirbonusCabinetDestination {
case mainPage(source: Source = .fromMain)
case chooseCategories(
shouldOpenDirect: Bool = false,
source: Source = .fromOther
)
case transactionDetail(
transactionId: String,
source: Source = .fromOther
)
case transactionHistory(source: Source = .fromOther)
case scrollTo(id: String, source: Source = .fromOther)
public enum Source {
case fromMain
case fromBenefits
case fromLink
case fromOther
}
}// Open the Birbonus Cabinet main page
coordinator.start(with: .birbonusCabinet(.mainPage()))
// Open a transaction detail
coordinator.start(
with: .birbonusCabinet(
.transactionDetail(transactionId: "12345")
)
)
// Open transaction history
coordinator.start(with: .birbonusCabinet(.transactionHistory()))
// Open category selection directly
coordinator.start(
with: .birbonusCabinet(
.chooseCategories(shouldOpenDirect: true)
)
)
// Scroll to a specific item
coordinator.start(
with: .birbonusCabinet(
.scrollTo(id: "item123")
)
)public enum BenefitsDestination {
case mainPage
case partners(categoryID: String?)
case partner(partnerID: String, categoryID: String?)
case game(gameID: String)
}// Open the Benefits main page
coordinator.start(with: .benefits(.mainPage))
// Open all partners
coordinator.start(with: .benefits(.partners(categoryID: nil)))
// Open partners in a specific category
coordinator.start(
with: .benefits(
.partners(categoryID: "category123")
)
)
// Open a specific partner
coordinator.start(
with: .benefits(
.partner(
partnerID: "partner456",
categoryID: nil
)
)
)
// Open a game
coordinator.start(
with: .benefits(
.game(gameID: "game789")
)
)public enum BravoClubDestination {
case mainPage
}coordinator.start(with: .bravoClub(.mainPage))public enum SubscriptionDestination {
case main
}coordinator.start(with: .subscription(.main))Use getInitialViewController(with:) when the host application needs the destination's initial view controller without immediately starting the SDK navigation flow.
let viewController = coordinator.getInitialViewController(
with: .benefits(.mainPage)
)
navigationController.pushViewController(
viewController,
animated: true
)