For Web, the page view calls are triggered every time s.t() is called explicitly on every page load. Likewise, for apps, MobileCore.trackState() needs to be called at every screen load.
Only reason why web implementation seems easier is because Launch being a JavaScript library where we have greater control on the pages. But even that sometimes get trickier for pages like SPA, hence we use direct call rules or event driven data layers. In case of Apps, we dont have much control from Launch side hence we need developers to call the method on all pages.