You absolutely can... we have 3 mobile apps, and 30 websites being tracked into a single report suite.
All the tracking on our apps is the same as the web (with the exception of app specific functionality, and web specific functionality where there is some divergence)
Though they use different names, trackState is the equivalent of s.t(), and trackAction is the equivalent of s.tl().
Now, App are moving towards deprecating standard context variables in favour of XDM Streams... I haven't yet switched our apps to this yet, but the process should be similar.. on each of the mobile app specific calls, you would send all the values (including values that will help you classify as an app) and map that to your props and eVars (to get the same final result that you would see from a website).
I have several such "Classification" eVars... I have one which I call our "Breakpoint" - this tracks "desktop", "mobile" or "tablet" on web, and "app|mobile" or "app|tablet" on our apps
And I use the server dimension to track the core domain.. so on SiteA and the corresponding App for Site A, both track the server as "sitea.com", similarly for web and app for Site B, I track "siteb.com"
I can use the two dimensions to either get all traffic to Site A, regardless of the platform/breakpoint or to traffic to all apps, or by combining the two, I can get traffic to Site A's app, or website only...