RouterDelegate
public protocol RouterDelegate : AnyObject, UnimplementedLogging
A router delegate interacts with one or more Router
instances, such as RouteController
objects, during turn-by-turn navigation. This protocol is similar to NavigationServiceDelegate
, which is the main way that your application can synchronize its state with the SDK’s location-related functionality. Normally, you should not need to make a class conform to the RouterDelegate
protocol or call any of its methods directly, but you would need to call this protocol’s methods if you implement a custom Router
class.
MapboxNavigationService
is the only concrete implementation of a router delegate. Implement the NavigationServiceDelegate
protocol instead to be notified when various significant events occur along the route tracked by a NavigationService
.
Seealso
MapboxNavigationServiceSeealso
NavigationServiceDelegate-
router(_:shouldRerouteFrom:)
Default implementationReturns whether the router should be allowed to calculate a new route.
If implemented, this method is called as soon as the router detects that the user is off the predetermined route. Implement this method to conditionally prevent rerouting. If this method returns
true
,router(_:willRerouteFrom:)
will be called immediately afterwards.Default Implementation
Declaration
Swift
func router(_ router: Router, shouldRerouteFrom location: CLLocation) -> Bool
Parameters
router
The router that has detected the need to calculate a new route.
location
The user’s current location.
Return Value
True to allow the router to calculate a new route; false to keep tracking the current route.
-
router(_:willRerouteFrom:)
Default implementationCalled immediately before the router calculates a new route.
This method is called after
router(_:shouldRerouteFrom:)
is called, and beforerouter(_:didRerouteAlong:)
is called.Default Implementation
Declaration
Swift
func router(_ router: Router, willRerouteFrom location: CLLocation)
Parameters
router
The router that will calculate a new route.
location
The user’s current location.
-
router(_:shouldDiscard:)
Default implementationCalled when a location has been identified as unqualified to navigate on.
See
CLLocation.isQualified
for more information about what qualifies a location.- return: If
true
, the location is discarded and theRouter
will not consider it. Iffalse
, the location will not be thrown out.
Default Implementation
Declaration
Swift
func router(_ router: Router, shouldDiscard location: CLLocation) -> Bool
Parameters
router
The router that discarded the location.
location
The location that will be discarded.
- return: If
-
router(_:didRerouteAlong:at:proactive:)
Default implementationCalled immediately after the router receives a new route.
This method is called after
router(_:willRerouteFrom:)
method is called.Default Implementation
Declaration
Parameters
router
The router that has calculated a new route.
route
The new route.
-
router(_:didFailToRerouteWith:)
Default implementationCalled when the router fails to receive a new route.
This method is called after
router(_:willRerouteFrom:)
.Default Implementation
Declaration
Swift
func router(_ router: Router, didFailToRerouteWith error: Error)
Parameters
router
The router that has calculated a new route.
error
An error raised during the process of obtaining a new route.
-
Called immediately after the router refreshes the route.
Declaration
Swift
func router(_ router: Router, didRefresh routeProgress: RouteProgress)
Parameters
router
The router that has refreshed the route.
routeProgress
The route progress updated with the refreshed route.
-
router(_:didUpdate:with:rawLocation:)
Default implementationCalled when the router updates the route progress model.
Default Implementation
Declaration
Swift
func router(_ router: Router, didUpdate progress: RouteProgress, with location: CLLocation, rawLocation: CLLocation)
Parameters
router
The router that received the new locations.
progress
the RouteProgress model that was updated.
location
the guaranteed location, possibly snapped, associated with the progress update.
rawLocation
the raw location, from the location manager, associated with the progress update.
-
router(_:shouldPreventReroutesWhenArrivingAt:)
Default implementationCalled when the router arrives at a waypoint.
You can implement this method to allow the router to continue check and reroute the user if needed. By default, the user will not be rerouted when arriving at a waypoint.
Default Implementation
Declaration
Parameters
router
The router that has arrived at a waypoint.
waypoint
The waypoint that the controller has arrived at.
Return Value
True to prevent the router from checking if the user should be rerouted.
-
router(_:willArriveAt:after:distance:)
Default implementationCalled as the router approaches a waypoint.
This message is sent, once per progress update, as the user is approaching a waypoint. You can use this to cue UI, to do network pre-loading, etc.
Important
This method will likely be called several times as you approach a destination. If only one consumption of this method is desired, then usage of an internal flag is recommended.Default Implementation
Declaration
Parameters
router
The router that is detecting the destination approach.
waypoint
The waypoint that the service is arriving at.
remainingTimeInterval
The estimated number of seconds until arrival.
distance
The current distance from the waypoint, in meters.
-
router(_:didArriveAt:)
Default implementationCalled when the router arrives at a waypoint.
You can implement this method to prevent the router from automatically advancing to the next leg. For example, you can and show an interstitial sheet upon arrival and pause navigation by returning
false
, then continue the route when the user dismisses the sheet. If this method is unimplemented, the router automatically advances to the next leg when arriving at a waypoint.Postcondition
If you return false, you must manually advance to the next leg usingRouter.advanceLegIndex(completionHandler:)
method.Default Implementation
Parameters
router
The router that has arrived at a waypoint.
waypoint
The waypoint that the controller has arrived at.
Return Value
True to advance to the next leg, if any, or false to remain on the completed leg.
-
router(_:didPassVisualInstructionPoint:routeProgress:)
Default implementationCalled when the router detects that the user has passed a point at which an instruction should be displayed.
Default Implementation
Declaration
Swift
func router(_ router: Router, didPassVisualInstructionPoint instruction: VisualInstructionBanner, routeProgress: RouteProgress)
Parameters
router
The router that passed the instruction point.
instruction
The instruction to be presented.
routeProgress
The route progress object that the router is updating.
-
router(_:didPassSpokenInstructionPoint:routeProgress:)
Default implementationCalled when the router detects that the user has passed a point at which an instruction should be spoken.
Default Implementation
Declaration
Swift
func router(_ router: Router, didPassSpokenInstructionPoint instruction: SpokenInstruction, routeProgress: RouteProgress)
Parameters
router
The router that passed the instruction point.
instruction
The instruction to be spoken.
routeProgress
The route progress object that the router is updating.
-
routerShouldDisableBatteryMonitoring(_:)
Default implementationCalled when the router will disable battery monitoring.
Implementing this method will allow developers to change whether battery monitoring is disabled when the
Router
is deinited.Default Implementation
Declaration
Swift
func routerShouldDisableBatteryMonitoring(_ router: Router) -> Bool
Parameters
router
The router that will change the state of battery monitoring.
Return Value
A bool indicating whether to disable battery monitoring when the RouteController is deinited.