How to create 1 native app that serves as a portal to other mobile native apps

How to create 1 native app that serves as a portal to other mobile native apps

  

Hi all,


We want to create 1 native app that will be installed on either an iOS / Android device.

The user will open the app and will see a list of other (native) apps that can be started/opened.

Each of these apps serves a different purpose. For example: expenses, menu of the day, ...

After the user closes an app the user returns to the home screen of the portal app; etc.


I especially use the word "native" as we want to use the "native" interaction patterns.

So creating web app's that are meant for mobile devices is not in scope.


As I see it I have several options:

  1. I create 1 big native app which will be extended with all the functions of the other apps 
  2. Creating our own version of OutSystems Now using the open source code on GitHub
  3. Create a mechanism that dynamically unload/offloads native app's within the portal app (like OutSystems Now)


Evaluation:

  1. I see this as a VERY bad option because the app becomes mega big, different teams working on the same app, etc..)
  2. This option looks very promising as it does exactly what we want BUT the open source code is not supported anymore in the future :-( )
  3. no info if this is even possible / supported.


Please let me know if you have another idea or even a solution :-)

Solution

Hi Christian,

As option 4, I would take a look at deep linking for starting a new app. I'm no expert on these matters, so I can't give you any details, but starting another app (regardless of whether it's an OS app or another random app) can be achieved that way, I've been told.

Solution

Hi Christian,

Following @Kilian idea, you can combine it with other plugins so you can query the device to know if the app is installed, and if so, open other apps through deeplinking.

Hi Kilian en Henrique,

I'll experiment tomorrow and let you know..

I never thought of deep linking in this case ; thx!


Hi,

Long story but in short "deep linking does work but I even found something nicer :-)"


DeepLinking does indeed work ... 

For this I created 3 native apps: portal app, app 01 and app 02.

From the portal app I enabled "external link" to the home screens of app01 and app02.

(deep links in OutSystems)

This works fine as long as you have installed app 01 and app 02 in your phone as well.

If not, no error, nothing happens.


However another requirement I forgot to tell you about was that I only want 1 app on my phone. Otherwise I still have to ask the users to install all apps on their phone ...


So I adjusted my portal app and included external links using the normal URL formatting

(https://<environment>/App01/HomeScreen)

To my suprise I got the same type of behaviour as Outsystems Now ...

App01 would open, show a splash screen and continue ... 

When I used the link to go back to the portal ... the portal app would just appear again (and refresh itself).

This made me very happy ;-) as app 01 was not installed on my phone but the native interaction patterns would just work. 


But what if one of those apps would use something special like a camera plugin (something that requires access to the device's capabilities)? 

So I changed app 01 and included the camera plugin to take a picture and show it on the screen. 

I installed it on my phone and it worked fine when accessed from the portal app using deep linking (as expected)

However when accessing app 01 using an URL it would give an error "plugin not available".


So to solve this I create a module "PortalTools" that wraps the camera plugin and exposes some of the actions publicly ... I changed the app 01 to use the "PortalTools" module AND I made sure that I referenced the same "PortalTools" from my portal app. 


So I installed the new Portal APP (which now also contained access to the camera) and created a new version of app 01 (using the same PortalTools). I installed the portal app again. Finale result:

* Portal app is able to start APP 01 using an URL and the APP 01 works with the camera

* Only the portal app has to be installed on the phone ... other apps can just be accessed using their URL 


So this only requires me to add plugins to the portal app and make them accessible to other future native like apps. These apps can then be developed independently without requiring to update the portal app (unless they require native capabilities which have to be added to the portal app).


Thx for the idea of deep linking :-)

Mmm, I don't quite understand... Are you saying that App1 can use PortalApp's camera plugin? That would perhaps impose a security risk...

Hi Kilian,

I adjusted the portal app in such a way that it consists of 2 modules:

- the front end which contains the screens to take a picture, redirect to the other app 01 and app 02

- a blank module that includes the camera plugin and which contains client actions that basically wrap the camera plugin client actions

In the blank module I set some of these client actions to "Public" and use them in the portal app (front end)


APP 01 in it turn references the blank module and also uses the wrapper client actions (the same as the portal app). So in fact both the portal app and app 01 use the same plugin only via wrapper functions.


Yeah, but APP 01 isn't a native app in the sense that it doesn't run as an app on your device. So I'm surprised that it is able to access the plugins.

Kilian Hekhuis wrote:

Yeah, but APP 01 isn't a native app in the sense that it doesn't run as an app on your device. So I'm surprised that it is able to access the plugins.

True ... it does however use the same 'library' as the portal app that is installed on the phone (and the 'library' accesses the plugin) .. and may be that is allowed?! It is the same behaviour as Outsystems Now


Probably. I'm mainly used to web apps, and everything being linked in there, so that's totally not possible there. But I'm glad for you that you found a way, and a quite resourceful one as well.