Go to main content
1/40
Contents
Title and Copyright Information
Preface
Audience
Documentation Accessibility
Related Documents
Conventions
What's New in This Guide for MAF Release 2.3.3
New and Changed Features for MAF Release 2.3.3
Other Significant Changes in this Document for MAF Release 2.3.3
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.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
Configuring the Web View of Application Features with AMX Content on iOS
5.5
Selecting External Resources for Use in Application Features
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.4.5
How to Discover Data Objects Using ADF BC REST Describe
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
Accessing the SQLite Database Using the MAF Client Data Model DBPersistenceManager
6.13
Defining a Custom Resource
6.14
Executing Custom Logic After CRUD REST Calls
6.15
Getting Programmatic Access to Service Objects
6.16
Understanding Usage of the Primary Key
6.17
Using Filtered Entity Lists
6.18
Creating a User Interface from a MAF Client Data Model
6.18.1
How to Create Data Controls from the Client Data Model
6.18.2
What Happens When You Create a Data Control from the Client Data Model
6.18.3
How to Use the MAF User Interface Generator
6.18.4
What Happens When You Generate a User Interface
6.19
Synchronizing Offline Transactions from a MAF Application
6.19.1
How to View Pending Synchronization Actions
6.19.2
How to Add Custom Logic to Handle Failed Synchronization Actions
6.19.3
What You May Need to Know About Disabling Automatic Synchronization
6.20
Understanding the Client Data Model’s Support for Data Change Events
6.21
Forcing Offline Mode in a MAF Application
6.22
Using a Visual Indicator for Running Background Tasks
7
Using Oracle Mobile Cloud Service Platform APIs in a MAF Application
7.1
Introduction to Using Oracle Mobile Cloud Service Platform APIs
7.2
Accessing Oracle Mobile Cloud Service User Information
7.3
Accessing Files in an Oracle Mobile Cloud Service Storage Collection
7.3.1
How to Create the StorageObjectService Bean Data Control
7.3.2
What Happens When You Create the StorageObject Bean Data Control
7.3.3
How to Retrieve All Files from an Oracle Mobile Cloud Service Storage Collection
7.3.4
How to Filter the List of Storage Objects from an MCS Storage Collection
7.3.5
How to Retrieve a Single File from an Oracle Mobile Cloud Service Storage Collection
7.3.6
How to Associate Storage Objects with Data in your MAF Application
7.4
Sending Analytics Information to Oracle Mobile Cloud Service
7.4.1
How to Configure the Transfer of Analytics to Oracle Mobile Cloud Service
7.4.2
How to Programmatically Send Analytics to Oracle Mobile Cloud Service
7.4.3
How to Send Context Events to Oracle Mobile Cloud Service
7.4.4
How to Send Analytics to Other Repositories
7.4.5
MAF Framework Events that Capture Analytics Information
7.5
Sending Diagnostic Information to Oracle Mobile Cloud Service
8
Localizing MAF Applications
8.1
Introduction to MAF Application Localization
8.2
Setting Resource Bundle Options for a MAF Application
8.2.1
How to Set the Resource Bundle Options for a MAF Application
8.3
Defining Text Resources in a Base Resource Bundle
8.3.1
How to Define a Text Resource in a Base Resource Bundle
8.3.2
What Happens When You Define a Text Resource in a Base Resource Bundle
8.4
Creating Locale-Specific Resource Bundles
8.4.1
How to Create a Locale-Specific Resource Bundle
8.5
Editing Resources in Resource Bundles
8.6
Localizing Image Files in a MAF Application
8.7
MAF Support of Languages
8.8
Localizable MAF Properties
9
Skinning MAF Applications
9.1
Introduction to MAF Application Skins
9.1.1
About the maf-config.xml File
9.1.2
About the maf-skins.xml File
9.2
Adding a Custom Skin to an Application
9.3
Specifying a Skin for an Application to Use
9.4
Registering a Custom Skin
9.5
Versioning MAF Skins
9.6
What Happens When You Version Skins
9.7
Overriding the Default Skin Styles
9.8
What You May Need to Know About Skinning
9.9
Adding a New Style Sheet to a Skin
9.10
Enabling End Users Change an Application's Skin at Runtime
9.11
What Happens at Runtime: How End Users Change an Application's Skin
10
Reusing MAF Application Content
10.1
Introduction to Feature Archive Files
10.2
Using FAR Content in a MAF Application
10.3
What Happens When You Add a FAR as a Library
10.4
What Happens When You Add a FAR as a View Controller Project
10.5
What You May Need to Know About Enabling the Reuse of Feature Archive Resources
11
Using Plugins in MAF Applications
11.1
Introduction to Using Plugins in MAF Applications
11.2
Enabling a Core Plugin in Your MAF Application
11.2.1
How to Enable a Core Plugin in Your MAF Application
11.2.2
What Happens When You Enable a Core Plugin in Your MAF Application
11.3
Registering Additional Plugins in Your MAF Application
11.3.1
How to Register an Additional Plugin
11.3.2
What Happens When You Register an Additional Plugin for Your MAF Application
11.4
Deploying Plugins with Your MAF Application
11.5
Importing Plugins from a Feature Archive File
11.6
Using a Plugin in a MAF Application
11.7
Providing Usage Descriptions for Plugins that Access Device Capabilities on iOS
12
Customizing MAF Application Artifacts with MDS
12.1
Introduction to Applying MDS Customizations to MAF Files
12.2
Customizing MAF Applications with MDS
12.3
Configuring Customization Layers
12.3.1
How to Configure the Layer Values Globally
12.3.2
How to Configure the Application-Level Layer Values
12.3.2.1
Using the Studio Developer Role
12.3.2.2
Using the Customization Developer Role
12.4
Creating Customization Classes
12.5
Consuming Customization Classes
12.6
Understanding a Customization Developer Role
12.6.1
How to Switch to the Customization Developer Role in JDeveloper
12.6.2
What You May Need to Know About the Tip Layer
12.7
Enabling Customizations in Resource Bundles
12.7.1
How to Create an Application Resource Bundle
12.7.2
How to Create a Project Resource Bundle
12.8
Upgrading a MAF Application with Customizations
12.8.1
What Happens in JDeveloper When You Upgrade Applications
12.8.2
What You May Need to Know About Upgrading FARs
13
Using Lifecycle Listeners in MAF Applications
13.1
Introduction to Lifecycle Listeners in MAF Applications
13.2
Registering a Lifecycle Listener for a MAF Application or an Application Feature
13.3
What Happens When You Register a Lifecycle Listener
14
Creating MAF AMX Pages
14.1
Introduction to the MAF AMX Application Feature
14.2
Creating Task Flows
14.2.1
How to Create a Task Flow
14.2.1.1
What You May Need to Know About Behavior of New Bounded Task Flows
14.2.2
What You May Need to Know About Task Flow Activities and Control Flows
14.2.3
What You May Need to Know About the ViewController-task-flow.xml File
14.2.4
What You May Need to Know About the MAF Task Flow Diagrammer
14.2.5
How to Add and Use Task Flow Activities
14.2.5.1
Adding View Activities
14.2.5.2
Adding Router Activities
14.2.5.3
Adding Method Call Activities
14.2.5.4
Adding Task Flow Call Activities
14.2.5.4.1
Calling a Bounded Task Flow Using a Task Flow Call Activity
14.2.5.4.2
Specifying Input Parameters on a Task Flow Call Activity
14.2.5.4.3
Specifying the Data Control Context
14.2.5.5
Adding Task Flow Return Activities
14.2.5.6
Using Task Flow Activities with Page Definition Files
14.2.6
How to Define the Data Control Context Depth for Task Flows
14.2.7
How to Define Control Flows
14.2.7.1
Defining a Control Flow Case
14.2.7.2
Adding a Wildcard Control Flow Rule
14.2.7.3
What You May Need to Know About Control Flow Rule Metadata
14.2.7.4
What You May Need to Know About Control Flow Rule Evaluation
14.2.8
What You May Need to Know About MAF Support for Back Navigation
14.2.9
How to Enable Page Navigation by Dragging
14.2.10
How to Specify Action Outcomes Using UI Components
14.2.11
How to Create and Reference Managed Beans
14.2.12
How to Specify the Page Transition Style
14.2.13
What You May Need to Know About Bounded and Unbounded Task Flows
14.2.13.1
Unbounded Task Flows
14.2.13.2
Bounded Task Flows
14.2.13.3
Using Parameters in Task Flows
14.2.13.3.1
Passing Parameters to a Bounded Task Flow
14.2.13.3.2
Configuring a Return Value from a Bounded Task Flow
14.3
Creating Views
14.3.1
How to Work with MAF AMX Pages
14.3.1.1
Interpreting the MAF AMX Page Structure
14.3.1.2
Creating MAF AMX Pages
14.3.1.3
What Happens When You Create a MAF AMX Page
14.3.1.4
Using UI Editors
14.3.1.5
Accessing the Page Definition File
14.3.1.6
Sharing the Page Contents
14.3.1.6.1
Configuring the Fragment Content
14.3.1.6.2
Passing List of Attributes with Metadata to a Fragment
14.3.2
How to Add UI Components to a MAF AMX Page
14.3.2.1
Using the Preview
14.3.2.2
Configuring UI Components
14.3.2.3
What You May Need to Know About Element Identifiers and Their Audit
14.3.3
How to Add Data Controls to a MAF AMX Page
14.3.3.1
Dragging and Dropping Attributes
14.3.3.1.1
Date
14.3.3.1.2
Single Selection
14.3.3.1.3
Text
14.3.3.2
Dragging and Dropping Operations
14.3.3.2.1
Operation
14.3.3.2.2
Method
14.3.3.3
Dragging and Dropping Collections
14.3.3.3.1
Multiple Selection
14.3.3.3.2
Form
14.3.3.3.3
Iterator
14.3.3.3.4
List View
14.3.3.4
What You May Need to Know About Generated Bindings
14.3.3.5
What You May Need to Know About Generated Drag and Drop Artifacts
14.3.3.6
Using the MAF AMX Editor Bindings Tab
14.3.3.7
What You May Need to Know About Removal of Unused Bindings
14.3.4
What You May Need to Know About the Server Communication
15
Creating the MAF AMX User Interface
15.1
Introduction to Creating the User Interface for MAF AMX Pages
15.2
Designing the Page Layout
15.2.1
How to Use a View Component
15.2.2
How to Use a Panel Page Component
15.2.3
How to Use a Panel Group Layout Component
15.2.3.1
Customizing the Scrolling Behavior
15.2.4
How to Use a Panel Form Layout Component
15.2.5
How to Use a Panel Stretch Layout Component
15.2.6
How to Use a Panel Label And Message Component
15.2.7
How to Use a Facet Component
15.2.8
How to Use a Popup Component
15.2.9
How to Use a Panel Splitter Component
15.2.10
How to Use a Spacer Component
15.2.11
How to Use a Table Layout Component
15.2.12
How to Use a Masonry Layout Component
15.2.13
How to Use an Accessory Layout Component
15.2.14
How to Use a Deck Component
15.2.15
How to Use a Flex Layout Component
15.2.16
How to Use the Fragment Component
15.3
Creating and Using UI Components
15.3.1
How to Use the Input Text Component
15.3.1.1
Customizing the Input Text Component
15.3.2
How to Use the Input Number Slider Component
15.3.3
How to Use the Input Date Component
15.3.4
How to Use the Output Text Component
15.3.5
How to Use Buttons
15.3.5.1
Displaying Default Style Buttons
15.3.5.2
Displaying Back Style Buttons
15.3.5.3
Displaying Highlight Style Buttons
15.3.5.4
Displaying Alert Style Buttons
15.3.5.5
Using Additional Button Styles
15.3.5.6
Using Buttons Within the Application
15.3.5.6.1
Navigation Bar
15.3.5.6.2
Content Area
15.3.5.6.3
Action Sheets
15.3.5.6.4
Alert Messages
15.3.5.7
Enabling the Back Button Navigation
15.3.5.8
What You May Need to Know About the Order of Processing Operations and Attributes
15.3.6
How to Use Links
15.3.7
How to Display Images
15.3.8
How to Use the Checkbox Component
15.3.8.1
Support for Checkbox Components on the iOS Platform
15.3.8.2
Support for Checkbox Components on the Android Platform
15.3.9
How to Use the Select Many Checkbox Component
15.3.9.1
What You May Need to Know About the User Interaction with Select Many Checkbox Component
15.3.10
How to Use the Choice Component
15.3.10.1
What You May Need to Know About the User Interaction with Choice Component on iOS Platform
15.3.10.2
What You May Need to Know About the User Interaction with Choice Component on the Android Platform
15.3.10.3
What You May Need to Know About Differences Between Select Items and Select Item Components
15.3.11
How to Use the Select Many Choice Component
15.3.12
How to Use the Boolean Switch Component
15.3.12.1
What You May Need to Know About Support for Boolean Switch Components on iOS Platform
15.3.12.2
What You May Need to Know About Support for Boolean Switch Components on the Android Platform
15.3.13
How to Use the Select Button Component
15.3.14
How to Use the Radio Button Component
15.3.15
How to Use List View and List Item Components
15.3.15.1
Configuring Paging and Dynamic Scrolling
15.3.15.1.1
List View Scrolling Strategies
15.3.15.1.2
List View's Own Scrolling
15.3.15.1.3
Server-Side Paging
15.3.15.2
What You May Need to Know About Memory Consumption by MAF AMX UI Components
15.3.15.3
Rearranging List View Items
15.3.15.4
Configuring the List View Layout
15.3.15.5
What You May Need to Know About Using Static List View
15.3.16
How to Use a Carousel Component
15.3.17
How to Use the Film Strip Component
15.3.17.1
What You May Need to Know About the Film Strip Layout
15.3.17.2
What You May Need to Know About the Film Strip Navigation
15.3.18
How to Use Verbatim Component
15.3.18.1
What You May Need to Know About Using JavaScript and AJAX with Verbatim Component
15.3.19
How to Use an Output HTML Component
15.3.20
How to Enable Iteration
15.3.21
How to Refresh Contents of UI Components
15.3.22
How to Load a Resource Bundle
15.3.23
How to Use the Action Listener
15.3.23.1
What You May Need to Know About Differences Between the Action Listener Component and Attribute
15.3.24
How to Use the Set Property Listener
15.3.25
How to Use the Client Listener
15.3.26
How to Convert Date and Time Values
15.3.26.1
What You May Need to Know About Date and Time Patterns
15.3.27
How to Convert Numeric Values
15.3.28
How to Enable Drag Navigation
15.3.28.1
What You May Need to Know About the disabled Attribute
15.3.29
How to Use the Loading Indicator
15.4
Enabling Gestures
15.5
Providing Data Visualization
15.5.1
How to Create an Area Chart
15.5.2
How to Create a Bar Chart
15.5.3
How to Create a Range Chart
15.5.4
How to Create a Bubble Chart
15.5.5
How to Create a Combo Chart
15.5.6
How to Create a Line Chart
15.5.7
How to Create a Pie Chart
15.5.7.1
Configuring the Pie Chart as a Ring Chart
15.5.7.2
Styling the Pie Chart
15.5.8
How to Create a Scatter Chart
15.5.9
How to Create a Spark Chart
15.5.10
How to Create a Funnel Chart
15.5.11
How to Create a Stock Chart
15.5.12
How to Style Chart Components
15.5.13
How to Use Events with Chart Components
15.5.14
What You May Need to Know About Customization of Chart Tooltips
15.5.15
How to Enable Sorting of Charts with Categorical Axis
15.5.16
How to Define the Initial Zooming of Charts
15.5.17
How to Define Stacking of Specific Chart Series
15.5.18
How to Enable Split Dual-Y Axis in Charts
15.5.19
How to Create a LED Gauge
15.5.20
How to Create a Status Meter Gauge
15.5.21
How to Create a Dial Gauge
15.5.22
How to Create a Rating Gauge
15.5.22.1
Overwriting the shortDesc Attribute
15.5.22.2
Applying Custom Styling to the Rating Gauge Component
15.5.23
How to Define Child Elements for Chart and Gauge Components
15.5.23.1
Defining Chart Data Item
15.5.23.2
Defining and Configuring Legend
15.5.23.3
Defining and Configuring X Axis, YAxis, and Y2Axis
15.5.23.4
Defining Pie Data Item
15.5.23.5
Defining Spark Data Item
15.5.23.6
Defining Funnel Data Item
15.5.23.7
Defining Stock Data Item
15.5.23.8
Defining Threshold
15.5.24
How to Create a Geographic Map Component
15.5.24.1
Configuring Geographic Map Components With the Map Provider Information
15.5.24.2
Displaying Routes in Geographic Map Components
15.5.25
How to Create a Thematic Map Component
15.5.25.1
Defining Custom Markers
15.5.25.2
Defining Isolated Area Layers
15.5.25.3
Defining Isolated Areas
15.5.25.4
Enabling Initial Zooming
15.5.25.5
Defining a Custom Base Map
15.5.25.6
What You May Need to Know About the Marker Support for Event Listeners
15.5.25.7
Applying Custom Styling to the Thematic Map Component
15.5.26
How to Use Events with Map Components
15.5.27
How to Create a Treemap Component
15.5.27.1
Applying Custom Styling to the Treemap Component
15.5.28
How to Create a Sunburst Component
15.5.28.1
Applying Custom Styling to the Sunburst Component
15.5.29
How to Create a Timeline Component
15.5.29.1
Applying Custom Styling to the Timeline Component
15.5.30
How to Create an NBox Component
15.5.31
How to Create a Picto Chart
15.5.32
How to Define Child Elements for Map Components, Sunburst, Treemap, Timeline, Picto Chart, and NBox
15.5.33
How to Create Databound Data Visualization Components
15.5.33.1
What You May Need to Know About Setting Series Style for Databound Chart Components
15.5.34
How to Create Data Visualization Components Based on Static Data
15.5.35
How to Enable Interactivity in Chart Components
15.5.36
How to Create Polar Charts
15.6
Styling UI Components
15.6.1
How to Use Component Attributes to Define Style
15.6.2
What You May Need to Know About Skinning
15.6.3
What You May Need to Know About Using CSS ID Selectors for Skinning
15.6.4
How to Style Data Visualization Components
15.7
Localizing UI Components
15.8
Understanding MAF Support for Accessibility
15.8.1
How to Configure UI and Data Visualization Components for Accessibility
15.8.1.1
Configuring the Accessibility Audit Rules
15.8.2
What You May Need to Know About the Basic WAI-ARIA Terms
15.8.3
What You May Need to Know About the Oracle Global HTML Accessibility Guidelines
15.9
Validating Input
15.10
Using Event Listeners
15.10.1
What You May Need to Know About Constrained Type Attributes for Event Listeners
16
Using Bindings and Creating Data Controls in MAF AMX
16.1
Introduction to Bindings and Data Controls
16.2
About Object Scope Lifecycles
16.2.1
What You May Need to Know About Object Scopes and Task Flows
16.3
Creating EL Expressions
16.3.1
About Data Binding EL Expressions
16.3.2
How to Create an EL Expression
16.3.2.1
About the Method Expression Builder
16.3.2.2
About Non EL-Properties
16.3.3
What You May Need to Know About MAF Binding Properties
16.3.4
How to Enable Retention of Data Provider State Across Iterators
16.3.5
How to Reference Binding Containers
16.3.6
About the Categories in the Expression Builder
16.3.6.1
About the Bindings Category
16.3.6.2
About the Managed Beans Category
16.3.6.3
About the Mobile Application Framework Objects Category
16.3.7
About EL Events
16.3.8
How to Use EL Expressions Within Managed Beans
16.4
Creating and Using Managed Beans
16.4.1
How to Create a Managed Bean in JDeveloper
16.4.2
What Happens When You Use JDeveloper to Create a Managed Bean
16.5
Exposing Business Services with Data Controls
16.5.1
How to Create Data Controls
16.5.2
What Happens in Your Project When You Create a Data Control
16.5.2.1
DataControls.dcx Overview Editor
16.5.2.2
Data Controls Panel
16.5.3
Data Control Built-in Operations
16.5.3.1
addXXX and removeXXX Methods of Data Control
16.6
Creating Databound UI Components from the Data Controls Panel
16.6.1
How to Use the Data Controls Panel
16.6.2
What Happens When You Use the Data Controls Panel
16.7
What Happens at Runtime: How the Binding Context Works
16.8
Configuring Data Controls
16.8.1
How to Edit a Data Control
16.8.2
What Happens When You Edit a Data Control
16.8.3
What You May Need to Know About MDS Customization of Data Controls
16.9
Working with Attributes
16.9.1
How to Designate an Attribute as Primary Key
16.9.2
How to Define a Static Default Value for an Attribute
16.9.3
How to Set UI Hints on Attributes
16.9.4
What Happens When You Set UI Hints on Attributes
16.9.5
How to Access UI Hints Using EL Expressions
16.10
Creating and Using Bean Data Controls
16.10.1
What You May Need to Know About Serialization of Bean Class Variables
16.11
Using the DeviceFeatures Data Control
16.11.1
How to Use the getPicture Method to Enable Taking Pictures
16.11.2
How to Use the SendSMS Method to Enable Text Messaging
16.11.3
How to Use the sendEmail Method to Enable Email
16.11.4
How to Use the createContact Method to Enable Creating Contacts
16.11.5
How to Use the findContacts Method to Enable Finding Contacts
16.11.6
How to Use the updateContact Method to Enable Updating Contacts
16.11.7
How to Use the removeContact Method to Enable Removing Contacts
16.11.8
How to Use the startLocationMonitor Method to Enable Geolocation
16.11.9
How to Use the displayFile Method to Enable Displaying Files
16.11.10
How to Use the addLocalNotification and cancelLocalNotification Methods to Manage Local Notifications
16.11.11
What You May Need to Know About Device Properties
16.12
Validating Attributes
16.12.1
How to Add Validation Rules
16.12.2
What You May Need to Know About the Validator Metadata
16.13
Using Background Threads
16.14
Working with Data Change Events
17
Configuring End Points Used in MAF Applications
17.1
Introduction to Configuring End Points in MAF Applications
17.2
Defining the Configuration Service End Point
17.3
Creating the User Interface for the Configuration Service
17.4
About the URL Construction
17.5
Setting Up the Configuration Service on the Server
18
Using Web Services in a MAF Application
18.1
Introduction to Using Web Services in a MAF Application
18.2
Creating a Rest Service Adapter to Access Web Services
18.2.1
Accessing Input and Output Streams
18.2.2
Support for Non-Text Responses
18.3
Accessing Secure Web Services
18.3.1
How to Enable Access to Web Services
18.3.2
What Happens When You Enable Access to Web Services
18.3.3
What You May Need to Know About Accessing Web Services and Containerized MAF Applications
18.3.4
What You May Need to Know About Credential Injection
18.3.5
What You May Need to Know About Cookie Injection
18.4
Configuring the Browser Proxy Information
19
Using the Local Database in MAF AMX
19.1
Introduction to the Local SQLite Database Usage
19.1.1
Differences Between SQLite and Other Relational Databases
19.1.1.1
Concurrency
19.1.1.2
SQL Support and Interpretation
19.1.1.3
Data Types
19.1.1.4
Foreign Keys
19.1.1.5
Database Transactions
19.1.1.6
Authentication
19.2
Using the Local SQLite Database
19.2.1
How to Connect to the Database
19.2.2
How to Use SQL Script to Initialize the Database
19.2.3
How to Initialize the Database on a Desktop
19.2.4
What You May Need to Know About Commit Handling
19.2.5
Limitations of MAF SQLite JDBC Driver
19.2.6
How to Use the VACUUM Command
19.2.7
How to Encrypt and Decrypt the Database
19.2.7.1
Encrypting the Database with Your Own Password
19.2.7.2
Permanently Decrypting the Database Encrypted with Your Own Password
19.2.7.3
Encrypting the Database with a Password Generated by MAF
19.2.7.4
Decrypting the Database Encrypted with a Password Generated by MAF
20
Customizing MAF AMX Application Feature Artifacts
20.1
Introduction to Customizing MAF AMX Pages and Artifacts
20.2
Customizing MAF AMX Pages and Artifacts
21
Creating Custom MAF AMX UI Components
21.1
Introduction to Creating Custom UI Components
21.2
Using MAF APIs to Create Custom Components
21.2.1
How to Use Static APIs
21.2.2
How to Use AmxEvent Classes
21.2.3
How to Use the TypeHandler
21.2.4
How to Use the AmxNode
21.2.5
How to Use the AmxTag
21.2.6
How to Use the VisitContext
21.2.7
How to Use the AmxAttributeChange
21.2.8
How to Use the AmxDescendentChanges
21.2.9
How to Use the AmxCollectionChange
21.2.10
How to Use the AmxNodeChangeResult
21.2.11
How to Use the AmxNodeStates
21.2.12
How to Use the AmxNodeUpdateArguments
21.3
Creating Custom Components
22
Implementing Application Feature Content Using Remote URLs
22.1
Introduction to Remote URL Applications
22.2
Enabling Remote Applications Access Container Services
22.3
Whitelisting Remote URLs in Your MAF Application
22.3.1
How to Whitelist Remote URLs on the Android Platform
22.3.2
How to Whitelist Remote URLs on the iOS Platform
22.3.3
How to Whitelist Remote URLs on Universal Windows Platform
22.4
Enabling the Browser Navigation Bar on Remote URL Pages
22.4.1
How to Add the Navigation Bar to a Remote URL Application Feature
22.4.2
What Happens When You Enable the Browser Navigation Buttons for a Remote URL Application Feature
23
Enabling User Preferences
23.1
Creating User Preference Pages for a Mobile Application
23.1.1
How to Create Mobile Application-Level Preferences Pages
23.1.1.1
How to Create a New User Preference Page
23.1.1.2
What Happens When You Add a Preference Page
23.1.1.3
How to Create User Preference Lists
23.1.1.4
What Happens When You Create a Preference List
23.1.1.5
How to Create a Boolean Preference List
23.1.1.6
What Happens When You Add a Boolean Preference
23.1.1.7
How to Add a Text Preference
23.1.1.8
What Happens When You Define a Text Preference
23.1.2
What Happens When You Create an Application-Level Preference Page
23.2
Creating User Preference Pages for Application Features
23.3
Using EL Expressions to Retrieve Stored Values for User Preference Pages
23.3.1
What You May Need to Know About preferenceScope
23.3.2
Reading Preference Values in iOS Native Views
23.4
Platform-Dependent Display Differences
24
Setting Constraints on Application Features
24.1
Introduction to Constraints
24.1.1
Using Constraints to Show or Hide an Application Feature
24.1.2
Using Constraints to Deliver Specific Content Types
24.2
Defining Constraints for Application Features
24.2.1
How to Define the Constraints for an Application Feature
24.2.2
What Happens When You Define a Constraint
24.2.3
About the property Attribute
24.2.4
About User Constraints and Access Control
24.2.5
About Hardware-Related Constraints
24.2.6
Creating Dynamic Constraints on Application Features and Content
24.2.6.1
About Combining Static and EL-Defined Constraints
24.2.6.2
How to Define a Dynamic Constraint
25
Enabling and Using Notifications
25.1
Introduction to Notifications
25.2
Enabling Push Notifications
25.2.1
How to Register a Device for Push Notifications from MCS
25.2.2
What You May Need to Know About the Push Notification Payload
25.3
Managing Local Notifications
25.3.1
How to Manage Local Notifications Using Java
25.3.2
How to Manage Local Notifications Using JavaScript
25.3.3
How to Manage Local Notifications Using the DeviceFeatures Data Control
25.3.4
What You May Need to Know About Local Notification Options and the Application Behavior
25.4
Determining Application State When MAF Triggers a Notification Event
26
Caching Data in a MAF Application
26.1
Introduction to Data Caching in MAF Applications
26.2
Enable Data Caching in a MAF Application
26.3
Specifying Cached Resources and Cache Policies in the sync-config.xml File
26.4
Caching Policies Provided by MAF
26.5
Using Configuration Service End Points in the sync-config.xml File
26.6
Encrypting Cached Data in a MAF Application
26.7
Packaging the sync-config.xml File in a FAR
27
Displaying Error Messages in MAF Applications
27.1
Introduction to Error Handling in MAF Applications
27.2
Displaying Error Messages and Stopping Background Threads
27.2.1
How Applications Display Error Message for Background Thread Exceptions
27.3
Localizing Error Messages
28
Deploying MAF Applications
28.1
Introduction to Deployment of MAF Applications
28.2
Working with Deployment Profiles
28.2.1
About Automatically Generated Deployment Profiles
28.2.2
How to Create a Deployment Profile
28.2.3
What Happens When You Create a Deployment Profile
28.3
Deploying an Android Application
28.3.1
How to Create an Android Deployment Profile
28.3.1.1
Setting Preferences from the Command Line Using Startup Parameters
28.3.1.2
Setting the Options for the Application Details
28.3.1.3
Setting Deployment Options
28.3.1.4
Defining the Android Signing Options
28.3.1.5
What You May Need to Know About Credential Storage
28.3.1.6
How to Add a Custom Image to an Android Application
28.3.1.7
What Happens When JDeveloper Deploys Images for Android Applications
28.3.2
How to Deploy an Android Application to an Android Emulator
28.3.3
How to Deploy an Application to an Android-Powered Device
28.3.4
How to Publish an Android Application
28.3.5
What Happens in JDeveloper When You Create an .apk File
28.3.6
Selecting the Most Recently Used Deployment Profiles
28.3.7
What You May Need to Know About Using the Android Debug Bridge
28.4
Deploying an iOS Application
28.4.1
How to Create an iOS Deployment Profile
28.4.1.1
Defining the iOS Build Options
28.4.1.2
Setting the Device Signing Options
28.4.1.3
Adding a Custom Image to an iOS Application
28.4.1.4
What You May Need to Know About iTunes Artwork
28.4.1.5
How to Restrict the Display to a Specific Device Orientation
28.4.1.6
What Happens When You Deselect Device Orientations
28.4.2
How to Deploy an iOS Application to an iOS Simulator
28.4.3
How to Deploy an Application to an iOS-Powered Device
28.4.4
What Happens When You Deploy an Application to an iOS Device
28.4.5
What You May Need to Know About Deploying an Application to an iOS-Powered Device
28.4.5.1
Creating iOS Development Certificates
28.4.5.2
Registering an Apple Device for Testing and Debugging
28.4.5.3
Registering an Application ID
28.4.6
How to Distribute an iOS Application to the App Store
28.5
Deploying a MAF Application to the Universal Windows Platform
28.5.1
How to Deploy a MAF Application to the Universal Windows Platform
28.5.2
What Happens When You Deploy a MAF Application to the Universal Windows Platform
28.6
Overview of MAF Quick Deployment of Applications
28.6.1
About the Artifacts That Support Quick Deployment
28.6.2
About Requirements for Quick Deployment
28.6.3
What Happens During a Quick Deployment Session
28.6.4
How to Start the Full Deployment of an Application
28.6.5
How to Force the Full Deployment of an Application
28.6.6
What You May Need to Know About Quick Deployment Limitations
28.7
Deploying Feature Archive Files (FARs)
28.7.1
How to Create a Deployment Profile for a Feature Archive
28.7.2
How to Deploy the Feature Archive Deployment Profile
28.7.3
What Happens When You Deploy a Feature Archive File Deployment Profile
28.8
Creating a Mobile Application Archive File
28.8.1
How to Create a Mobile Application Archive File
28.9
Creating a New Application from an Application Archive
28.9.1
How to Create a New Application from an Application Archive
28.9.2
What Happens When You Import a MAF Application Archive File
28.10
Deploying MAF Applications from the Command Line
28.10.1
Using OJDeploy to Deploy Mobile Applications
28.11
Deploying with Oracle Mobile Security Suite
28.11.1
What Happens When You Containerize Your Application with OMSS
29
Understanding Secure Mobile Development Practices
29.1
Weak Server-Side Controls
29.2
Insecure Data Storage on the Device
29.2.1
Encrypting the SQLite Database
29.2.2
Securing the Device's Local Data Stores
29.2.3
About Security and Application Logs
29.3
Insufficient Transport Layer Protection
29.4
Side-Channel Data Leakage
29.5
Poor Authorization and Authentication
29.6
Broken Cryptography
29.7
Client-Side Injection From Cross-Site Scripting
29.7.1
Protecting MAF Applications from Injection Attacks Using Device Access Permissions
29.7.2
About Injection Attack Risks from Custom HTML Components
29.7.3
About SQL Injections and XML Injections
29.8
Security Decisions From Untrusted Inputs
29.9
Improper Session Handling
29.10
Lack of Binary Protections Resulting in Sensitive Information Disclosure
30
Securing MAF Applications
30.1
Introduction to MAF Security
30.2
About the User Login Process
30.3
Overview of the Authentication Process for MAF Applications
30.4
Overview of the Authentication Process for Containerized MAF Applications
30.5
Configuring MAF Connections
30.5.1
How to Create a MAF Login Connection
30.5.2
How to Create a Multi-Tenant Aware MAF Login Connection
30.5.3
How to Configure Basic Authentication
30.5.4
How to Configure OAuth Authentication
30.5.5
How to Configure Single Sign-On in a MAF Application
30.5.6
How to Configure a Placeholder Connection for MAF Application Login
30.5.7
How to Update Connection Attributes of a Named Connection at Runtime
30.5.8
How to Store Login Credentials
30.5.9
What Happens When You Create a Connection for a MAF Application
30.5.10
What Happens When You Create a Multi-Tenant Aware Connection
30.5.11
What You May Need to Know About the Login Connection Configuration
30.5.12
What You May Need to Know About Login Connections and Containerized MAF Applications
30.5.13
What You May Need to Know About Multiple Identities for Local and Hybrid Login Connections
30.5.14
What You May Need to Know About Migrating a MAF Application and Authentication Modes
30.5.15
What You May Need to Know About Custom Headers
30.5.16
What Happens at Runtime: When MAF Calls a REST Web Service
30.5.17
What You May Need to Know About Injecting Basic Authentication Headers
30.5.18
What You May Need to Know About Web Service Security
30.5.19
How to Configure Access Control
30.5.20
What You May Need to Know About the Access Control Service
30.5.21
How to Alter the Application Loading Sequence
30.5.22
How to Configure Login Credentials Programmatically Prior to Authentication
30.6
Configuring Security for MAF Applications
30.6.1
How to Enable Application Features to Require Authentication
30.6.2
How to Designate the Login Page
30.6.3
How to Create a Custom Login HTML Page
30.6.4
What You May Need to Know About Login Pages
30.6.4.1
The Default Login Page
30.6.4.2
The Custom Login Page
30.6.5
What You May Need to Know About Login Page Elements
30.6.6
What Happens in JDeveloper When You Configure Security for Application Features
30.7
Allowing Access to Device Capabilities
30.8
Enabling Users to Log Out from Application Features
30.9
Using MAF Authentication APIs
30.10
Creating Certificates to Access Servers That Use Self-Signed Certificates for SSL
30.11
Registering SSL Certificate File Extensions in a MAF Application
31
Testing and Debugging MAF Applications
31.1
Introduction to Testing and Debugging MAF Applications
31.2
Testing MAF Applications
31.2.1
How to Perform Accessibility Testing on iOS-Powered Devices
31.3
Configuring JDeveloper and MAF Applications to Debug Code
31.3.1
What You May Need to Know About the Debugging Configuration
31.3.1.1
Creating and Configuring a Run Configuration
31.3.2
How to Enable Debugging of Java Code and JavaScript
31.3.3
How to Debug the MAF AMX Content
31.4
Debugging MAF Applications Deployed on the Android Platform
31.4.1
How to Debug Java Code on the Android Platform
31.4.2
How to Debug UI Code on the Android Platform
31.5
Debugging MAF Applications Deployed on the iOS Platform
31.5.1
How to Debug Java Code on the iOS Platform
31.5.2
How to Debug UI Code on the iOS Platform
31.6
Debugging MAF Applications Deployed on the Universal Windows Platform
31.6.1
How to Debug Java Code on the Universal Windows Platform
31.6.1.1
How to Enable Remote Debugging of a MAF Application on the Universal Windows Platform
31.6.2
How to Debug UI Code on the Universal Windows Platform
31.7
Using and Configuring Logging in MAF Applications
31.7.1
How to Configure Logging Using the Properties File
31.7.2
How to Use JavaScript Logging
31.7.3
How to Use Embedded Logging
31.7.4
How to Use Xcode for Debugging and Logging on the iOS Platform
31.7.5
How to Access the Application Log
31.7.6
How to Disable Logging
31.8
Measuring MAF Application Performance
31.9
Inspecting Web Service Calls in a MAF Application
32
Integrating MAF Applications with EMM Solutions
32.1
Introduction to the AppConfig Community
32.2
About the MAF Approach to Enterprise Mobile Applications
32.3
Access Control for MAF Applications with EMM Solutions
32.4
How to Manage MAF Application Configurations with EMM Solutions
32.5
Managing MAF Applications with the AirWatch EMM Solution
32.6
Managing MAF Applications with the MobileIron EMM Solution
32.7
Managing MAF Applications with the Blackberry EMM Solution
32.8
Configuring Properties in MAF Applications for Use by EMM Solutions
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.