# Protocols

The following protocols are available globally.
- `


  ### [GMSAppCheckTokenProvider](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSAppCheckTokenProvider)


  ` Protocol for supplying an App Check token to the Navigation SDK.

  #### Declaration

  Swift

      protocol GMSAppCheckTokenProvider : NSObjectProtocol

  Objective-C

      @protocol GMSAppCheckTokenProvider <NSObject>

- `


  ### [GMSMapViewNavigationLayout](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSMapViewNavigationLayout)


  ` Protocol for an object that hosts the layoutDelegate property, adopted by the NavigationLayout
  category of GMSMapView.

  #### Declaration

  Swift

      @MainActor protocol GMSMapViewNavigationLayout : NSObjectProtocol

  Objective-C

      @protocol GMSMapViewNavigationLayout;

- `


  ### [GMSMapViewNavigationUIDelegate](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSMapViewNavigationUIDelegate)


  ` A delegate for events on `https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Classes/GMSMapView` related to the navigation UI.

  #### Declaration

  Swift

      protocol GMSMapViewNavigationUIDelegate : NSObjectProtocol

  Objective-C

      @protocol GMSMapViewNavigationUIDelegate <NSObject>

- `


  ### [GMSNavigationAccessoryView](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationAccessoryView)


  ` Protocol defining methods that support custom views specifying accessory UI elements applied to
  the primary view. Accessory views must implement this protocol in order to be visible.

  #### Declaration

  Swift

      protocol GMSNavigationAccessoryView : NSObjectProtocol

  Objective-C

      @protocol GMSNavigationAccessoryView <NSObject>

