Architecture

What are native hybrid web view apps?

Apps built using Median are much more than your regular web view app. While the apps still rely on embedded browser engines to render your web content within a native applications, they also can be enhanced by advanced native functionality and features. Fully native features may (but are not limited to)

  • Native Navigation Menus: Menus that are composed of native components and do not rely on your website. They may include dynamic menus, custom icons, localization and many more features.
  • Native Push Notifications: Powerful notification integration allow you to bring your preferred cross-platform push notification provider to engage with your users.
  • Native Plugins: Integrations of native mobile SDKs provide access to native device hardware, functionality, and third-party services. Through their optimization for mobile devices they are typically optimized for mobile device usage.

While you can achieve all of the above with native app development, Median offers you the App Studio Build platform that allows you to optimize your app for recent iOS and Android releases and maintain compatibility while avoiding the overhead that comes from maintaining your own native code base.

WebView Render

Median uses the Android System WebView as well as the WKWebView on iOS as your standard renderer for WebView components. Should you require a different WebView renderer such as GeckoView please contact us.

The WKWebView and Android System WebView components used within your iOS and Android apps do not necessarily support all JavaScript functionality that is supported within other web browsers. These components are a dependency from Apple and Google and compatibility with JavaScript and CSS varies by iOS and Android version. We recommend referring to the Mozilla developer docs which provide the most comprehensive compatibility tables showing support for specific methods and properties.

For specific functionality concerns we recommend reviewing the WebKit and Chromium Blink bug/issue trackers.

For many methods such as Blob and Geolocation functionality we provide shim code within the app to translate JavaScript methods into an integration with native iOS and Android methods. For more complex functionality such as text-to-speech (TTS) custom development by our team is required to provide an integration that meets your specific requirements.

App Performance

Performance of mobile apps built with our platform is strongly correlated to the performance of your web experience. This means you will have to find and remediate performance bottlenecks caused by website assets and resources such as javascript, images, embedded functionality.

In some cases, you can also achieve performance gains by leveraging native device SDKs of your third-party vendors and using Native Navigation rather than delivering menus through your web experience.

Testing and Debugging

There are several components to consider when testing and debugging apps, and while our App Studio provides built-in simulator there may be a better tool for your development and quality control teams. Generally, you will have to consider the following areas:

  • UI / UX: Validating the app user interface and user experience across platforms, device orientations and software versions.
  • App Performance: Identifying and mitigating performance bottlenecks from web resources.
  • Native Device Features: Validating native device functionality, such as haptics, in-app purchases, biometrics or root detection.
  • SDK and Plugin Configuration: Gathering logfiles and information to troubleshoot native SDK integrations and app crashes.

Each of the area has a tool that is best suited for the job. Please reference our overview available at Development & Test Deep Dive for a recommendation and limitation of tools available to you.

App Analytics & Website Analytics

Median does support most of the web analytics platforms (such as Google Analytics) out of the box and your will be able to identify iOS and Android users by a distinct user agent, header. You can learn more about identfying app users in the following article: Detecting App Usage

For additional in-depth event tracking, measurements (such as conversions and install/uninstall measurements) and analysis we recommend adding the Native Plugin of your favorite analytics platform. Today we offer integrations with:

For support of analytics platforms not listed above or available in our Native Plugin Library please contact us for custom development.

Solutions Architecture Services

Building a scalable, high-performance mobile app often starts with the right architecture. Median’s Solutions Architecture Services are designed to support your team from initial onboarding to advanced implementation planning - whether you're integrating native features, aligning to long-term roadmaps, or tackling specific technical challenges.

Developer Onboarding Services

Kick off your journey with guided support:

  • Live 1-on-1 Sessions: Get a personalized introduction to the Median App Studio from a dedicated Solutions Architect.
  • Targeted Training: Receive customized development training tailored to your app’s architecture and feature set.
  • Proof of Concept Walkthroughs: Dive deep into demos covering advanced use cases like deep linking, native navigation, and plugin integration.

Virtual Onsite Services

Bring clarity to your app’s architecture and roadmap:

  • Goal-Oriented Consultations: Share your product objectives and collaborate 1-on-1 with a Solutions Architect for deep-dive discussions.
  • Expert Architecture Audits: Uncover new opportunities through a technical audit aligned to your goals.
  • Actionable Reports: Walk away with a structured report summarizing findings, recommendations, and next steps.

To book ad hoc architecture services, open the Services tab when viewing your app on the Median platform. Or, contact our Solutions Architecture Team to explore which service best fits your needs.

Frequently Asked Questions

Will this work with my website?

Yes! The Median platform works with all website development platforms. Your app will display your website content as it is displayed in a mobile web browser such as Mobile Safari or Mobile Chrome.

We have many customers who develop their web content using Wordpress, Weebly, Wix, Webflow, and more. And customers who build web applications to deploy as web apps using Microsoft .NET and SharePoint, Salesforce Lightning, Bubble.io.

Most websites will display within apps created using Median automatically. To build highly immersive native apps as a web developer, use the Median JavaScript Bridge to add a range of native functionality

  • Change the app status bar color dynamically to match your web content and branding
  • Add native navigation menus such as a native bottom tab bar menu
  • Adjust the device screen brightness when displaying a QR code for other devices to scan
  • Prevent the device screen from timing out and going to sleep when showing long form content for the user to read

