Go to main content
1/38
Contents
Title and Copyright Information
Preface
Audience
Documentation Accessibility
Related Documents
Conventions
What's New in This Guide for MAF Release 2.3.1
New and Changed Features for MAF Release 2.3.1
Other Significant Changes in this Document for MAF Release 2.3.1
1
Introduction to Oracle Mobile Application Framework
1.1
Introduction to Mobile Application Framework
1.2
About the MAF Runtime Architecture
1.3
About Developing Applications with MAF
1.3.1
About Connected and Disconnected Applications
1.4
MAF Sample Applications
2
Getting Started with MAF Application Development
2.1
Introduction to Declarative Development for MAF Applications
2.2
Creating a MAF Application
2.2.1
How to Create a MAF Application
2.2.2
What Happens When You Create a MAF Application
2.3
Defining Application Features for a MAF Application
2.3.1
How to Define an Application Feature
2.4
Adding Content to an Application Feature
2.5
Adding Application Features to a MAF Application
2.5.1
How to Add an Application Feature to a MAF Application
2.5.2
What You May Need to Know About Feature Reference IDs and Feature IDs
2.6
Creating MAF AMX Pages and MAF Task Flows
2.6.1
How to Create a MAF AMX Page
2.6.2
How to Create MAF Task Flows
2.6.3
What Happens When You Create MAF AMX Pages and Task Flows
2.7
Containerizing a MAF Application for Enterprise Distribution
3
Configuring the Content of a MAF Application
3.1
Introduction to Configuring MAF Application Display Information
3.2
Setting Display Properties for a MAF Application
3.3
Changing the Launch Screen for Your MAF Application on iOS
3.4
Setting Display Properties for an Application Feature
4
Configuring the Application Navigation
4.1
Introduction to the Display Behavior of MAF Applications
4.2
Configuring Application Navigation
4.2.1
How to Set the Display Behavior for the Navigation Bar
4.2.2
How to Set the Display Behavior for the Springboard
4.2.3
How to Set the Slideout Behavior for the Springboard
4.2.4
How to Set the Display Order for Application Features
4.3
What Happens When You Configure the Navigation Options
4.4
What Happens When You Set the Animation for the Springboard
4.5
What You May Need to Know About Custom Springboard Application Features with HTML Content
4.6
What You May Need to Know About Custom Springboard Application Features with MAF AMX Content
4.7
What You May Need to Know About the Runtime Springboard Behavior
4.8
Navigating a MAF Application Using Android’s Back Button
4.8.1
How to Configure Behavior of the Android System Back Button
4.9
Creating a Sliding Window in a MAF Application
4.10
Using Custom URL Schemes in MAF Applications
5
Defining the Content Type of MAF Application Features
5.1
Introduction to Content Types for an Application Feature
5.2
Defining the Application Feature Content as Remote URL or Local HTML
5.3
Defining the Application Feature Content as a MAF AMX Page or Task Flow
5.4
What You May Need to Know About Selecting External Resources
6
Creating the Client Data Model in a MAF Application
6.1
Introduction to the Client Data Model in a MAF Application
6.2
Overview of Creating a Client Data Model in a MAF Application
6.3
Connecting to a REST Service to Create the Client Data Model
6.3.1
How to Connect to the REST Service to Retrieve Data Objects
6.3.2
What You May Need to Know About the MCS Anonymous Access Key
6.4
Discovering Candidate Data Objects for the Client Data Model
6.4.1
How to Discover Data Objects Using a REST Resource URL
6.4.2
How to Discover Data Objects Using a Sample Payload
6.4.3
How to Discover Data Objects Using a RAML File
6.4.4
What You May Need to Know About the Flatten Nested Data Objects Option
6.5
Selecting and Persisting Data Objects for the Client Data Model
6.5.1
How to Select and Persist Data Objects
6.5.2
How to Create New Data Objects
6.5.3
How to Modify Data Object Attributes
6.6
Specifying Parent-Child Relationships for Data Objects
6.6.1
How to Specify a Parent-Child Relationship for Data Objects
6.7
Defining CRUD REST Resources
6.8
Specifying CRUD REST Resource Details
6.8.1
How to Specify GET (Read) Resource Details
6.8.2
How to Specify Non-GET (Write) Resource Details
6.8.3
How to Add Custom Resources
6.8.4
How to Specify Query and Path Parameters
6.8.5
How to Add HTTP Header Parameters
6.9
Setting Runtime Options for the Client Data Model
6.10
Generating the Client Data Model
6.11
Editing the Client Data Model in a MAF Application
6.12
Defining a Custom Resource
6.13
Getting Programmatic Access to Service Objects
6.14
Creating a User Interface from a MAF Client Data Model
6.14.1
How to Create Data Controls from the Client Data Model
6.14.2
What Happens When You Create a Data Control from the Client Data Model
6.14.3
How to Use the MAF User Interface Generator
6.14.4
What Happens When You Generate a User Interface
6.15
Synchronizing Offline Transactions from a MAF Application
6.15.1
How to View Pending Synchronization Actions
6.15.2
How to Add Custom Logic to Handle Failed Synchronization Actions
6.15.3
What You May Need to Know About Disabling Automatic Synchronization
7
Localizing MAF Applications
7.1
Introduction to MAF Application Localization
7.2
Setting Resource Bundle Options for a MAF Application
7.2.1
How to Set the Resource Bundle Options for a MAF Application
7.3
Defining Text Resources in a Base Resource Bundle
7.3.1
How to Define a Text Resource in a Base Resource Bundle
7.3.2
What Happens When You Define a Text Resource in a Base Resource Bundle
7.4
Creating Locale-Specific Resource Bundles
7.4.1
How to Create a Locale-Specific Resource Bundle
7.5
Editing Resources in Resource Bundles
7.6
Localizing Image Files in a MAF Application
7.7
MAF Support of Languages
7.8
Localizable MAF Properties
8
Skinning MAF Applications
8.1
Introduction to MAF Application Skins
8.1.1
About the maf-config.xml File
8.1.2
About the maf-skins.xml File
8.2
Adding a Custom Skin to an Application
8.3
Specifying a Skin for an Application to Use
8.4
Registering a Custom Skin
8.5
Versioning MAF Skins
8.6
What Happens When You Version Skins
8.7
Overriding the Default Skin Styles
8.8
What You May Need to Know About Skinning
8.9
Adding a New Style Sheet to a Skin
8.10
Enabling End Users Change an Application's Skin at Runtime
8.11
What Happens at Runtime: How End Users Change an Application's Skin
9
Reusing MAF Application Content
9.1
Introduction to Feature Archive Files
9.2
Using FAR Content in a MAF Application
9.3
What Happens When You Add a FAR as a Library
9.4
What Happens When You Add a FAR as a View Controller Project
9.5
What You May Need to Know About Enabling the Reuse of Feature Archive Resources
10
Using Plugins in MAF Applications
10.1
Introduction to Using Plugins in MAF Applications
10.2
Enabling a Core Plugin in Your MAF Application
10.2.1
How to Enable a Core Plugin in Your MAF Application
10.2.2
What Happens When You Enable a Core Plugin in Your MAF Application
10.3
Registering Additional Plugins in Your MAF Application
10.3.1
How to Register an Additional Plugin
10.3.2
What Happens When You Register an Additional Plugin for Your MAF Application
10.4
Deploying Plugins with Your MAF Application
10.5
Importing Plugins from a Feature Archive File
10.6
Using a Plugin in a MAF Application
11
Customizing MAF Application Artifacts with MDS
11.1
Introduction to Applying MDS Customizations to MAF Files
11.2
Customizing MAF Applications with MDS
11.3
Configuring Customization Layers
11.3.1
How to Configure the Layer Values Globally
11.3.2
How to Configure the Application-Level Layer Values
11.3.2.1
Using the Studio Developer Role
11.3.2.2
Using the Customization Developer Role
11.4
Creating Customization Classes
11.5
Consuming Customization Classes
11.6
Understanding a Customization Developer Role
11.6.1
How to Switch to the Customization Developer Role in JDeveloper
11.6.2
What You May Need to Know About the Tip Layer
11.7
Enabling Customizations in Resource Bundles
11.7.1
How to Create an Application Resource Bundle
11.7.2
How to Create a Project Resource Bundle
11.8
Upgrading a MAF Application with Customizations
11.8.1
What Happens in JDeveloper When You Upgrade Applications
11.8.2
What You May Need to Know About Upgrading FARs
12
Using Lifecycle Listeners in MAF Applications
12.1
Introduction to Lifecycle Listeners in MAF Applications
12.2
Registering a Lifecycle Listener for a MAF Application or an Application Feature
12.3
What Happens When You Register a Lifecycle Listener
13
Creating MAF AMX Pages
13.1
Introduction to the MAF AMX Application Feature
13.2
Creating Task Flows
13.2.1
How to Create a Task Flow
13.2.1.1
What You May Need to Know About Behavior of New Bounded Task Flows
13.2.2
What You May Need to Know About Task Flow Activities and Control Flows
13.2.3
What You May Need to Know About the ViewController-task-flow.xml File
13.2.4
What You May Need to Know About the MAF Task Flow Diagrammer
13.2.5
How to Add and Use Task Flow Activities
13.2.5.1
Adding View Activities
13.2.5.2
Adding Router Activities
13.2.5.3
Adding Method Call Activities
13.2.5.4
Adding Task Flow Call Activities
13.2.5.4.1
Calling a Bounded Task Flow Using a Task Flow Call Activity
13.2.5.4.2
Specifying Input Parameters on a Task Flow Call Activity
13.2.5.4.3
Specifying the Data Control Context
13.2.5.5
Adding Task Flow Return Activities
13.2.5.6
Using Task Flow Activities with Page Definition Files
13.2.6
How to Define the Data Control Context Depth for Task Flows
13.2.7
How to Define Control Flows
13.2.7.1
Defining a Control Flow Case
13.2.7.2
Adding a Wildcard Control Flow Rule
13.2.7.3
What You May Need to Know About Control Flow Rule Metadata
13.2.7.4
What You May Need to Know About Control Flow Rule Evaluation
13.2.8
What You May Need to Know About MAF Support for Back Navigation
13.2.9
How to Enable Page Navigation by Dragging
13.2.10
How to Specify Action Outcomes Using UI Components
13.2.11
How to Create and Reference Managed Beans
13.2.12
How to Specify the Page Transition Style
13.2.13
What You May Need to Know About Bounded and Unbounded Task Flows
13.2.13.1
Unbounded Task Flows
13.2.13.2
Bounded Task Flows
13.2.13.3
Using Parameters in Task Flows
13.2.13.3.1
Passing Parameters to a Bounded Task Flow
13.2.13.3.2
Configuring a Return Value from a Bounded Task Flow
13.3
Creating Views
13.3.1
How to Work with MAF AMX Pages
13.3.1.1
Interpreting the MAF AMX Page Structure
13.3.1.2
Creating MAF AMX Pages
13.3.1.3
What Happens When You Create a MAF AMX Page
13.3.1.4
Using UI Editors
13.3.1.5
Accessing the Page Definition File
13.3.1.6
Sharing the Page Contents
13.3.1.6.1
Configuring the Fragment Content
13.3.1.6.2
Passing List of Attributes with Metadata to a Fragment
13.3.2
How to Add UI Components to a MAF AMX Page
13.3.2.1
Using the Preview
13.3.2.2
Configuring UI Components
13.3.2.3
What You May Need to Know About Element Identifiers and Their Audit
13.3.3
How to Add Data Controls to a MAF AMX Page
13.3.3.1
Dragging and Dropping Attributes
13.3.3.1.1
Date
13.3.3.1.2
Single Selection
13.3.3.1.3
Text
13.3.3.2
Dragging and Dropping Operations
13.3.3.2.1
Operation
13.3.3.2.2
Method
13.3.3.3
Dragging and Dropping Collections
13.3.3.3.1
Multiple Selection
13.3.3.3.2
Form
13.3.3.3.3
Iterator
13.3.3.3.4
List View
13.3.3.4
What You May Need to Know About Generated Bindings
13.3.3.5
What You May Need to Know About Generated Drag and Drop Artifacts
13.3.3.6
Using the MAF AMX Editor Bindings Tab
13.3.3.7
What You May Need to Know About Removal of Unused Bindings
13.3.4
What You May Need to Know About the Server Communication
14
Creating the MAF AMX User Interface
14.1
Introduction to Creating the User Interface for MAF AMX Pages
14.2
Designing the Page Layout
14.2.1
How to Use a View Component
14.2.2
How to Use a Panel Page Component
14.2.3
How to Use a Panel Group Layout Component
14.2.3.1
Customizing the Scrolling Behavior
14.2.4
How to Use a Panel Form Layout Component
14.2.5
How to Use a Panel Stretch Layout Component
14.2.6
How to Use a Panel Label And Message Component
14.2.7
How to Use a Facet Component
14.2.8
How to Use a Popup Component
14.2.9
How to Use a Panel Splitter Component
14.2.10
How to Use a Spacer Component
14.2.11
How to Use a Table Layout Component
14.2.12
How to Use a Masonry Layout Component
14.2.13
How to Use an Accessory Layout Component
14.2.14
How to Use a Deck Component
14.2.15
How to Use a Flex Layout Component
14.2.16
How to Use the Fragment Component
14.3
Creating and Using UI Components
14.3.1
How to Use the Input Text Component
14.3.1.1
Customizing the Input Text Component
14.3.2
How to Use the Input Number Slider Component
14.3.3
How to Use the Input Date Component
14.3.4
How to Use the Output Text Component
14.3.5
How to Use Buttons
14.3.5.1
Displaying Default Style Buttons
14.3.5.2
Displaying Back Style Buttons
14.3.5.3
Displaying Highlight Style Buttons
14.3.5.4
Displaying Alert Style Buttons
14.3.5.5
Using Additional Button Styles
14.3.5.6
Using Buttons Within the Application
14.3.5.6.1
Navigation Bar
14.3.5.6.2
Content Area
14.3.5.6.3
Action Sheets
14.3.5.6.4
Alert Messages
14.3.5.7
Enabling the Back Button Navigation
14.3.5.8
What You May Need to Know About the Order of Processing Operations and Attributes
14.3.6
How to Use Links
14.3.7
How to Display Images
14.3.8
How to Use the Checkbox Component
14.3.8.1
Support for Checkbox Components on the iOS Platform
14.3.8.2
Support for Checkbox Components on the Android Platform
14.3.9
How to Use the Select Many Checkbox Component
14.3.9.1
What You May Need to Know About the User Interaction with Select Many Checkbox Component
14.3.10
How to Use the Choice Component
14.3.10.1
What You May Need to Know About the User Interaction with Choice Component on iOS Platform
14.3.10.2
What You May Need to Know About the User Interaction with Choice Component on the Android Platform
14.3.10.3
What You May Need to Know About Differences Between Select Items and Select Item Components
14.3.11
How to Use the Select Many Choice Component
14.3.12
How to Use the Boolean Switch Component
14.3.12.1
What You May Need to Know About Support for Boolean Switch Components on iOS Platform
14.3.12.2
What You May Need to Know About Support for Boolean Switch Components on the Android Platform
14.3.13
How to Use the Select Button Component
14.3.14
How to Use the Radio Button Component
14.3.15
How to Use List View and List Item Components
14.3.15.1
Configuring Paging and Dynamic Scrolling
14.3.15.1.1
List View Scrolling Strategies
14.3.15.1.2
List View's Own Scrolling
14.3.15.1.3
Server-Side Paging
14.3.15.2
What You May Need to Know About Memory Consumption by MAF AMX UI Components
14.3.15.3
Rearranging List View Items
14.3.15.4
Configuring the List View Layout
14.3.15.5
What You May Need to Know About Using Static List View
14.3.16
How to Use a Carousel Component
14.3.17
How to Use the Film Strip Component
14.3.17.1
What You May Need to Know About the Film Strip Layout
14.3.17.2
What You May Need to Know About the Film Strip Navigation
14.3.18
How to Use Verbatim Component
14.3.18.1
What You May Need to Know About Using JavaScript and AJAX with Verbatim Component
14.3.19
How to Use an Output HTML Component
14.3.20
How to Enable Iteration
14.3.21
How to Refresh Contents of UI Components
14.3.22
How to Load a Resource Bundle
14.3.23
How to Use the Action Listener
14.3.23.1
What You May Need to Know About Differences Between the Action Listener Component and Attribute
14.3.24
How to Use the Set Property Listener
14.3.25
How to Use the Client Listener
14.3.26
How to Convert Date and Time Values
14.3.26.1
What You May Need to Know About Date and Time Patterns
14.3.27
How to Convert Numeric Values
14.3.28
How to Enable Drag Navigation
14.3.28.1
What You May Need to Know About the disabled Attribute
14.3.29
How to Use the Loading Indicator
14.4
Enabling Gestures
14.5
Providing Data Visualization
14.5.1
How to Create an Area Chart
14.5.2
How to Create a Bar Chart
14.5.3
How to Create a Range Chart
14.5.4
How to Create a Bubble Chart
14.5.5
How to Create a Combo Chart
14.5.6
How to Create a Line Chart
14.5.7
How to Create a Pie Chart
14.5.7.1
Configuring the Pie Chart as a Ring Chart
14.5.7.2
Styling the Pie Chart
14.5.8
How to Create a Scatter Chart
14.5.9
How to Create a Spark Chart
14.5.10
How to Create a Funnel Chart
14.5.11
How to Create a Stock Chart
14.5.12
How to Style Chart Components
14.5.13
How to Use Events with Chart Components
14.5.14
What You May Need to Know About Customization of Chart Tooltips
14.5.15
How to Enable Sorting of Charts with Categorical Axis
14.5.16
How to Define the Initial Zooming of Charts
14.5.17
How to Define Stacking of Specific Chart Series
14.5.18
How to Enable Split Dual-Y Axis in Charts
14.5.19
How to Create a LED Gauge
14.5.20
How to Create a Status Meter Gauge
14.5.21
How to Create a Dial Gauge
14.5.22
How to Create a Rating Gauge
14.5.22.1
Overwriting the shortDesc Attribute
14.5.22.2
Applying Custom Styling to the Rating Gauge Component
14.5.23
How to Define Child Elements for Chart and Gauge Components
14.5.23.1
Defining Chart Data Item
14.5.23.2
Defining and Configuring Legend
14.5.23.3
Defining and Configuring X Axis, YAxis, and Y2Axis
14.5.23.4
Defining Pie Data Item
14.5.23.5
Defining Spark Data Item
14.5.23.6
Defining Funnel Data Item
14.5.23.7
Defining Stock Data Item
14.5.23.8
Defining Threshold
14.5.24
How to Create a Geographic Map Component
14.5.24.1
Configuring Geographic Map Components With the Map Provider Information
14.5.24.2
Displaying Route in Geographic Map Components
14.5.25
How to Create a Thematic Map Component
14.5.25.1
Defining Custom Markers
14.5.25.2
Defining Isolated Area Layers
14.5.25.3
Defining Isolated Areas
14.5.25.4
Enabling Initial Zooming
14.5.25.5
Defining a Custom Base Map
14.5.25.6
What You May Need to Know About the Marker Support for Event Listeners
14.5.25.7
Applying Custom Styling to the Thematic Map Component
14.5.26
How to Use Events with Map Components
14.5.27
How to Create a Treemap Component
14.5.27.1
Applying Custom Styling to the Treemap Component
14.5.28
How to Create a Sunburst Component
14.5.28.1
Applying Custom Styling to the Sunburst Component
14.5.29
How to Create a Timeline Component
14.5.29.1
Applying Custom Styling to the Timeline Component
14.5.30
How to Create an NBox Component
14.5.31
How to Define Child Elements for Map Components, Sunburst, Treemap, Timeline, and NBox
14.5.32
How to Create Databound Data Visualization Components
14.5.32.1
What You May Need to Know About Setting Series Style for Databound Chart Components
14.5.33
How to Create Data Visualization Components Based on Static Data
14.5.34
How to Enable Interactivity in Chart Components
14.5.35
How to Create Polar Charts
14.6
Styling UI Components
14.6.1
How to Use Component Attributes to Define Style
14.6.2
What You May Need to Know About Skinning
14.6.3
What You May Need to Know About Using CSS ID Selectors for Skinning
14.6.4
How to Style Data Visualization Components
14.7
Localizing UI Components
14.8
Understanding MAF Support for Accessibility
14.8.1
How to Configure UI and Data Visualization Components for Accessibility
14.8.1.1
Configuring the Accessibility Audit Rules
14.8.2
What You May Need to Know About the Basic WAI-ARIA Terms
14.8.3
What You May Need to Know About the Oracle Global HTML Accessibility Guidelines
14.9
Validating Input
14.10
Using Event Listeners
14.10.1
What You May Need to Know About Constrained Type Attributes for Event Listeners
15
Using Bindings and Creating Data Controls in MAF AMX
15.1
Introduction to Bindings and Data Controls
15.2
About Object Scope Lifecycles
15.2.1
What You May Need to Know About Object Scopes and Task Flows
15.3
Creating EL Expressions
15.3.1
About Data Binding EL Expressions
15.3.2
How to Create an EL Expression
15.3.2.1
About the Method Expression Builder
15.3.2.2
About Non EL-Properties
15.3.3
What You May Need to Know About MAF Binding Properties
15.3.4
How to Enable Retention of Data Provider State Across Iterators
15.3.5
How to Reference Binding Containers
15.3.6
About the Categories in the Expression Builder
15.3.6.1
About the Bindings Category
15.3.6.2
About the Managed Beans Category
15.3.6.3
About the Mobile Application Framework Objects Category
15.3.7
About EL Events
15.3.8
How to Use EL Expressions Within Managed Beans
15.4
Creating and Using Managed Beans
15.4.1
How to Create a Managed Bean in JDeveloper
15.4.2
What Happens When You Use JDeveloper to Create a Managed Bean
15.5
Exposing Business Services with Data Controls
15.5.1
How to Create Data Controls
15.5.2
What Happens in Your Project When You Create a Data Control
15.5.2.1
DataControls.dcx Overview Editor
15.5.2.2
Data Controls Panel
15.5.3
Data Control Built-in Operations
15.5.3.1
addXXX and removeXXX Methods of Data Control
15.6
Creating Databound UI Components from the Data Controls Panel
15.6.1
How to Use the Data Controls Panel
15.6.2
What Happens When You Use the Data Controls Panel
15.7
What Happens at Runtime: How the Binding Context Works
15.8
Configuring Data Controls
15.8.1
How to Edit a Data Control
15.8.2
What Happens When You Edit a Data Control
15.8.3
What You May Need to Know About MDS Customization of Data Controls
15.9
Working with Attributes
15.9.1
How to Designate an Attribute as Primary Key
15.9.2
How to Define a Static Default Value for an Attribute
15.9.3
How to Set UI Hints on Attributes
15.9.4
What Happens When You Set UI Hints on Attributes
15.9.5
How to Access UI Hints Using EL Expressions
15.10
Creating and Using Bean Data Controls
15.10.1
What You May Need to Know About Serialization of Bean Class Variables
15.11
Using the DeviceFeatures Data Control
15.11.1
How to Use the getPicture Method to Enable Taking Pictures
15.11.2
How to Use the SendSMS Method to Enable Text Messaging
15.11.3
How to Use the sendEmail Method to Enable Email
15.11.4
How to Use the createContact Method to Enable Creating Contacts
15.11.5
How to Use the findContacts Method to Enable Finding Contacts
15.11.6
How to Use the updateContact Method to Enable Updating Contacts
15.11.7
How to Use the removeContact Method to Enable Removing Contacts
15.11.8
How to Use the startLocationMonitor Method to Enable Geolocation
15.11.9
How to Use the displayFile Method to Enable Displaying Files
15.11.10
How to Use the addLocalNotification and cancelLocalNotification Methods to Manage Local Notifications
15.11.11
What You May Need to Know About Device Properties
15.12
Validating Attributes
15.12.1
How to Add Validation Rules
15.12.2
What You May Need to Know About the Validator Metadata
15.13
Using Background Threads
15.14
Working with Data Change Events
16
Configuring End Points Used in MAF Applications
16.1
Introduction to Configuring End Points in MAF Applications
16.2
Defining the Configuration Service End Point
16.3
Creating the User Interface for the Configuration Service
16.4
About the URL Construction
16.5
Setting Up the Configuration Service on the Server
16.6
Configuring Properties For Use By Enterprise Mobile Management
17
Using Web Services in a MAF Application
17.1
Introduction to Using Web Services in a MAF Application
17.2
Creating a Rest Service Adapter to Access Web Services
17.2.1
Accessing Input and Output Streams
17.2.2
Support for Non-Text Responses
17.3
Accessing Secure Web Services
17.3.1
How to Enable Access to Web Services
17.3.2
What Happens When You Enable Access to Web Services
17.3.3
What You May Need to Know About Accessing Web Services and Containerized MAF Applications
17.3.4
What You May Need to Know About Credential Injection
17.3.5
What You May Need to Know About Cookie Injection
17.4
Configuring the Browser Proxy Information
18
Using the Local Database in MAF AMX
18.1
Introduction to the Local SQLite Database Usage
18.1.1
Differences Between SQLite and Other Relational Databases
18.1.1.1
Concurrency
18.1.1.2
SQL Support and Interpretation
18.1.1.3
Data Types
18.1.1.4
Foreign Keys
18.1.1.5
Database Transactions
18.1.1.6
Authentication
18.2
Using the Local SQLite Database
18.2.1
How to Connect to the Database
18.2.2
How to Use SQL Script to Initialize the Database
18.2.3
How to Initialize the Database on a Desktop
18.2.4
What You May Need to Know About Commit Handling
18.2.5
Limitations of MAF SQLite JDBC Driver
18.2.6
How to Use the VACUUM Command
18.2.7
How to Encrypt and Decrypt the Database
18.2.7.1
Encrypting the Database with Your Own Password
18.2.7.2
Permanently Decrypting the Database Encrypted with Your Own Password
18.2.7.3
Encrypting the Database with a Password Generated by MAF
18.2.7.4
Decrypting the Database Encrypted with a Password Generated by MAF
19
Customizing MAF AMX Application Feature Artifacts
19.1
Introduction to Customizing MAF AMX Pages and Artifacts
19.2
Customizing MAF AMX Pages and Artifacts
20
Creating Custom MAF AMX UI Components
20.1
Introduction to Creating Custom UI Components
20.2
Using MAF APIs to Create Custom Components
20.2.1
How to Use Static APIs
20.2.2
How to Use AmxEvent Classes
20.2.3
How to Use the TypeHandler
20.2.4
How to Use the AmxNode
20.2.5
How to Use the AmxTag
20.2.6
How to Use the VisitContext
20.2.7
How to Use the AmxAttributeChange
20.2.8
How to Use the AmxDescendentChanges
20.2.9
How to Use the AmxCollectionChange
20.2.10
How to Use the AmxNodeChangeResult
20.2.11
How to Use the AmxNodeStates
20.2.12
How to Use the AmxNodeUpdateArguments
20.3
Creating Custom Components
21
Implementing Application Feature Content Using Remote URLs
21.1
Introduction to Remote URL Applications
21.2
Enabling Remote Applications Access Container Services
21.3
Whitelisting Remote URLs in Your MAF Application
21.3.1
How to Whitelist Remote URLs on the Android Platform
21.3.2
How to Whitelist Remote URLs on the iOS Platform
21.3.3
How to Whitelist Remote URLs on Universal Windows Platform
21.4
Enabling the Browser Navigation Bar on Remote URL Pages
21.4.1
How to Add the Navigation Bar to a Remote URL Application Feature
21.4.2
What Happens When You Enable the Browser Navigation Buttons for a Remote URL Application Feature
22
Enabling User Preferences
22.1
Creating User Preference Pages for a Mobile Application
22.1.1
How to Create Mobile Application-Level Preferences Pages
22.1.1.1
How to Create a New User Preference Page
22.1.1.2
What Happens When You Add a Preference Page
22.1.1.3
How to Create User Preference Lists
22.1.1.4
What Happens When You Create a Preference List
22.1.1.5
How to Create a Boolean Preference List
22.1.1.6
What Happens When You Add a Boolean Preference
22.1.1.7
How to Add a Text Preference
22.1.1.8
What Happens When You Define a Text Preference
22.1.2
What Happens When You Create an Application-Level Preference Page
22.2
Creating User Preference Pages for Application Features
22.3
Using EL Expressions to Retrieve Stored Values for User Preference Pages
22.3.1
What You May Need to Know About preferenceScope
22.3.2
Reading Preference Values in iOS Native Views
22.4
Platform-Dependent Display Differences
23
Setting Constraints on Application Features
23.1
Introduction to Constraints
23.1.1
Using Constraints to Show or Hide an Application Feature
23.1.2
Using Constraints to Deliver Specific Content Types
23.2
Defining Constraints for Application Features
23.2.1
How to Define the Constraints for an Application Feature
23.2.2
What Happens When You Define a Constraint
23.2.3
About the property Attribute
23.2.4
About User Constraints and Access Control
23.2.5
About Hardware-Related Constraints
23.2.6
Creating Dynamic Constraints on Application Features and Content
23.2.6.1
About Combining Static and EL-Defined Constraints
23.2.6.2
How to Define a Dynamic Constraint
24
Enabling and Using Notifications
24.1
Introduction to Notifications
24.2
Enabling Push Notifications
24.2.1
What You May Need to Know About the Push Notification Payload
24.3
Managing Local Notifications
24.3.1
How to Manage Local Notifications Using Java
24.3.2
How to Manage Local Notifications Using JavaScript
24.3.3
How to Manage Local Notifications Using the DeviceFeatures Data Control
24.3.4
How to Handle Local Notifications
24.3.5
What You May Need to Know About Local Notification Options and the Application Behavior
25
Caching Data in a MAF Application
25.1
Introduction to Data Caching in MAF Applications
25.2
Enable Data Caching in a MAF Application
25.3
Specifying Cached Resources and Cache Policies in the sync-config.xml File
25.4
Caching Policies Provided by MAF
25.5
Using Configuration Service End Points in the sync-config.xml File
25.6
Encrypting Cached Data in a MAF Application
25.7
Packaging the sync-config.xml File in a FAR
26
Displaying Error Messages in MAF Applications
26.1
Introduction to Error Handling in MAF Applications
26.2
Displaying Error Messages and Stopping Background Threads
26.2.1
How Applications Display Error Message for Background Thread Exceptions
26.3
Localizing Error Messages
27
Deploying MAF Applications
27.1
Introduction to Deployment of MAF Applications
27.2
Working with Deployment Profiles
27.2.1
About Automatically Generated Deployment Profiles
27.2.2
How to Create a Deployment Profile
27.2.3
What Happens When You Create a Deployment Profile
27.3
Deploying an Android Application
27.3.1
How to Create an Android Deployment Profile
27.3.1.1
Setting Preferences from the Command Line Using Startup Parameters
27.3.1.2
Setting the Options for the Application Details
27.3.1.3
Setting Deployment Options
27.3.1.4
Defining the Android Signing Options
27.3.1.5
What You May Need to Know About Credential Storage
27.3.1.6
How to Add a Custom Image to an Android Application
27.3.1.7
What Happens When JDeveloper Deploys Images for Android Applications
27.3.2
How to Deploy an Android Application to an Android Emulator
27.3.3
How to Deploy an Application to an Android-Powered Device
27.3.4
How to Publish an Android Application
27.3.5
What Happens in JDeveloper When You Create an .apk File
27.3.6
Selecting the Most Recently Used Deployment Profiles
27.3.7
What You May Need to Know About Using the Android Debug Bridge
27.4
Deploying an iOS Application
27.4.1
How to Create an iOS Deployment Profile
27.4.1.1
Defining the iOS Build Options
27.4.1.2
Setting the Device Signing Options
27.4.1.3
Adding a Custom Image to an iOS Application
27.4.1.4
What You May Need to Know About iTunes Artwork
27.4.1.5
How to Restrict the Display to a Specific Device Orientation
27.4.1.6
What Happens When You Deselect Device Orientations
27.4.2
How to Deploy an iOS Application to an iOS Simulator
27.4.3
How to Deploy an Application to an iOS-Powered Device
27.4.4
What Happens When You Deploy an Application to an iOS Device
27.4.5
What You May Need to Know About Deploying an Application to an iOS-Powered Device
27.4.5.1
Creating iOS Development Certificates
27.4.5.2
Registering an Apple Device for Testing and Debugging
27.4.5.3
Registering an Application ID
27.4.6
How to Distribute an iOS Application to the App Store
27.5
Deploying a MAF Application to the Universal Windows Platform
27.5.1
How to Deploy a MAF Application to the Universal Windows Platform
27.5.2
What Happens When You Deploy a MAF Application to the Universal Windows Platform
27.6
Overview of MAF Quick Deployment of Applications
27.6.1
About the Artifacts That Support Quick Deployment
27.6.2
About Requirements for Quick Deployment
27.6.3
What Happens During a Quick Deployment Session
27.6.4
How to Start the Full Deployment of an Application
27.6.5
How to Force the Full Deployment of an Application
27.6.6
What You May Need to Know About Quick Deployment Limitations
27.7
Deploying Feature Archive Files (FARs)
27.7.1
How to Create a Deployment Profile for a Feature Archive
27.7.2
How to Deploy the Feature Archive Deployment Profile
27.7.3
What Happens When You Deploy a Feature Archive File Deployment Profile
27.8
Creating a Mobile Application Archive File
27.8.1
How to Create a Mobile Application Archive File
27.9
Creating a New Application from an Application Archive
27.9.1
How to Create a New Application from an Application Archive
27.9.2
What Happens When You Import a MAF Application Archive File
27.10
Deploying MAF Applications from the Command Line
27.10.1
Using OJDeploy to Deploy Mobile Applications
27.11
Deploying with Oracle Mobile Security Suite
27.11.1
What Happens When You Containerize Your Application with OMSS
28
Understanding Secure Mobile Development Practices
28.1
Weak Server-Side Controls
28.2
Insecure Data Storage on the Device
28.2.1
Encrypting the SQLite Database
28.2.2
Securing the Device's Local Data Stores
28.2.3
About Security and Application Logs
28.3
Insufficient Transport Layer Protection
28.4
Side-Channel Data Leakage
28.5
Poor Authorization and Authentication
28.6
Broken Cryptography
28.7
Client-Side Injection From Cross-Site Scripting
28.7.1
Protecting MAF Applications from Injection Attacks Using Device Access Permissions
28.7.2
About Injection Attack Risks from Custom HTML Components
28.7.3
About SQL Injections and XML Injections
28.8
Security Decisions From Untrusted Inputs
28.9
Improper Session Handling
28.10
Lack of Binary Protections Resulting in Sensitive Information Disclosure
29
Securing MAF Applications
29.1
Introduction to MAF Security
29.2
About the User Login Process
29.3
Overview of the Authentication Process for MAF Applications
29.4
Overview of the Authentication Process for Containerized MAF Applications
29.5
Configuring MAF Connections
29.5.1
How to Create a MAF Login Connection
29.5.2
How to Create a Multi-Tenant Aware MAF Login Connection
29.5.3
How to Configure Basic Authentication
29.5.4
How to Configure OAuth Authentication
29.5.5
How to Configure Web SSO Authentication
29.5.6
How to Configure a Placeholder Connection for MAF Application Login
29.5.7
How to Update Connection Attributes of a Named Connection at Runtime
29.5.8
How to Store Login Credentials
29.5.9
What Happens When You Create a Connection for a MAF Application
29.5.10
What Happens When You Create a Multi-Tenant Aware Connection
29.5.11
What You May Need to Know About the Login Connection Configuration
29.5.12
What You May Need to Know About Login Connections and Containerized MAF Applications
29.5.13
What You May Need to Know About Multiple Identities for Local and Hybrid Login Connections
29.5.14
What You May Need to Know About Migrating a MAF Application and Authentication Modes
29.5.15
What You May Need to Know About Custom Headers
29.5.16
What Happens at Runtime: When MAF Calls a REST Web Service
29.5.17
What You May Need to Know About Injecting Basic Authentication Headers
29.5.18
What You May Need to Know About Web Service Security
29.5.19
How to Configure Access Control
29.5.20
What You May Need to Know About the Access Control Service
29.5.21
How to Alter the Application Loading Sequence
29.5.22
How to Configure Login Credentials Programmatically Prior to Authentication
29.6
Configuring Security for MAF Applications
29.6.1
How to Enable Application Features to Require Authentication
29.6.2
How to Designate the Login Page
29.6.3
How to Create a Custom Login HTML Page
29.6.4
What You May Need to Know About Login Pages
29.6.4.1
The Default Login Page
29.6.4.2
The Custom Login Page
29.6.5
What You May Need to Know About Login Page Elements
29.6.6
What Happens in JDeveloper When You Configure Security for Application Features
29.7
Allowing Access to Device Capabilities
29.8
Enabling Users to Log Out from Application Features
29.9
Using MAF Authentication APIs
29.10
Creating Certificates to Access Servers That Use Self-Signed Certificates for SSL
29.11
Configuring a MAF Application to Enable Two-Way SSL for Authentication
30
Testing and Debugging MAF Applications
30.1
Introduction to Testing and Debugging MAF Applications
30.2
Testing MAF Applications
30.2.1
How to Perform Accessibility Testing on iOS-Powered Devices
30.3
Configuring JDeveloper and MAF Applications to Debug Code
30.3.1
What You May Need to Know About the Debugging Configuration
30.3.1.1
Creating and Configuring a Run Configuration
30.3.2
How to Enable Debugging of Java Code and JavaScript
30.3.3
How to Debug the MAF AMX Content
30.4
Debugging MAF Applications Deployed on the Android Platform
30.4.1
How to Debug Java Code on the Android Platform
30.4.2
How to Debug UI Code on the Android Platform
30.5
Debugging MAF Applications Deployed on the iOS Platform
30.5.1
How to Debug Java Code on the iOS Platform
30.5.2
How to Debug UI Code on the iOS Platform
30.6
Debugging MAF Applications Deployed on the Universal Windows Platform
30.6.1
How to Debug Java Code on the Universal Windows Platform
30.6.1.1
How to Enable Remote Debugging of a MAF Application on the Universal Windows Platform
30.6.2
How to Debug UI Code on the Universal Windows Platform
30.7
Using and Configuring Logging in MAF Applications
30.7.1
How to Configure Logging Using the Properties File
30.7.2
How to Use JavaScript Logging
30.7.3
How to Use Embedded Logging
30.7.4
How to Use Xcode for Debugging and Logging on the iOS Platform
30.7.5
How to Access the Application Log
30.7.6
How to Disable Logging
30.8
Measuring MAF Application Performance
30.9
Sending Diagnostic Information to Oracle Mobile Cloud Service
30.10
Sending Analytics Information to Oracle Mobile Cloud Service
30.10.1
How to Configure the Transfer of Analytics to Oracle Mobile Cloud Service
30.10.2
How to Programmatically Send Analytics to Oracle Mobile Cloud Service
30.10.3
How to Send Context Events to Oracle Mobile Cloud Service
30.10.4
How to Send Analytics to Other Repositories
30.10.5
MAF Framework Events that Capture Analytics Information
30.11
Inspecting Web Service Calls in a MAF Application
A
Troubleshooting MAF Applications
A.1
Problems with Input Components on iOS Simulators
A.2
Code Signing Issues Prevent Deployment
A.3
The credentials Attribute Causes Deployment to Fail
B
Local HTML and Application Container APIs
B.1
Using MAF APIs to Create a Custom HTML Springboard Application Feature
B.1.1
About Executing Code in Custom HTML Pages
B.2
The MAF Container Utilities API
B.2.1
Using the JavaScript Callbacks
B.2.2
Using the Container Utilities API
B.2.3
getApplicationInformation
B.2.4
gotoDefaultFeature
B.2.5
gotoFeature
B.2.6
getFeatures
B.2.7
getFeatureByName
B.2.8
getFeatureById
B.2.9
resetFeature
B.2.10
resetApplication
B.2.11
gotoSpringboard
B.2.12
showSpringboard
B.2.13
hideSpringboard
B.2.14
showNavigationBar
B.2.15
hideNavigationBar
B.2.16
showPreferences
B.2.17
invokeMethod
B.2.18
invokeContainerMethod
B.2.19
invokeContainerJavaScriptFunction
B.2.20
sendEmail
B.2.21
sendSMS
B.2.22
Application Icon Badging
B.3
Accessing Files Using the getDirectoryPathRoot Method
B.3.1
Accessing Platform-Independent Download Locations
C
MAF Application and Project Files
C.1
Introduction to MAF Application and Project Files
C.2
About the Application Controller Project-Level Resources
C.3
About the View Controller Project Resources
C.4
About the MAF Application Configuration File
C.5
About the MAF Application Feature Configuration File
D
Converting Preferences for Deployment
D.1
Naming Patterns for Preferences
D.2
Converting Preferences for Android
D.2.1
maf_preferences.xml
D.2.1.1
Preferences Element Mapping
D.2.1.2
Preference Attribute Mapping
D.2.1.3
Attribute Default Values
D.2.1.4
Preferences Screen Root Element
D.2.2
maf_arrays.xml
D.2.3
maf_strings.xml
D.3
Converting Preferences for iOS
D.4
Converting Preferences for Windows
Scripting on this page enhances content navigation, but does not change the content in any way.