From a technical perspective, two types of navigation operations exist: cross-app navigation and inner-app navigation.
Cross-app navigation is navigation from one app to another. This is handled by the unified shell services. Inner-app navigation is navigation within a single app. This includes navigation between different views in an app, like a list view and a details view, but it also includes state changes like setting a filter in a drill-down app. This type of navigation has to be performed by the app itself.
For both cases, you use the intent-based approach: The hash consists of a general part that is controlled by the shell services and, optionally, an app-specific part that denotes the inner-app UI state. This has to be taken into account when running apps that are embedded in the SAP Fiori launchpad. These apps must not directly modify the part of the URL hash that is interpreted by the unified shell services. To support you in developing navigation, APIs are available both for cross-app navigation and inner-app navigation.
You can combine the two navigation operations and navigate to an app in a specific state. This happens, for example, during the back navigation from App2 to App1 in the example above. To enable back navigation to View 2 of App 1, the app needs to be able to restore the previous UI state from the app-specific information in the URL fragment, which usually contains parameters for loading the required data. In the above figure, all four states can be bookmarked. This is the main advantage of this approach. But it also implies the following best practices for app developers: