Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

amis-adf-enterprise-mobility

510 views

Published on

Presentation on Oracle ADF Mobile (may 2014)

Published in: Technology
  • Be the first to comment

  • Be the first to like this

amis-adf-enterprise-mobility

  1. 1. Mobile First Oracle’s ADF Mobile Framework AMIS Enterprise to Mobility Oracle ADF Conference, Nieuwegein, May 21st 2014
  2. 2. Who Am I • Luc Bors • Principal Consultant • AMIS, Netherlands
  3. 3. Agenda • ADF Mobile Overview • Preparing for Development • Creating your ADF Mobile Application • Building the UI • Data (and) Services • Device Interaction • Push Notifications • Stuff I cannot talk about (but Chris can)
  4. 4. Oracle ADF Mobile • Build Once, Run on Multiple-Platforms – Phones, Tablets, iOS, Android, … • Java for business logic • HTML5/JavaScript user interface • Consistent business logic & data model • Disconnected: SQLite with encryption • Full access to native device features • Modular, reusable application components • JDeveloper and soon Eclipse
  5. 5. Native Mobile User Experience • Device native user experience • Spring board and tab bar for feature navigation • Advanced HTML5-based UI • Full animation, gesture, and touch interaction support • Interactive Data Visualization Components • Device Interaction using Cordova
  6. 6. ADF Mobile Overview Device Native Container SQLite Database Java VM Configuration Server Business Logic Model JDBC Apache Cordova SQLite Web View Server HTML HTML5 and Javascript Presentation AMX View Local HTML Controller Push Handler Server Generated HTML APN/GCM Push Services SOAP and REST Services Device Services App Config Credential Management SSO and Access Control
  7. 7. Development Environment • Development Machine: – Mac is required if you intend to support iOS devices • Mobile development SDKs and simulators – Used by JDeveloper to compile device native binaries • Mobile developer program membership – Needed to deploy to an actual device • Install JDev and download/install the ADF Mobile extension • Configure ADF Mobile extension preferences
  8. 8. JDeveloper Configuration
  9. 9. ADF Mobile Deployment
  10. 10. ADF Mobile Application Config • Feature configuration – Constraints – Content – Feature Level Preferences – Security • Application configuration – Configuration (ALCL) – Available Features – Application Level Preferences – Security
  11. 11. ADF Mobile Features •
  12. 12. ADF mobile – UI content • Local AMX File – JSF-like file built visually in JDeveloper – Generated into HTML/JS on device at RT – Based on HTML5 • Remote URL – ADF Trinidad for Smartphones – ADF Faces on Tablets – Any third-party site • Local HTML File – Hand-coded HTML5 pages
  13. 13. AMX View and Controller Device Native Container SQLite Database Java VM Configuration Server Business Logic Model JDBC Apache Cordova SQLite Web View Server HTML HTML5 and Javascript Presentation AMX View Local HTML Controller Push Handler Server Generated HTML APN/GCM Push Services SOAP and REST Services Device Services App Config Credential Management SSO and Access Control
  14. 14. Building AMX Pages •
  15. 15. Building AMX Pages
  16. 16. Using Layout Components
  17. 17. Swimming-lanes • Make all ‘content’ available in a continuously scrolling swimlane • Use panelGroupLayout – Width 100% <amx:panelGroupLayout layout="horizontal” inlineStyle="width:100%;">"
  18. 18. Device info and Properties • Device info • Device Properties
  19. 19. Work With Form Factors • Respond to Form Factors • Conditionally Render Different content
  20. 20. Gesture Support • You can configure Button, Link, and List Item components to react to the following gestures: • Swipe to the right • Swipe to the left • Swipe up • Swipe down • Tap-and-hold
  21. 21. Gesture examples • The Swipe Gesture <amx:actionListener binding="#{mybean.DoX}" • The Tap Gesture type="swipeRight"/> <amx:showPopupBehavior popupid="pop1" type="tapHold“ />
  22. 22. Navigation (Declarative) • Declarative Navigation – Button/Link/ListItem <amx:listItem id="li1" action="detail" showLinkIcon="true">" <amx:setPropertyListener id="x" from="#{row.rowKey}” to="#{pageFlowScope.myBean.currentStadium}" " type="action"/>"
  23. 23. Navigation (Programmatic) • Declarative Navigation – Button/Link/ListItem • Programmatic Navigation – JavaCode AdfmfContainerUtilities.invokeContainerJavaScriptFunction(" AdfmfJavaUtilities.getFeatureName(), " "adf.mf.api.amx.doNavigation", " new Object[] { ”detail" }); } "
  24. 24. Controlling your application • Springboard configuration in adfmf-application.xml
  25. 25. The Default Springboard
  26. 26. The Custom SpringBoard
  27. 27. Configuring the springboard
  28. 28. Feature Archives • Feature Archives can be reused • Deploy ADF Mobile app as FAR • Consume features from FAR in other apps
  29. 29. Server HTML (Remote URL) Device Native Container SQLite Database Java VM Configuration Server Business Logic Model JDBC Apache Cordova SQLite Web View Server HTML HTML5 and Javascript Presentation AMX View Local HTML Controller Push Handler Server Generated HTML APN/GCM Push Services SOAP and REST Services Device Services App Config Credential Management SSO and Access Control
  30. 30. Remote URLs • For embedding existing web pages in your ADF Mobile app. • For instance: – News Website – Existing enterprise app Mobile Browser Pages • Note: – Best use Optimized Mobile Browser Pages – Apache Trinidad components – Oracle recommends using ADF Mobile browser
  31. 31. Feature as Remote URL • Create New Feature as Remote URL • Create URL Connection
  32. 32. Whitelisting • Why do we need to do this ? • Mobile device is redirected to m.uefa.com
  33. 33. Device Interaction Device Native Container SQLite Database Java VM Configuration Server Business Logic Model JDBC Apache Cordova SQLite Web View Server HTML HTML5 and Javascript Presentation AMX View Local HTML Controller Push Handler Server Generated HTML APN/GCM Push Services SOAP and REST Services Device Services App Config Credential Management SSO and Access Control
  34. 34. Device Interaction • The Device Datacontrol • Drag n Drop support • Attributes as fields • Operations as buttons • Or as a link
  35. 35. Behind the scenes • Now where is the catch ?
  36. 36. Camera interaction • Take a picture …………… import oracle.adf.model.datacontrols.device; DeviceManager dm = DeviceManagerFactory.getDeviceManager(); if (dm.hasCamera){ dm.getPicture( 100, DeviceManager.CAMERA_DESTINATIONTYPE_FILE_URI, DeviceManager.CAMERA_SOURCETYPE_CAMERA, false, DeviceManager.CAMERA_ENCODINGTYPE_PNG, 200, 200); • …… or get one from the Library } DeviceManager.CAMERA_SOURCETYPE__PHOTOLIBRARY
  37. 37. Data (and) Services Device Native Container SQLite Database Java VM Configuration Server Business Logic Model JDBC Apache Cordova SQLite Web View Server HTML HTML5 and Javascript Presentation AMX View Local HTML Controller Push Handler Server Generated HTML APN/GCM Push Services SOAP and REST Services Device Services App Config Credential Management SSO and Access Control
  38. 38. Using Webservices • The Webservice Datacontrol for SOAP-XML and REST-XML
  39. 39. Using Webservices directly • Just drag & drop the method from the Data Control
  40. 40. Using Webservices from Java • Invoke directly from java. • Does not use the page Definition • Uses Framework utilityMethod • AdfmfJavaUtilities.invokeDataControlMethod() • Datacontrol must be in available in DataBindings.cpx
  41. 41. Advantages • Provides more flexibility to shape model to mobile UI • Perform client side validation • Minimize the number of round trips • Offline caching à Pay attention to Stevens Presentation later today ! • Mash-up data from multiple services
  42. 42. Patterns… • SOAP/REST XML Webservice – Needs WebServiceDataControl and invokeDataControlMethod()
  43. 43. Patterns… • REST-JSON Webservice – Needs URL Connection and RestServiceAdapter
  44. 44. Patterns…. • SQLiteDatabase – Needs Plain JDBC
  45. 45. Obviously all the same…… • Service Object Data Control Pattern – Whatever “back end” data source you use….. – It is completely transparent for your UI
  46. 46. Push Notifications Device Native Container SQLite Database Java VM Configuration Server Business Logic Model JDBC Apache Cordova SQLite Web View Server HTML HTML5 and Javascript Presentation AMX View Local HTML Controller Push Handler Server Generated HTML APN/GCM Push Services SOAP and REST Services Device Services App Config Credential Management SSO and Access Control
  47. 47. Push Notifications •
  48. 48. Push Notifications • Subscribe to Messaging Service • Receive token • Register with Enterprise app • Enterprise app Pushes message to Messaging Service • Messaging Service delegates message to device(s)
  49. 49. Start The ADF Mobile App • ApplicationLifeCycleListener – In the Start() Method create a new PushNotificationListener() public void start() { // Add code here... EventSource evtSource = EventSourceFactory.getEventSource( NativePushNotificationEventSource. NATIVE_PUSH_NOTIFICATION_REMOTE_EVENT_SOURCE_NAME); evtSource.addListener(new PushNotificationListener()); }
  50. 50. Open the application • In the PushNotificationListener – OnOpen() // receive token – OnMessage() // handle notification – OnError() public void onOpen(String token) { // Invoked during the Push Notification registration process. // The parameter "token" contains the token received from APNs or GCMs // that uniquely identifies a specific device-application combination. ValueExpression ve = AdfmfJavaUtilities.getValueExpression( "#{applicationScope.deviceToken}", String.class); if (token != null){ ve.setValue(AdfmfJavaUtilities.getAdfELContext(), token); } else{ ve.setValue(AdfmfJavaUtilities.getAdfELContext(), "dummy Token"); } }
  51. 51. Working with the Notification public void onMessage(Event event) { PayloadServiceResponse serviceResponse = (PayloadServiceResponse)jsonHelper.fromJSON( PayloadServiceResponse.class, event.getPayload()); String message = serviceResponse.getCustomMessage(); ValueExpression notificationPayloadBinding = AdfmfJavaUtilities.getValueExpression( "#{applicationScope.notificationSessionId}", String.class); ValueExpression ve = AdfmfJavaUtilities.getValueExpression( "#{applicationScope.notified}", Boolean.class); ve.setValue(AdfmfJavaUtilities.getAdfELContext(), Boolean.TRUE); // also, lets decrease the application icon badge by one int currentBadge = AdfmfContainerUtilities.getApplicationIconBadgeNumber(); if (currentBadge > 0){ AdfmfContainerUtilities. setApplicationIconBadgeNumber(currentBadge - 1); } AdfmfContainerUtilities.gotoFeature( "com.tamcapp.mobilebook.ses.ConferenceSessions"); } }
  52. 52. Example • Select device • Send message • Get notified
  53. 53. Nothing more I can say……

×