Table of Contents
- Title and Copyright Information
- Preface
- What's New in This Guide for MAF Release 2.5.1
- 1 Introduction to Oracle Mobile Application Framework
-
2
Getting Started with MAF Application Development
- Introduction to Declarative Development for MAF Applications
- Creating a MAF Application
- Defining Application Features for a MAF Application
- Adding Content to an Application Feature
- Adding Application Features to a MAF Application
- Configuring the Development Environment for Form Factors
- Creating MAF AMX Pages and MAF Task Flows
- 3 Configuring the Content of a MAF Application
-
4
Configuring the Application Navigation
- Introduction to the Display Behavior of MAF Applications
- Configuring Application Navigation
- What Happens When You Configure the Navigation Options
- What Happens When You Set the Animation for the Springboard
- What You May Need to Know About Custom Springboard Application Features with HTML Content
- What You May Need to Know About Custom Springboard Application Features with MAF AMX Content
- What You May Need to Know About the Runtime Springboard Behavior
- Restarting an Application Feature in a MAF Application
- Navigating a MAF Application Using Android’s Back Button
- Creating a Sliding Window in a MAF Application
- Using Custom URL Schemes in MAF Applications
-
5
Defining the Content Type of MAF Application Features
- Introduction to Content Types for an Application Feature
- Defining the Application Feature Content as Remote URL or Local HTML
- Defining the Application Feature Content as a MAF AMX Page or Task Flow
- Configuring the Web View of Application Features with AMX Content on iOS
- Selecting External Resources for Use in Application Features
-
6
Creating the Client Data Model in a MAF Application
- Introduction to the Client Data Model in a MAF Application
- Overview of Creating a Client Data Model in a MAF Application
- Connecting to a REST Service to Create the Client Data Model
- Discovering Candidate Data Objects for the Client Data Model
- Selecting and Persisting Data Objects for the Client Data Model
- Specifying Parent-Child Relationships for Data Objects
- Defining CRUD REST Resources
- Specifying CRUD REST Resource Details
- Setting Runtime Options for the Client Data Model
- Generating the Client Data Model
- Editing the Client Data Model in a MAF Application
- Accessing the SQLite Database Using the MAF Client Data Model DBPersistenceManager
- Defining a Custom Resource
- Executing Custom Logic After CRUD REST Calls
- Getting Programmatic Access to Service Objects
- Understanding Usage of the Primary Key
- Using Filtered Entity Lists
- Creating a User Interface from a MAF Client Data Model
- Synchronizing Offline Transactions from a MAF Application
- Understanding the Client Data Model’s Support for Data Change Events
- Forcing Offline Mode in a MAF Application
- Using a Visual Indicator for Running Background Tasks
-
7
Using Oracle Mobile Cloud Service Platform APIs in a MAF Application
- Introduction to Using Oracle Mobile Cloud Service Platform APIs
- Accessing Oracle Mobile Cloud Service User Information
-
Accessing Files in an Oracle Mobile Cloud Service Storage Collection
- How to Create the StorageObjectService Bean Data Control
- What Happens When You Create the StorageObject Bean Data Control
- How to Retrieve All Files from an Oracle Mobile Cloud Service Storage Collection
- How to Filter the List of Storage Objects from an MCS Storage Collection
- How to Retrieve a Single File from an Oracle Mobile Cloud Service Storage Collection
- How to Associate Storage Objects with Data in your MAF Application
-
Sending Analytics Information to Oracle Mobile Cloud Service
- How to Configure the Transfer of Analytics to Oracle Mobile Cloud Service
- How to Programmatically Send Analytics to Oracle Mobile Cloud Service
- How to Send Context Events to Oracle Mobile Cloud Service
- How to Send Analytics to Other Repositories
- MAF Framework Events that Capture Analytics Information
- Sending Diagnostic Information to Oracle Mobile Cloud Service
-
8
Localizing MAF Applications
- Introduction to MAF Application Localization
- Setting Resource Bundle Options for a MAF Application
- Defining Text Resources in a Base Resource Bundle
- Creating Locale-Specific Resource Bundles
- Editing Resources in Resource Bundles
- Localizing Image Files in a MAF Application
- Specifying Supported Languages for Your Application
- MAF Support of Languages
- Localizable MAF Properties
-
9
Skinning MAF Applications
- Introduction to MAF Application Skins
- Adding a Custom Skin to an Application
- Specifying a Skin for an Application to Use
- Registering a Custom Skin
- Versioning MAF Skins
- What Happens When You Version Skins
- Overriding the Default Skin Styles
- What You May Need to Know About Skinning
- Adding a New Style Sheet to a Skin
- Enabling End Users Change an Application's Skin at Runtime
- What Happens at Runtime: How End Users Change an Application's Skin
-
10
Using Plugins in MAF Applications
- Introduction to Using Plugins in MAF Applications
- Enabling a Core Plugin in Your MAF Application
- Registering Additional Plugins in Your MAF Application
- Deploying Plugins with Your MAF Application
- Importing Plugins from a Feature Archive File
- Using a Plugin in a MAF Application
- Providing Usage Descriptions for Plugins that Access Device Capabilities on iOS
- Allowing Cordova Plugins to Run in the Native UI on the Windows Platform
- Configuring Proxy Settings for Apache Cordova Plugman
-
11
Customizing MAF Application Artifacts with MDS
- Introduction to Applying MDS Customizations to MAF Files
- Customizing MAF Applications with MDS
- Configuring Customization Layers
- Creating Customization Classes
- Consuming Customization Classes
- Understanding a Customization Developer Role
- Enabling Customizations in Resource Bundles
- Upgrading a MAF Application with Customizations
- 12 Using Lifecycle Listeners in MAF Applications
-
13
Creating MAF AMX Pages
- Introduction to the MAF AMX Application Feature
-
Creating Task Flows
- How to Create a Task Flow
- What You May Need to Know About Task Flow Activities and Control Flows
- What You May Need to Know About the ViewController-task-flow.xml File
- What You May Need to Know About the MAF Task Flow Diagrammer
- How to Add and Use Task Flow Activities
- How to Define the Data Control Context Depth for Task Flows
- How to Define Control Flows
- What You May Need to Know About MAF Support for Back Navigation
- How to Enable Page Navigation by Dragging
- How to Specify Action Outcomes Using UI Components
- How to Create and Reference Managed Beans
- How to Specify the Page Transition Style
- What You May Need to Know About Bounded and Unbounded Task Flows
-
Creating Views
- How to Work with MAF AMX Pages
- How to Add UI Components to a MAF AMX Page
-
How to Add Data Controls to a MAF AMX Page
- Dragging and Dropping Attributes
- Dragging and Dropping Operations
- Dragging and Dropping Collections
- What You May Need to Know About Generated Bindings
- What You May Need to Know About Generated Drag and Drop Artifacts
- Using the MAF AMX Editor Bindings Tab
- What You May Need to Know About Removal of Unused Bindings
- What You May Need to Know About the Server Communication
-
14
Creating the MAF AMX User Interface
- Introduction to Creating the User Interface for MAF AMX Pages
-
Designing the Page Layout
- How to Use a View Component
- How to Use a Panel Page Component
- How to Use a Panel Group Layout Component
- How to Use a Panel Form Layout Component
- How to Use a Panel Stretch Layout Component
- How to Use a Panel Label And Message Component
- How to Use a Facet Component
- How to Use a Popup Component
- How to Use a Panel Splitter Component
- How to Use a Spacer Component
- How to Use a Table Layout Component
- How to Use a Masonry Layout Component
- How to Use an Accessory Layout Component
- How to Use a Deck Component
- How to Use a Flex Layout Component
- How to Use the Fragment Component
-
Creating and Using UI Components
- How to Use the Input Text Component
- How to Use the Input Number Slider Component
- How to Use the Output Text Component
-
How to Use Buttons
- Displaying Default Style Buttons
- Displaying Back Style Buttons
- Displaying Highlight Style Buttons
- Displaying Alert Style Buttons
- Using Additional Button Styles
- Using Buttons Within the Application
- Enabling the Back Button Navigation
- What You May Need to Know About the Order of Processing Operations and Attributes
- How to Use Links
- How to Display Images
- How to Use the Checkbox Component
- How to Use the Select Many Checkbox Component
- How to Use the Choice Component
- How to Use the Select Many Choice Component
- How to Use the Boolean Switch Component
- How to Use the Select Button Component
- How to Use the Radio Button Component
- How to Use List View and List Item Components
- How to Use a Carousel Component
- How to Use the Film Strip Component
- How to Use Verbatim Component
- How to Use an Output HTML Component
- How to Enable Iteration
- How to Refresh Contents of UI Components
- How to Use the Action Listener
- How to Use the Set Property Listener
- How to Use the Client Listener
- How to Convert Date and Time Values
- How to Convert Numeric Values
- How to Enable Drag Navigation
- How to Use the Loading Indicator
- Creating Custom UI Components
- Enabling Gestures
- Implementing Application Shortcuts for Use on iOS Devices with 3D Touch Support
-
Providing Data Visualization
- How to Create an Area Chart
- How to Create a Bar Chart
- How to Create a Range Chart
- How to Create a Bubble Chart
- How to Create a Combo Chart
- How to Create a Line Chart
- How to Create a Pie Chart
- How to Create a Scatter Chart
- How to Create a Spark Chart
- How to Create a Funnel Chart
- How to Create a Stock Chart
- How to Style Chart Components
- How to Use Events with Chart Components
- What You May Need to Know About Customization of Chart Tooltips
- How to Enable Sorting of Charts with Categorical Axis
- How to Define the Initial Zooming of Charts
- How to Define Stacking of Specific Chart Series
- How to Enable Split Dual-Y Axis in Charts
- How to Create a LED Gauge
- How to Create a Status Meter Gauge
- How to Create a Dial Gauge
- How to Create a Rating Gauge
- How to Define Child Elements for Chart and Gauge Components
- How to Create a Geographic Map Component
- How to Create a Thematic Map Component
- How to Use Events with Map Components
- How to Create a Treemap Component
- How to Create a Sunburst Component
- How to Create a Timeline Component
- How to Create an NBox Component
- How to Create a Picto Chart
- How to Define Child Elements for Map Components, Sunburst, Treemap, Timeline, Picto Chart, and NBox
- How to Create Databound Data Visualization Components
- How to Create Data Visualization Components Based on Static Data
- How to Enable Interactivity in Chart Components
- How to Create Polar Charts
- Styling UI Components
- Understanding MAF Support for Accessibility
- Validating Input
- Using Event Listeners
-
15
Using Bindings and Creating Data Controls in MAF AMX
- Introduction to Bindings and Data Controls
- About Object Scope Lifecycles
-
Creating EL Expressions
- About Data Binding EL Expressions
- How to Create an EL Expression
- What You May Need to Know About MAF Binding Properties
- How to Enable Retention of Data Provider State Across Iterators
- How to Reference Binding Containers
- About the Categories in the Expression Builder
- About EL Events
- How to Use EL Expressions Within Managed Beans
- Creating and Using Managed Beans
- Exposing Business Services with Data Controls
- Creating Databound UI Components from the Data Controls Panel
- What Happens at Runtime: How the Binding Context Works
- Configuring Data Controls
- Working with Attributes
- Creating and Using Bean Data Controls
- Sharing Instances of Data Controls Across Application Features
-
Using the DeviceFeatures Data Control
- How to Use the getPicture Method to Enable Taking Pictures
- How to Use the SendSMS Method to Enable Text Messaging
- How to Use the sendEmail Method to Enable Email
- How to Use the createContact Method to Enable Creating Contacts
- How to Use the findContacts Method to Enable Finding Contacts
- How to Use the updateContact Method to Enable Updating Contacts
- How to Use the removeContact Method to Enable Removing Contacts
- How to Use the startLocationMonitor Method to Enable Geolocation
- How to Use the displayFile Method to Enable Displaying Files
- How to Use the addLocalNotification and cancelLocalNotification Methods to Manage Local Notifications
- What You May Need to Know About Device Properties
- Validating Attributes
- Using Background Threads
- Allowing Background Thread Processing for MAF Applications
- Working with Data Change Events
- 16 Configuring End Points Used in MAF Applications
- 17 Using Web Services in a MAF Application
-
18
Using the Local Database in MAF AMX
- Introduction to the Local SQLite Database Usage
- Using the Local SQLite Database
- 19 Customizing MAF AMX Application Feature Artifacts
- 20 Implementing Application Feature Content Using Remote URLs
-
21
Enabling User Preferences
-
Creating User Preference Pages for a Mobile Application
-
How to Create Mobile Application-Level Preferences Pages
- How to Create a New User Preference Page
- What Happens When You Add a Preference Page
- How to Create User Preference Lists
- What Happens When You Create a Preference List
- How to Create a Boolean Preference List
- What Happens When You Add a Boolean Preference
- How to Add a Text Preference
- What Happens When You Define a Text Preference
- What Happens When You Create an Application-Level Preference Page
-
How to Create Mobile Application-Level Preferences Pages
- Creating User Preference Pages for Application Features
- Using EL Expressions to Retrieve Stored Values for User Preference Pages
- Platform-Dependent Display Differences
-
Creating User Preference Pages for a Mobile Application
-
22
Setting Constraints on Application Features
- Introduction to Constraints
- Defining Constraints for Application Features
- 23 Enabling and Using Notifications
- 24 Displaying Error Messages in MAF Applications
-
25
Deploying MAF Applications
- Introduction to Deployment of MAF Applications
- Working with Deployment Profiles
-
Deploying a MAF Application to the Android Platform
- How to Configure Gradle Proxy Settings
- How to Sign a MAF Application that You Deploy to the Android Platform
- What You May Need to Know About Credential Storage
- How to Deploy a MAF Application to the Android Platform
- What Happens When You Deploy a MAF Application to the Android Platform
- How to Add a Custom Image to an Android Application
- What Happens When JDeveloper Deploys Images for Android Applications
-
Deploying an iOS Application
- How to Create an iOS Deployment Profile
- How to Set Device Signing and Export Options
- How to Deploy an iOS Application to an iOS Simulator
- How to Deploy an Application to an iOS-Powered Device
- What You May Need to Know About Deploying an Application to an iOS-Powered Device
- How to Distribute an iOS Application to the App Store
- Deploying a MAF Application to the Universal Windows Platform
- Overview of MAF Quick Deployment of Applications
- Deploying Feature Archive Files (FARs)
- Creating a Mobile Application Archive File
- Creating a New Application from an Application Archive
- Deploying MAF Applications from the Command Line Using OJDeploy
-
26
Understanding Secure Mobile Development Practices
- Weak Server-Side Controls
- Insecure Data Storage on the Device
- Insufficient Transport Layer Protection
- Side-Channel Data Leakage
- Poor Authorization and Authentication
- Broken Cryptography
- Client-Side Injection From Cross-Site Scripting
- Security Decisions From Untrusted Inputs
- Improper Session Handling
- Lack of Binary Protections Resulting in Sensitive Information Disclosure
-
27
Securing MAF Applications
- Introduction to MAF Security
- About the User Login Process
- Overview of the Authentication Process for MAF Applications
-
Configuring MAF Connections
- How to Create a MAF Login Connection
- How to Create a Multi-Tenant Aware MAF Login Connection
- How to Configure Basic Authentication
- How to Configure OAuth Authentication
- How to Configure OpenID Authentication
- How to Configure Single Sign-On in a MAF Application
- How to Configure a Placeholder Connection for MAF Application Login
- How to Update Connection Attributes of a Named Connection at Runtime
- How to Store Login Credentials
- What Happens When You Create a Connection for a MAF Application
- What Happens When You Create a Multi-Tenant Aware Connection
- What You May Need to Know About the Login Connection Configuration
- What You May Need to Know About Multiple Identities for Local and Hybrid Login Connections
- What You May Need to Know About Migrating a MAF Application and Authentication Modes
- What You May Need to Know About Custom Headers
- What Happens at Runtime: When MAF Calls a REST Web Service
- What You May Need to Know About Injecting Basic Authentication Headers
- What You May Need to Know About Web Service Security
- How to Configure Access Control
- What You May Need to Know About the Access Control Service
- How to Alter the Application Loading Sequence
- How to Configure Login Credentials Programmatically Prior to Authentication
-
Configuring Security for MAF Applications
- How to Enable Application Features to Require Authentication
- How to Designate the Login Page
- How to Create a Custom Login HTML Page
- What You May Need to Know About Login Pages
- What You May Need to Know About Login Page Elements
- What Happens in JDeveloper When You Configure Security for Application Features
- Allowing Access to Device Capabilities
- Enabling Users to Log Out from Application Features
- Using MAF Authentication APIs
- Creating Certificates to Access Servers That Use Self-Signed Certificates for SSL
- Registering SSL Certificate File Extensions in a MAF Application
-
28
Testing and Debugging MAF Applications
- Introduction to Testing and Debugging MAF Applications
- Testing MAF Applications
- Configuring JDeveloper and MAF Applications to Debug Code
- Debugging MAF Applications Deployed on the Android Platform
- Debugging MAF Applications Deployed on the iOS Platform
- Debugging MAF Applications Deployed on the Universal Windows Platform
- Using and Configuring Logging in MAF Applications
- Measuring MAF Application Performance
- Viewing MAF Application Performance Data
- Inspecting Web Service Calls in a MAF Application
- 29 Reusing MAF Application Content with a Feature Archive File
-
30
Reusing MAF Application Content with a MAF Shared Library
- Introduction to Reusing MAF Application Content with a MAF Shared Library
- Creating a MAF Application for Shared Library
- Adding Artifacts to a MAF Application for Shared Library
- Deploying a MAF Application for Shared Library
- Consuming a Shared Library in a MAF Application
- Deploying a MAF Application with Duplicate Shared Library Archive File Names
- Using Cordova Plugins in Shared Libraries
-
31
Integrating MAF Applications with EMM Solutions
- Introduction to the AppConfig Community
- About the MAF Approach to Enterprise Mobile Applications
- Access Control for MAF Applications with EMM Solutions
- How to Manage MAF Application Configurations with EMM Solutions
- Managing MAF Applications with the AirWatch EMM Solution
- Configuring Properties in MAF Applications for Use by EMM Solutions
- A Troubleshooting MAF Applications
-
B
Local HTML and Application Container APIs
- Using MAF APIs to Create a Custom HTML Springboard Application Feature
-
The MAF Container Utilities API
- Using the JavaScript Callbacks
- Using the Container Utilities API
- getApplicationInformation
- gotoDefaultFeature
- gotoFeature
- getFeatures
- getFeatureByName
- getFeatureById
- resetFeature
- resetApplication
- gotoSpringboard
- showSpringboard
- hideSpringboard
- showNavigationBar
- hideNavigationBar
- showPreferences
- invokeMethod
- invokeContainerMethod
- invokeContainerJavaScriptFunction
- sendEmail
- sendSMS
- Application Icon Badging
- Accessing Files Using the getDirectoryPathRoot Method
- C MAF Application and Project Files
- D Converting Preferences for Deployment