Which versions of Android and iOS will my app support?

Generally, we provide support all iOS and Android versions that receive active Apple iOS and Google Android security support.

To support legacy devices for specialized use-cases and enterprise environments the core Median app supports iOS 13+ and Android 8.1+ including both phones and tablets. Outside of the core functionality, minimum OS requirements to support Push Notification providers and Native Plugins vary by the SDKs and device functionality required.

Should you require support for older operating systems please contact us.

We continually release updates to support the latest operating system updates and new devices.

What are the benefits of converting my website into an app rather than building one from scratch?

Using Median you can build your own iOS and Android app in minutes, all at a fraction of the cost of hiring a developer to build an app from scratch. By converting your existing website into a native app, you will only need to maintain a single web codebase rather than separate iOS and Android apps.

Need to add advanced native features? We offer a range of Native Plugins that will get the job done or you can engage our team for custom development to add the native functionality you require. You will then only need to build an integration once using the Median JavaScript Bridge, a powerful API built into your app that allows your website to communicate with and control your app.

Using Median allows you to focus on developing the content and business logic of your app rather than hiring developers to build, update, and configure low-level native code from scratch. We make this process easy so you don’t have to worry about all of the technicalities and can focus on what really matters: creating a high quality experience for your users.

Can I use an alternate WebView component within my Android app rather than System WebView?

Yes. There are known limitations with the built-in Android System WebView such as:

  • Resources are shared across all apps that are using the System WebView component
  • During an update of System WebView all instances of WebView are stopped causing apps using WebView to crash
  • Edge case bugs remain open such as delays in user input which can cause poor UX for some apps

Median’s engineering team are able to implement a custom WebView component that is embedded directly in your app, rather than relying on the shared Android System WebView. We recommend GeckoView. You can learn more about WebView limitations and solutions via the Facebook Developer blog. Note however that when using an embedded WebView component the app binary size will be much larger than an app that uses the Android System WebView.

What's different than a basic web-view wrapper app?

Apps built using Median are much more than a wrapper app. The Median platform allows you to build an app with advanced native functionality and features. You can add native navigation menus, native push notifications (with OneSignal and other push providers), and incorporate our premium native plugins such as Face ID / Touch ID Biometric authentication, Social Login, QR/Barcode scanner, In-App Purchases, and much more.

When building your app you'll also benefit from the App Studio Build platform which has been supported and maintained since early 2014. As iOS and Android changes are released you can rebuild your app using the Median App Studio to maintain compatibility while avoiding the overhead that comes from maintaining your own code base.

Can I modify the source code for my app?

Yes! Full source code for iOS and Android is available for download and your license permits modification of the source. You may use Xcode and Android Studio to make any required changes and customizations. You can reference our articles below to build your app from the source.

After you've made changes you may work with the Median engineering team who can create a custom plugin based on your modifications so that you can continue to receive ongoing app updates through the Median App Studio.

How can I keep my app users logged in?

Login behavior within your app will mirror that of your website. In short, we recommend setting a persistent login cookie.

Session cookies, which can be used to keep a user logged in while they navigate from page to page within your website, will expire at the end of the session. This happens when the user logs out of your site manually, but also when the user quits their web browser. 

Persistent cookies can also be used to keep a user logged in while they navigate your site. What's different about persistent cookies is that even if the user quits their web browser, when they go back to your website the cookie will still exist and the user can then be automatically logged in. 

Of course, any invalidation of cookies, or timeouts, on your server side would render these cookies ineffective whether they are session or persistent cookies. 

The behavior of these cookies will work similarly in your apps. If you would like your users to be automatically logged in when they open up the app, even after quitting the app or restarting their device, please use persistent cookies for this purpose.

How can I disable Cleartext permission to disallow insecure network traffic?

If you only want to allow encrypted network traffic such as HTTPS on your app and disallow traffic from HTTP which contains unencrypted cleartext, you can open the Import / Export section of your app, edit the network object in appConfig.json's security object and specify "allowInsecure": false. If the security object is missing in your appConfig.json, you can create it as shown in the example below:

"security": {
    "network": {
        "allowInsecure": false
    }
}

How do I fix blank page or Invalid SSL connection errors?

For websites with HTTPS or SSL, if you are noticing blank pages or errors that mention SSL connection errors, please verify your SSL certificates are set up correctly.

We also suggest you inspect the Javascript console of your website, because if your website loads javascript, css, or image resources from other domains which themselves have SSL misconfiguration, then that can also cause this error to appear on your site.

You may enter your website domain at https://www.ssllabs.com/ssltest/ to verify your SSL certificate configuration.

Note: Even some domains with Grade A may have warnings listed under the grade (see image below).

Issues may include:

  • Certificate expired (fix by re-issuing)
  • Certificate chain incomplete (fix by adding intermediate certs)
  • Certificate or intermediate signed by SHA-1 (fix by re-issuing and/or updating intermediate certs)
  • Certificate signed by Symantec brands including Verisign, Geotrust, RapidSSL, and Thawte (fix by re-issuing and updating intermediate certs)

How can I optimize caching of my web content?

Like a web browser, the app caches all loaded content unless instructed not to. This can happen when:

  • a Cache-Control header is present, or
  • the content is served dynamically (e.g., the file name changes with each request).

When caching is properly configured, the app will load content from the local cache instead of making a full request to the server.