For a mobile app development, it has 2 approaches: Native VS Hybid. In general the cost for building a native app is higher than a hybid app, especially for some e-commerce store they already have the site running, they want it also run in app to enable some feature like barcode scanning or wallet integration.
I am not a big fan of hybid app, but things not always go alone with your idea and sometimes showing respect to business decision is the way you need to go for. So I would share some of my lesson learn for such hybid app development:
The web and app development coupled
Once you decided to have the app run in hybid, you not only have to guarantee your app running, but also have to have the site the app ride on always up. If there is down-time, by accident or scheduled maintenance, you need ensure the app has proper handling or your app user will find the app fail to work.
Session sharing
As you may develop some part of the app as native, for some operation which require session sharing, you will have to deal with the sync of the session so it wont result in invalid session or fail to sync the session in native and that in webview
Provide information for the webview
For some case, even not ideal, your web may need to show some mobile app specific content, the way to tell the webview is by mean of user-agent. Modifying the web-view user agent with providing the hint of the web is being rendered in app’s webview, version information is also important. This allows you to run any targeted content by means of detecting the user agent string.
Performance about hybid app
This is not something new, rendering website in webview does not perform well comparing with using native approach. With descent API as the data source for the app, the payload for a request is likely smaller than loading a web page, this helps provide a better performance as you take shorter time to download the content. Sometime Webview needs to download all content in order to show the page.
Challenge on App vs webview tracking statistic (if deep link enabled)
If the web the app ride on is a e-commerce store, it oftens have many affiliate tracking. And if you have deep linking enabled. The traffic to your site will bring to the corresponding section of the app. This is actually breaking your affiliate tracking, having a reducion of traffic that execute your tracking as the web not even rendered. And even the tracking code can execute in webview, the data stored in the URL in form of param can lost, result in failure of getting the information that you need. Implementing tracking in app is far more complicate compare with the installation in web, the high cost and heavy effort demond to get the data right is far more complicate than you can think of.
It will never be complete native, and result in hybid forever
If you think of having the app run in hybid first, and turns it to native. I look forward your success, or you just planting a technical debt which never likely resolve, and this is a Tech Debt.
Therefore, if you take part in tech planning for app development, try not define your app to run as hybid unless you have really good plan to evolute it afterward.