- `


  ### [GMSNavigationRoundedCornerView](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationRoundedCornerView)


  ` <br />

  <br />

  > [!WARNING]
  > [Experimental](https://developers.google.com/maps/launch-stages#experimental) feature

  <br />

  <br />

  Protocol for navigation views with configurable rounded corners.

  #### Declaration

  Swift

      protocol NavigationRoundedCornerView : NSObjectProtocol

  Objective-C

      @protocol GMSNavigationRoundedCornerView <NSObject>

- `


  ### [GMSNavigationUIButton](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationUIButton)


  ` <br />

  <br />

  > [!WARNING]
  > [Experimental](https://developers.google.com/maps/launch-stages#experimental) feature

  <br />

  <br />

  Protocol for describing Google-provided buttons intended to be floated over the map.

  #### Declaration

  Swift

      protocol NavigationUIButton

  Objective-C

      @protocol GMSNavigationUIButton

- `


  ### [GMSNavigationUIState](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationUIState)


  ` <br />

  <br />

  > [!WARNING]
  > [Experimental](https://developers.google.com/maps/launch-stages#experimental) feature

  <br />

  <br />

  Protocol for the common portions of the UI state across navigation-ready and active guidance
  modes.

  #### Declaration

  Swift

      protocol NavigationUIState

  Objective-C

      @protocol GMSNavigationUIState

- `


  ### [GMSNavigationReadyUIState](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationReadyUIState)


  ` <br />

  <br />

  > [!WARNING]
  > [Experimental](https://developers.google.com/maps/launch-stages#experimental) feature

  <br />

  <br />

  Optional Google-provided UI elements for the navigation-ready state.

  #### Declaration

  Swift

      protocol NavigationReadyUIState : NavigationUIState

  Objective-C

      @protocol GMSNavigationReadyUIState <https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationUIState>

- `


  ### [GMSActiveGuidanceUIState](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSActiveGuidanceUIState)


  ` <br />

  <br />

  > [!WARNING]
  > [Experimental](https://developers.google.com/maps/launch-stages#experimental) feature

  <br />

  <br />

  Optional Google-provided UI elements for the active guidance state.

  #### Declaration

  Swift

      protocol ActiveGuidanceUIState : NavigationUIState

  Objective-C

      @protocol GMSActiveGuidanceUIState <https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationUIState>

- `


  ### [GMSNavigationLayoutDelegate](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationLayoutDelegate)


  ` <br />

  <br />

  > [!WARNING]
  > [Experimental](https://developers.google.com/maps/launch-stages#experimental) feature

  <br />

  <br />

  The protocol that layout delegates must implement in order to take control of the layout of
  the map container during navigation-ready or active guidance modes.

  Since the purpose of these methods is to modify the view hierarchy, all methods are MainActor-
  restricted. The protocol itself is not MainActor-restricted, since implementations may have
  other non-MainActor methods.

  #### Declaration

  Swift

      protocol NavigationLayoutDelegate : NSObjectProtocol

  Objective-C

      @protocol GMSNavigationLayoutDelegate <NSObject>

- `


  ### [GMSNavigationRouteDescription](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationRouteDescription)


  ` Encapsulates the result of a `setDestinations` request, wrapping the route status and, on
  failure, an error describing what went wrong.

  @related `https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Classes/GMSNavigator`

  #### Declaration

  Swift

      protocol NavigationRouteDescription : NSObjectProtocol

  Objective-C

      @protocol GMSNavigationRouteDescription <NSObject>

- `


  ### [GMSNavigationRouteTokenExecutionDetails](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationRouteTokenExecutionDetails)


  ` Details regarding how a route token request was processed by the routing engine, including route
  token application status and resolved routing parameters.

  #### Declaration

  Swift

      protocol NavigationRouteTokenExecutionDetails : NSObjectProtocol

  Objective-C

      @protocol GMSNavigationRouteTokenExecutionDetails <NSObject>

- `


  ### [GMSNavigationRouteTokenResolvedParameters](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationRouteTokenResolvedParameters)


  ` Resolved routing parameters embedded within a precomputed route token and applied by the backend
  routing engine.

  #### Declaration

  Swift

      protocol NavigationRouteTokenResolvedParameters : NSObjectProtocol

  Objective-C

      @protocol GMSNavigationRouteTokenResolvedParameters <NSObject>

- `


  ### [GMSNavigationScreenMetrics](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigationScreenMetrics)


  ` Protocol for returning information about screen metrics.

  This protocol is a subset of the screen-metric-related properties implemented by `UIScreen`.

  #### Declaration

  Swift

      protocol GMSNavigationScreenMetrics

  Objective-C

      @protocol GMSNavigationScreenMetrics

- `


  ### [GMSNavigatorListener](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSNavigatorListener)


  ` Listener for events on `https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Classes/GMSNavigator`.

  #### Declaration

  Swift

      protocol GMSNavigatorListener : NSObjectProtocol

  Objective-C

      @protocol GMSNavigatorListener <NSObject>

- `


  ### [GMSRoadSnappedLocationProviderListener](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSRoadSnappedLocationProviderListener)


  ` Listener for events on `https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Classes/GMSRoadSnappedLocationProvider`.

  #### Declaration

  Swift

      protocol GMSRoadSnappedLocationProviderListener : NSObjectProtocol

  Objective-C

      @protocol GMSRoadSnappedLocationProviderListener <NSObject>

- `


  ### [GMSFeature](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSFeature)


  ` An interface representing a feature's metadata.

  Do not save a reference to a particular feature object because the reference will not be stable.

  #### Declaration

  Swift

      protocol Feature : NSObjectProtocol

  Objective-C

      @protocol GMSFeature <NSObject>

- `


  ### [GMSIndoorDisplayDelegate](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSIndoorDisplayDelegate)


  ` Delegate for events on `https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Classes/GMSIndoorDisplay`.

  #### Declaration

  Swift

      protocol GMSIndoorDisplayDelegate : NSObjectProtocol

  Objective-C

      @protocol GMSIndoorDisplayDelegate <NSObject>

- `


  ### [GMSMapViewDelegate](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSMapViewDelegate)


  ` Delegate for events on `https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Classes/GMSMapView`.

  #### Declaration

  Swift

      protocol GMSMapViewDelegate : NSObjectProtocol

  Objective-C

      @protocol GMSMapViewDelegate <NSObject>

- `


  ### [GMSPanoramaViewDelegate](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSPanoramaViewDelegate)


  ` Delegate for events on `https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Classes/GMSPanoramaView`.

  #### Declaration

  Swift

      protocol GMSPanoramaViewDelegate : NSObjectProtocol

  Objective-C

      @protocol GMSPanoramaViewDelegate <NSObject>

- `


  ### [GMSTileReceiver](https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Protocols/GMSTileReceiver)


  ` `GMSTileReceiver` is provided to `https://developers.google.com/maps/documentation/navigation/ios-sdk/reference/objc/Classes/GMSTileLayer` when a tile request is made, allowing the
  callback to be later (or immediately) invoked.

  #### Declaration

  Swift

      protocol GMSTileReceiver : NSObjectProtocol

  Objective-C

      @protocol GMSTileReceiver <NSObject>