Using APEX for Mobile Web Applications has always lead to a limited user experience, compared to native mobile applications. The use of jQuery Mobile was a valid approach to overcome this, but had it’s difficulties and booby-traps for the developers. Recent enhancements to Universal Theme in APEX version 18 improved the UX. Combine this with the latest PWA features to provide a better user experience, mobile versions of APEX web applications are becoming much more user friendly and native-like.
I will explain the mobile functionality of APEX and Universal Theme, like mobile specific components and templates, touch gestures based dynamic actions, and show a real life public facing (mobile) web application. Beyond standard APEX functionality, I will show how to improve the mobile user experience with transition effects and PWA features like off-line handling, shortcut icons and notifications. Keep’s you moving …
1. Keep me moving
Goin’ Mobile
with Universal Theme
and Beyond
Christian Rokitta
Bonn 2019
2. 1993
today
1996 1999 2009 20152010 2011 2014
Oracle
Database
Version 6
Hoechst AG
Clinical Research
Frankfurt, Germany
Custom Development
Utrecht, Netherlands
<HTML>
Oracle Consultant/Product Development Manager
Utrecht, Netherlands
mod_plsql
Oracle Web Toolkit
JavaScript();
HTML DB
APEX
Speaker
Oracle Database & Application Express Consultant
Utrecht, Netherlands
{CSS}
proud member of
APEX UI Customization
Reporting Plug-in
Christian Rokitta
3. Out in the woods
Or in the city
It's all the same to me
When I'm driving free
The world's my home
When I'm mobile
… Keep me moving
Goin' Mobile / Who’s Next
The Who
21. Universal Theme
Client Side vs Server Side
• Universal Theme
• Responsive Grid
• Utility Classes
• Server Side Device Detection?
• Who are you? – client device Categorizr for APEX (desktop, tablet, mobile)
http://rokitta.blogspot.com/2012/04/are-you-client-device-categorizr-for.html
• How are you? - Categorizr for APEX part 2: the Plug-in
(viewportWidth, g_viewportHeight, g_viewportOrientation)
http://rokitta.blogspot.com/2013/05/how-are-you-categorizr-for-apex-part-2.html
21 of 36
22. Universal Theme
Reduce Traffic
use AJAX
instead of Page rendering/processing cycle
• Declarative: Dynamic Action
some region types are not refreshable with build in dynamic action: PL/SQL Region, ListView, …
• JavaScript API: apex.server.process
22 of 36
23. Universal Theme
What I’m missing1
23 of 36
Page Transitions
It’s possible to add your own custom CSS
and jQuery code i.c.w. build in Touch
Gestures Dynamic Actions.
Demo?!
24. Universal Theme
What I’m missing2
24 of 36
Pagination in
Column Toogle and
Reflow Report
was available in jQuery Mobile
25. Universal Theme
What I’m missing3
25 of 36
Listview
Dynamic Load at
EndOfList/Scroll event
Infinite Scrolling
again: was available in jQuery Mobile
26. Universal Theme
What I’m missing4
26 of 36
Listview
Dynamic Load at
EndOfList/Scroll event
Infinite Scrolling
again: was available in jQuery Mobile
29. APEX vs PWA vs Hybrid vs Native
• APEX -> online first
• PWA (Progressive Web Apps) -> offline first
• Hybrid -> AppStore, WebView, advanced device API’s, files on device
• Native -> OS specific development
29 of 36
30. Progressive Web Apps (PWA)
• Fullscreen mobile experience
• Shortcut on Device
• Caching : Faster
• Collection of Browser API’s
• Service Workers
• Online/offline detection
• (push) Notifications (using Firebase)
• Local storage
• …
30 of 36
37. PWA Concepts
Add to Home Screen - aka web app install prompt
• web app is not already installed
• meets a user engagement heuristic
currently: the user has interacted with the domain for at least 30 seconds
• includes a web app manifest
• served over HTTPS (required for service workers)
• has registered a service worker with a fetch event handler
37 of 36
Navigation Bar: std drop down. Might want to change
The web app manifest is a simple JSON file that tells the browser about your web application and how it should behave when 'installed' on the user's mobile device or desktop. Having a manifest is required by Chrome to show the Add to Home Screen prompt.
The web app manifest is a simple JSON file that tells the browser about your web application and how it should behave when 'installed' on the user's mobile device or desktop. Having a manifest is required by Chrome to show the Add to Home Screen prompt.
short_name and/or name
You must provide at least the short_name or name property. If both are provided, short_name is used on the user's home screen, launcher, or other places where
icons
When a user adds your site to their home screen, you can define a set of icons for the browser to use. These icons are used in places like the home screen, app launcher, task switcher, splash screen, etc.
space may be limited. name is used in the app install prompt.
start_url
The start_url tells the browser where your application should start when it is launched, and prevents the app from starting on whatever page the user was on when they added your app to their home screen.
scope
The scope defines the set of URLs that the browser considers to be within your app, and is used to decide when the user has left the app. The scope controls the URL structure that encompasses all the entry and exit points in your web app. Your start_url must reside within the scope.
theme_color
The theme_color sets the color of the tool bar, and may be reflected in the app's preview in task switchers.
short_name and/or name
You must provide at least the short_name or name property. If both are provided, short_name is used on the user's home screen, launcher, or other places where
icons
When a user adds your site to their home screen, you can define a set of icons for the browser to use. These icons are used in places like the home screen, app launcher, task switcher, splash screen, etc.
space may be limited. name is used in the app install prompt.
start_url
The start_url tells the browser where your application should start when it is launched, and prevents the app from starting on whatever page the user was on when they added your app to their home screen.
scope
The scope defines the set of URLs that the browser considers to be within your app, and is used to decide when the user has left the app. The scope controls the URL structure that encompasses all the entry and exit points in your web app. Your start_url must reside within the scope.
theme_color
The theme_color sets the color of the tool bar, and may be reflected in the app's preview in task switchers.
short_name and/or name
You must provide at least the short_name or name property. If both are provided, short_name is used on the user's home screen, launcher, or other places where
icons
When a user adds your site to their home screen, you can define a set of icons for the browser to use. These icons are used in places like the home screen, app launcher, task switcher, splash screen, etc.
space may be limited. name is used in the app install prompt.
start_url
The start_url tells the browser where your application should start when it is launched, and prevents the app from starting on whatever page the user was on when they added your app to their home screen.
scope
The scope defines the set of URLs that the browser considers to be within your app, and is used to decide when the user has left the app. The scope controls the URL structure that encompasses all the entry and exit points in your web app. Your start_url must reside within the scope.
theme_color
The theme_color sets the color of the tool bar, and may be reflected in the app's preview in task switchers.
short_name and/or name
You must provide at least the short_name or name property. If both are provided, short_name is used on the user's home screen, launcher, or other places where
icons
When a user adds your site to their home screen, you can define a set of icons for the browser to use. These icons are used in places like the home screen, app launcher, task switcher, splash screen, etc.
space may be limited. name is used in the app install prompt.
start_url
The start_url tells the browser where your application should start when it is launched, and prevents the app from starting on whatever page the user was on when they added your app to their home screen.
scope
The scope defines the set of URLs that the browser considers to be within your app, and is used to decide when the user has left the app. The scope controls the URL structure that encompasses all the entry and exit points in your web app. Your start_url must reside within the scope.
theme_color
The theme_color sets the color of the tool bar, and may be reflected in the app's preview in task switchers.
short_name and/or name
You must provide at least the short_name or name property. If both are provided, short_name is used on the user's home screen, launcher, or other places where
icons
When a user adds your site to their home screen, you can define a set of icons for the browser to use. These icons are used in places like the home screen, app launcher, task switcher, splash screen, etc.
space may be limited. name is used in the app install prompt.
start_url
The start_url tells the browser where your application should start when it is launched, and prevents the app from starting on whatever page the user was on when they added your app to their home screen.
scope
The scope defines the set of URLs that the browser considers to be within your app, and is used to decide when the user has left the app. The scope controls the URL structure that encompasses all the entry and exit points in your web app. Your start_url must reside within the scope.
theme_color
The theme_color sets the color of the tool bar, and may be reflected in the app's preview in task switchers.
short_name and/or name
You must provide at least the short_name or name property. If both are provided, short_name is used on the user's home screen, launcher, or other places where
icons
When a user adds your site to their home screen, you can define a set of icons for the browser to use. These icons are used in places like the home screen, app launcher, task switcher, splash screen, etc.
space may be limited. name is used in the app install prompt.
start_url
The start_url tells the browser where your application should start when it is launched, and prevents the app from starting on whatever page the user was on when they added your app to their home screen.
scope
The scope defines the set of URLs that the browser considers to be within your app, and is used to decide when the user has left the app. The scope controls the URL structure that encompasses all the entry and exit points in your web app. Your start_url must reside within the scope.
theme_color
The theme_color sets the color of the tool bar, and may be reflected in the app's preview in task switchers.