1/37
Contents
Title and Copyright Information
Preface
Audience
Related Documents
Conventions
What's New in This Guide for MAF Release 2.3.0
New and Changed Features for MAF Release 2.3.0
Other Significant Changes in this Document for MAF Release 2.3.0
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
Localizing MAF Applications
6.1
Introduction to MAF Application Localization
6.2
Setting Resource Bundle Options for a MAF Application
6.2.1
How to Set the Resource Bundle Options for a MAF Application
6.3
Defining Text Resources in a Base Resource Bundle
6.3.1
How to Define a Text Resource in a Base Resource Bundle
6.3.2
What Happens When You Define a Text Resource in a Base Resource Bundle
6.4
Creating Locale-Specific Resource Bundles
6.4.1
How to Create a Locale-Specific Resource Bundle
6.5
Editing Resources in Resource Bundles
6.6
Localizing Image Files in a MAF Application
6.7
MAF Support of Languages
6.8
Localizable MAF Properties
7
Skinning MAF Applications
7.1
Introduction to MAF Application Skins
7.1.1
About the maf-config.xml File
7.1.2
About the maf-skins.xml File
7.2
Adding a Custom Skin to an Application
7.3
Specifying a Skin for an Application to Use
7.4
Registering a Custom Skin
7.5
Versioning MAF Skins
7.6
What Happens When You Version Skins
7.7
Overriding the Default Skin Styles
7.8
What You May Need to Know About Skinning
7.9
Adding a New Style Sheet to a Skin
7.10
Enabling End Users Change an Application's Skin at Runtime
7.11
What Happens at Runtime: How End Users Change an Application's Skin
8
Reusing MAF Application Content
8.1
Introduction to Feature Archive Files
8.2
Using FAR Content in a MAF Application
8.3
What Happens When You Add a FAR as a Library
8.4
What Happens When You Add a FAR as a View Controller Project
8.5
What You May Need to Know About Enabling the Reuse of Feature Archive Resources
9
Using Plugins in MAF Applications
9.1
Introduction to Using Plugins in MAF Applications
9.2
Enabling a Core Plugin in Your MAF Application
9.2.1
How to Enable a Core Plugin in Your MAF Application
9.2.2
What Happens When You Enable a Core Plugin in Your MAF Application
9.3
Registering Additional Plugins in Your MAF Application
9.3.1
How to Register an Additional Plugin
9.3.2
What Happens When You Register an Additional Plugin for Your MAF Application
9.4
Deploying Plugins with Your MAF Application
9.5
Importing Plugins from a Feature Archive File
9.6
Using a Plugin in a MAF Application
10
Customizing MAF Application Artifacts with MDS
10.1
Introduction to Applying MDS Customizations to MAF Files
10.2
Customizing MAF Applications with MDS
10.3
Configuring Customization Layers
10.3.1
How to Configure the Layer Values Globally
10.3.2
How to Configure the Application-Level Layer Values
10.3.2.1
Using the Studio Developer Role
10.3.2.2
Using the Customization Developer Role
10.4
Creating Customization Classes
10.5
Consuming Customization Classes
10.6
Understanding a Customization Developer Role
10.6.1
How to Switch to the Customization Developer Role in JDeveloper
10.6.2
What You May Need to Know About the Tip Layer
10.7
Enabling Customizations in Resource Bundles
10.7.1
How to Create an Application Resource Bundle
10.7.2
How to Create a Project Resource Bundle
10.8
Upgrading a MAF Application with Customizations
10.8.1
What Happens in JDeveloper When You Upgrade Applications
10.8.2
What You May Need to Know About Upgrading FARs
11
Using Lifecycle Listeners in MAF Applications
11.1
Introduction to Lifecycle Listeners in MAF Applications
11.2
Registering a Lifecycle Listener for a MAF Application or an Application Feature
11.3
What Happens When You Register a Lifecycle Listener
12
Creating MAF AMX Pages
12.1
Introduction to the MAF AMX Application Feature
12.2
Creating Task Flows
12.2.1
How to Create a Task Flow
12.2.1.1
What You May Need to Know About Behavior of New Bounded Task Flows
12.2.2
What You May Need to Know About Task Flow Activities and Control Flows
12.2.3
What You May Need to Know About the ViewController-task-flow.xml File
12.2.4
What You May Need to Know About the MAF Task Flow Diagrammer
12.2.5
How to Add and Use Task Flow Activities
12.2.5.1
Adding View Activities
12.2.5.2
Adding Router Activities
12.2.5.3
Adding Method Call Activities
12.2.5.4
Adding Task Flow Call Activities
12.2.5.4.1
Calling a Bounded Task Flow Using a Task Flow Call Activity
12.2.5.4.2
Specifying Input Parameters on a Task Flow Call Activity
12.2.5.4.3
Specifying the Data Control Context
12.2.5.5
Adding Task Flow Return Activities
12.2.5.6
Using Task Flow Activities with Page Definition Files
12.2.6
How to Define the Data Control Context Depth for Task Flows
12.2.7
How to Define Control Flows
12.2.7.1
Defining a Control Flow Case
12.2.7.2
Adding a Wildcard Control Flow Rule
12.2.7.3
What You May Need to Know About Control Flow Rule Metadata
12.2.7.4
What You May Need to Know About Control Flow Rule Evaluation
12.2.8
What You May Need to Know About MAF Support for Back Navigation
12.2.9
How to Enable Page Navigation by Dragging
12.2.10
How to Specify Action Outcomes Using UI Components
12.2.11
How to Create and Reference Managed Beans
12.2.12
How to Specify the Page Transition Style
12.2.13
What You May Need to Know About Bounded and Unbounded Task Flows
12.2.13.1
Unbounded Task Flows
12.2.13.2
Bounded Task Flows
12.2.13.3
Using Parameters in Task Flows
12.2.13.3.1
Passing Parameters to a Bounded Task Flow
12.2.13.3.2
Configuring a Return Value from a Bounded Task Flow
12.3
Creating Views
12.3.1
How to Work with MAF AMX Pages
12.3.1.1
Interpreting the MAF AMX Page Structure
12.3.1.2
Creating MAF AMX Pages
12.3.1.3
What Happens When You Create a MAF AMX Page
12.3.1.4
Using UI Editors
12.3.1.5
Accessing the Page Definition File
12.3.1.6
Sharing the Page Contents
12.3.1.6.1
Configuring the Fragment Content
12.3.1.6.2
Passing List of Attributes with Metadata to a Fragment
12.3.2
How to Add UI Components to a MAF AMX Page
12.3.2.1
Using the Preview
12.3.2.2
Configuring UI Components
12.3.2.3
What You May Need to Know About Element Identifiers and Their Audit
12.3.3
How to Add Data Controls to a MAF AMX Page
12.3.3.1
Dragging and Dropping Attributes
12.3.3.1.1
Date
12.3.3.1.2
Single Selection
12.3.3.1.3
Text
12.3.3.2
Dragging and Dropping Operations
12.3.3.2.1
Operation
12.3.3.2.2
Method
12.3.3.3
Dragging and Dropping Collections
12.3.3.3.1
Multiple Selection
12.3.3.3.2
Form
12.3.3.3.3
Iterator
12.3.3.3.4
List View
12.3.3.4
What You May Need to Know About Generated Bindings
12.3.3.5
What You May Need to Know About Generated Drag and Drop Artifacts
12.3.3.6
Using the MAF AMX Editor Bindings Tab
12.3.3.7
What You May Need to Know About Removal of Unused Bindings
12.3.4
What You May Need to Know About the Server Communication
13
Creating the MAF AMX User Interface
13.1
Introduction to Creating the User Interface for MAF AMX Pages
13.2
Designing the Page Layout
13.2.1
How to Use a View Component
13.2.2
How to Use a Panel Page Component
13.2.3
How to Use a Panel Group Layout Component
13.2.3.1
Customizing the Scrolling Behavior
13.2.4
How to Use a Panel Form Layout Component
13.2.5
How to Use a Panel Stretch Layout Component
13.2.6
How to Use a Panel Label And Message Component
13.2.7
How to Use a Facet Component
13.2.8
How to Use a Popup Component
13.2.9
How to Use a Panel Splitter Component
13.2.10
How to Use a Spacer Component
13.2.11
How to Use a Table Layout Component
13.2.12
How to Use a Masonry Layout Component
13.2.13
How to Use an Accessory Layout Component
13.2.14
How to Use a Deck Component
13.2.15
How to Use a Flex Layout Component
13.2.16
How to Use the Fragment Component
13.3
Creating and Using UI Components
13.3.1
How to Use the Input Text Component
13.3.1.1
Customizing the Input Text Component
13.3.2
How to Use the Input Number Slider Component
13.3.3
How to Use the Input Date Component
13.3.4
How to Use the Output Text Component
13.3.5
How to Use Buttons
13.3.5.1
Displaying Default Style Buttons
13.3.5.2
Displaying Back Style Buttons
13.3.5.3
Displaying Highlight Style Buttons
13.3.5.4
Displaying Alert Style Buttons
13.3.5.5
Using Additional Button Styles
13.3.5.6
Using Buttons Within the Application
13.3.5.6.1
Navigation Bar
13.3.5.6.2
Content Area
13.3.5.6.3
Action Sheets
13.3.5.6.4
Alert Messages
13.3.5.7
Enabling the Back Button Navigation
13.3.5.8
What You May Need to Know About the Order of Processing Operations and Attributes
13.3.6
How to Use Links
13.3.7
How to Display Images
13.3.8
How to Use the Checkbox Component
13.3.8.1
Support for Checkbox Components on the iOS Platform
13.3.8.2
Support for Checkbox Components on the Android Platform
13.3.9
How to Use the Select Many Checkbox Component
13.3.9.1
What You May Need to Know About the User Interaction with Select Many Checkbox Component
13.3.10
How to Use the Choice Component
13.3.10.1
What You May Need to Know About the User Interaction with Choice Component on iOS Platform
13.3.10.2
What You May Need to Know About the User Interaction with Choice Component on the Android Platform
13.3.10.3
What You May Need to Know About Differences Between Select Items and Select Item Components
13.3.11
How to Use the Select Many Choice Component
13.3.12
How to Use the Boolean Switch Component
13.3.12.1
What You May Need to Know About Support for Boolean Switch Components on iOS Platform
13.3.12.2
What You May Need to Know About Support for Boolean Switch Components on the Android Platform
13.3.13
How to Use the Select Button Component
13.3.14
How to Use the Radio Button Component
13.3.15
How to Use List View and List Item Components
13.3.15.1
Configuring Paging and Dynamic Scrolling
13.3.15.1.1
List View Scrolling Strategies
13.3.15.1.2
List View's Own Scrolling
13.3.15.1.3
Server-Side Paging
13.3.15.2
What You May Need to Know About Memory Consumption by MAF AMX UI Components
13.3.15.3
Rearranging List View Items
13.3.15.4
Configuring the List View Layout
13.3.15.5
What You May Need to Know About Using Static List View
13.3.16
How to Use a Carousel Component
13.3.17
How to Use the Film Strip Component
13.3.17.1
What You May Need to Know About the Film Strip Layout
13.3.17.2
What You May Need to Know About the Film Strip Navigation
13.3.18
How to Use Verbatim Component
13.3.18.1
What You May Need to Know About Using JavaScript and AJAX with Verbatim Component
13.3.19
How to Use an Output HTML Component
13.3.20
How to Enable Iteration
13.3.21
How to Refresh Contents of UI Components
13.3.22
How to Load a Resource Bundle
13.3.23
How to Use the Action Listener
13.3.23.1
What You May Need to Know About Differences Between the Action Listener Component and Attribute
13.3.24
How to Use the Set Property Listener
13.3.25
How to Use the Client Listener
13.3.26
How to Convert Date and Time Values
13.3.26.1
What You May Need to Know About Date and Time Patterns
13.3.27
How to Convert Numeric Values
13.3.28
How to Enable Drag Navigation
13.3.28.1
What You May Need to Know About the disabled Attribute
13.3.29
How to Use the Loading Indicator
13.4
Enabling Gestures
13.5
Providing Data Visualization
13.5.1
How to Create an Area Chart
13.5.2
How to Create a Bar Chart
13.5.3
How to Create a Range Chart
13.5.4
How to Create a Bubble Chart
13.5.5
How to Create a Combo Chart
13.5.6
How to Create a Line Chart
13.5.7
How to Create a Pie Chart
13.5.7.1
Configuring the Pie Chart as a Ring Chart
13.5.7.2
Styling the Pie Chart
13.5.8
How to Create a Scatter Chart
13.5.9
How to Create a Spark Chart
13.5.10
How to Create a Funnel Chart
13.5.11
How to Create a Stock Chart
13.5.12
How to Style Chart Components
13.5.13
How to Use Events with Chart Components
13.5.14
What You May Need to Know About Customization of Chart Tooltips
13.5.15
How to Enable Sorting of Charts with Categorical Axis
13.5.16
How to Define the Initial Zooming of Charts
13.5.17
How to Define Stacking of Specific Chart Series
13.5.18
How to Enable Split Dual-Y Axis in Charts
13.5.19
How to Create a LED Gauge
13.5.20
How to Create a Status Meter Gauge
13.5.21
How to Create a Dial Gauge
13.5.22
How to Create a Rating Gauge
13.5.22.1
Overwriting the shortDesc Attribute
13.5.22.2
Applying Custom Styling to the Rating Gauge Component
13.5.23
How to Define Child Elements for Chart and Gauge Components
13.5.23.1
Defining Chart Data Item
13.5.23.2
Defining and Configuring Legend
13.5.23.3
Defining and Configuring X Axis, YAxis, and Y2Axis
13.5.23.4
Defining Pie Data Item
13.5.23.5
Defining Spark Data Item
13.5.23.6
Defining Funnel Data Item
13.5.23.7
Defining Stock Data Item
13.5.23.8
Defining Threshold
13.5.24
How to Create a Geographic Map Component
13.5.24.1
Configuring Geographic Map Components With the Map Provider Information
13.5.24.2
Displaying Route in Geographic Map Components
13.5.25
How to Create a Thematic Map Component
13.5.25.1
Defining Custom Markers
13.5.25.2
Defining Isolated Area Layers
13.5.25.3
Defining Isolated Areas
13.5.25.4
Enabling Initial Zooming
13.5.25.5
Defining a Custom Base Map
13.5.25.6
What You May Need to Know About the Marker Support for Event Listeners
13.5.25.7
Applying Custom Styling to the Thematic Map Component
13.5.26
How to Use Events with Map Components
13.5.27
How to Create a Treemap Component
13.5.27.1
Applying Custom Styling to the Treemap Component
13.5.28
How to Create a Sunburst Component
13.5.28.1
Applying Custom Styling to the Sunburst Component
13.5.29
How to Create a Timeline Component
13.5.29.1
Applying Custom Styling to the Timeline Component
13.5.30
How to Create an NBox Component
13.5.31
How to Define Child Elements for Map Components, Sunburst, Treemap, Timeline, and NBox
13.5.32
How to Create Databound Data Visualization Components
13.5.32.1
What You May Need to Know About Setting Series Style for Databound Chart Components
13.5.33
How to Create Data Visualization Components Based on Static Data
13.5.34
How to Enable Interactivity in Chart Components
13.5.35
How to Create Polar Charts
13.6
Styling UI Components
13.6.1
How to Use Component Attributes to Define Style
13.6.2
What You May Need to Know About Skinning
13.6.3
What You May Need to Know About Using CSS ID Selectors for Skinning
13.6.4
How to Style Data Visualization Components
13.7
Localizing UI Components
13.8
Understanding MAF Support for Accessibility
13.8.1
How to Configure UI and Data Visualization Components for Accessibility
13.8.1.1
Configuring the Accessibility Audit Rules
13.8.2
What You May Need to Know About the Basic WAI-ARIA Terms
13.8.3
What You May Need to Know About the Oracle Global HTML Accessibility Guidelines
13.9
Validating Input
13.10
Using Event Listeners
13.10.1
What You May Need to Know About Constrained Type Attributes for Event Listeners
14
Using Bindings and Creating Data Controls in MAF AMX
14.1
Introduction to Bindings and Data Controls
14.2
About Object Scope Lifecycles
14.2.1
What You May Need to Know About Object Scopes and Task Flows
14.3
Creating EL Expressions
14.3.1
About Data Binding EL Expressions
14.3.2
How to Create an EL Expression
14.3.2.1
About the Method Expression Builder
14.3.2.2
About Non EL-Properties
14.3.3
What You May Need to Know About MAF Binding Properties
14.3.4
How to Enable Retention of Data Provider State Across Iterators
14.3.5
How to Reference Binding Containers
14.3.6
About the Categories in the Expression Builder
14.3.6.1
About the Bindings Category
14.3.6.2
About the Managed Beans Category
14.3.6.3
About the Mobile Application Framework Objects Category
14.3.7
About EL Events
14.3.8
How to Use EL Expressions Within Managed Beans
14.4
Creating and Using Managed Beans
14.4.1
How to Create a Managed Bean in JDeveloper
14.4.2
What Happens When You Use JDeveloper to Create a Managed Bean
14.5
Exposing Business Services with Data Controls
14.5.1
How to Create Data Controls
14.5.2
What Happens in Your Project When You Create a Data Control
14.5.2.1
DataControls.dcx Overview Editor
14.5.2.2
Data Controls Panel
14.5.3
Data Control Built-in Operations
14.6
Creating Databound UI Components from the Data Controls Panel
14.6.1
How to Use the Data Controls Panel
14.6.2
What Happens When You Use the Data Controls Panel
14.7
What Happens at Runtime: How the Binding Context Works
14.8
Configuring Data Controls
14.8.1
How to Edit a Data Control
14.8.2
What Happens When You Edit a Data Control
14.8.3
What You May Need to Know About MDS Customization of Data Controls
14.9
Working with Attributes
14.9.1
How to Designate an Attribute as Primary Key
14.9.2
How to Define a Static Default Value for an Attribute
14.9.3
How to Set UI Hints on Attributes
14.9.4
What Happens When You Set UI Hints on Attributes
14.9.5
How to Access UI Hints Using EL Expressions
14.10
Creating and Using Bean Data Controls
14.10.1
What You May Need to Know About Serialization of Bean Class Variables
14.11
Using the DeviceFeatures Data Control
14.11.1
How to Use the getPicture Method to Enable Taking Pictures
14.11.2
How to Use the SendSMS Method to Enable Text Messaging
14.11.3
How to Use the sendEmail Method to Enable Email
14.11.4
How to Use the createContact Method to Enable Creating Contacts
14.11.5
How to Use the findContacts Method to Enable Finding Contacts
14.11.6
How to Use the updateContact Method to Enable Updating Contacts
14.11.7
How to Use the removeContact Method to Enable Removing Contacts
14.11.8
How to Use the startLocationMonitor Method to Enable Geolocation
14.11.9
How to Use the displayFile Method to Enable Displaying Files
14.11.10
How to Use the addLocalNotification and cancelLocalNotification Methods to Manage Local Notifications
14.11.11
What You May Need to Know About Device Properties
14.12
Validating Attributes
14.12.1
How to Add Validation Rules
14.12.2
What You May Need to Know About the Validator Metadata
14.13
Using Background Threads
14.14
About Data Change Events
15
Configuring End Points Used in MAF Applications
15.1
Introduction to Configuring End Points in MAF Applications
15.2
Defining the Configuration Service End Point
15.3
Creating the User Interface for the Configuration Service
15.4
About the URL Construction
15.5
Setting Up the Configuration Service on the Server
16
Using Web Services in a MAF Application
16.1
Introduction to Using Web Services in a MAF Application
16.2
Creating a Rest Service Adapter to Access Web Services
16.2.1
Accessing Input and Output Streams
16.2.2
Support for Non-Text Responses
16.3
Accessing Secure Web Services
16.3.1
How to Enable Access to Web Services
16.3.2
What Happens When You Enable Access to Web Services
16.3.3
What You May Need to Know About Accessing Web Services and Containerized MAF Applications
16.3.4
What You May Need to Know About Credential Injection
16.3.5
What You May Need to Know About Cookie Injection
16.4
Configuring the Browser Proxy Information
17
Using the Local Database in MAF AMX
17.1
Introduction to the Local SQLite Database Usage
17.1.1
Differences Between SQLite and Other Relational Databases
17.1.1.1
Concurrency
17.1.1.2
SQL Support and Interpretation
17.1.1.3
Data Types
17.1.1.4
Foreign Keys
17.1.1.5
Database Transactions
17.1.1.6
Authentication
17.2
Using the Local SQLite Database
17.2.1
How to Connect to the Database
17.2.2
How to Use SQL Script to Initialize the Database
17.2.3
How to Initialize the Database on a Desktop
17.2.4
What You May Need to Know About Commit Handling
17.2.5
Limitations of the MAF's SQLite JDBC Driver
17.2.6
How to Use the VACUUM Command
17.2.7
How to Encrypt and Decrypt the Database
17.2.7.1
Encrypting the Database with Your Own Password
17.2.7.2
Permanently Decrypting the Database Encrypted with Your Own Password
17.2.7.3
Encrypting the Database with a Password Generated by MAF
17.2.7.4
Decrypting the Database Encrypted with a Password Generated by MAF
18
Customizing MAF AMX Application Feature Artifacts
18.1
Introduction to Customizing MAF AMX Pages and Artifacts
18.2
Customizing MAF AMX Pages and Artifacts
19
Creating Custom MAF AMX UI Components
19.1
Introduction to Creating Custom UI Components
19.2
Using MAF APIs to Create Custom Components
19.2.1
How to Use Static APIs
19.2.2
How to Use AmxEvent Classes
19.2.3
How to Use the TypeHandler
19.2.4
How to Use the AmxNode
19.2.5
How to Use the AmxTag
19.2.6
How to Use the VisitContext
19.2.7
How to Use the AmxAttributeChange
19.2.8
How to Use the AmxDescendentChanges
19.2.9
How to Use the AmxCollectionChange
19.2.10
How to Use the AmxNodeChangeResult
19.2.11
How to Use the AmxNodeStates
19.2.12
How to Use the AmxNodeUpdateArguments
19.3
Creating Custom Components
20
Implementing Application Feature Content Using Remote URLs
20.1
Introduction to Remote URL Applications
20.2
Enabling Remote Applications Access Container Services
20.3
Whitelisting Remote URLs in Your MAF Application
20.3.1
How to Whitelist Remote URLs on the Android Platform
20.3.2
How to Whitelist Remote URLs on the iOS Platform
20.3.3
How to Whitelist Remote URLs on Universal Windows Platform
20.4
Enabling the Browser Navigation Bar on Remote URL Pages
20.4.1
How to Add the Navigation Bar to a Remote URL Application Feature
20.4.2
What Happens When You Enable the Browser Navigation Buttons for a Remote URL Application Feature
21
Enabling User Preferences
21.1
Creating User Preference Pages for a Mobile Application
21.1.1
How to Create Mobile Application-Level Preferences Pages
21.1.1.1
How to Create a New User Preference Page
21.1.1.2
What Happens When You Add a Preference Page
21.1.1.3
How to Create User Preference Lists
21.1.1.4
What Happens When You Create a Preference List
21.1.1.5
How to Create a Boolean Preference List
21.1.1.6
What Happens When You Add a Boolean Preference
21.1.1.7
How to Add a Text Preference
21.1.1.8
What Happens When You Define a Text Preference
21.1.2
What Happens When You Create an Application-Level Preference Page
21.2
Creating User Preference Pages for Application Features
21.3
Using EL Expressions to Retrieve Stored Values for User Preference Pages
21.3.1
What You May Need to Know About preferenceScope
21.3.2
Reading Preference Values in iOS Native Views
21.4
Platform-Dependent Display Differences
22
Setting Constraints on Application Features
22.1
Introduction to Constraints
22.1.1
Using Constraints to Show or Hide an Application Feature
22.1.2
Using Constraints to Deliver Specific Content Types
22.2
Defining Constraints for Application Features
22.2.1
How to Define the Constraints for an Application Feature
22.2.2
What Happens When You Define a Constraint
22.2.3
About the property Attribute
22.2.4
About User Constraints and Access Control
22.2.5
About Hardware-Related Constraints
22.2.6
Creating Dynamic Constraints on Application Features and Content
22.2.6.1
About Combining Static and EL-Defined Constraints
22.2.6.2
How to Define a Dynamic Constraint
23
Enabling and Using Notifications
23.1
Introduction to Notifications
23.2
Enabling Push Notifications
23.2.1
What You May Need to Know About the Push Notification Payload
23.3
Managing Local Notifications
23.3.1
How to Manage Local Notifications Using Java
23.3.2
How to Manage Local Notifications Using JavaScript
23.3.3
How to Manage Local Notifications Using the DeviceFeatures Data Control
23.3.4
How to Handle Local Notifications
23.3.5
What You May Need to Know About Local Notification Options and the Application Behavior
24
Caching Data in a MAF Application
24.1
Introduction to Data Caching in MAF Applications
24.2
Enable Data Caching in a MAF Application
24.3
Specifying Cached Resources and Cache Policies in the sync-config.xml File
24.4
Caching Policies Provided by MAF
24.5
Using Configuration Service End Points in the sync-config.xml File
24.6
Encrypting Cached Data in a MAF Application
24.7
Packaging the sync-config.xml File in a FAR
25
Displaying Error Messages in MAF Applications
25.1
Introduction to Error Handling in MAF Applications
25.2
Displaying Error Messages and Stopping Background Threads
25.2.1
How Applications Display Error Message for Background Thread Exceptions
25.3
Localizing Error Messages
26
Deploying MAF Applications
26.1
Introduction to Deployment of MAF Applications
26.2
Working with Deployment Profiles
26.2.1
About Automatically Generated Deployment Profiles
26.2.2
How to Create a Deployment Profile
26.2.3
What Happens When You Create a Deployment Profile
26.3
Deploying an Android Application
26.3.1
How to Create an Android Deployment Profile
26.3.1.1
Setting Preferences from the Command Line Using Startup Parameters
26.3.1.2
Setting the Options for the Application Details
26.3.1.3
Setting Deployment Options
26.3.1.4
Defining the Android Signing Options
26.3.1.5
What You May Need to Know About Credential Storage
26.3.1.6
How to Add a Custom Image to an Android Application
26.3.1.7
What Happens When JDeveloper Deploys Images for Android Applications
26.3.2
How to Deploy an Android Application to an Android Emulator
26.3.3
How to Deploy an Application to an Android-Powered Device
26.3.4
How to Publish an Android Application
26.3.5
What Happens in JDeveloper When You Create an .apk File
26.3.6
Selecting the Most Recently Used Deployment Profiles
26.3.7
What You May Need to Know About Using the Android Debug Bridge
26.4
Deploying an iOS Application
26.4.1
How to Create an iOS Deployment Profile
26.4.1.1
Defining the iOS Build Options
26.4.1.2
Setting the Device Signing Options
26.4.1.3
Adding a Custom Image to an iOS Application
26.4.1.4
What You May Need to Know About iTunes Artwork
26.4.1.5
How to Restrict the Display to a Specific Device Orientation
26.4.1.6
What Happens When You Deselect Device Orientations
26.4.2
How to Deploy an iOS Application to an iOS Simulator
26.4.3
How to Deploy an Application to an iOS-Powered Device
26.4.4
What Happens When You Deploy an Application to an iOS Device
26.4.5
What You May Need to Know About Deploying an Application to an iOS-Powered Device
26.4.5.1
Creating iOS Development Certificates
26.4.5.2
Registering an Apple Device for Testing and Debugging
26.4.5.3
Registering an Application ID
26.4.6
How to Distribute an iOS Application to the App Store
26.5
Deploying a MAF Application to the Universal Windows Platform
26.5.1
How to Deploy a MAF Application to the Universal Windows Platform
26.5.2
What Happens When You Deploy a MAF Application to the Universal Windows Platform
26.6
Deploying Feature Archive Files (FARs)
26.6.1
How to Create a Deployment Profile for a Feature Archive
26.6.2
How to Deploy the Feature Archive Deployment Profile
26.6.3
What Happens When You Deploy a Feature Archive File Deployment Profile
26.7
Creating a Mobile Application Archive File
26.7.1
How to Create a Mobile Application Archive File
26.8
Creating a New Application from an Application Archive
26.8.1
How to Create a New Application from an Application Archive
26.8.2
What Happens When You Import a MAF Application Archive File
26.9
Deploying MAF Applications from the Command Line
26.9.1
Using OJDeploy to Deploy Mobile Applications
26.10
Deploying with Oracle Mobile Security Suite
26.10.1
What Happens When You Containerize Your Application with OMSS
27
Understanding Secure Mobile Development Practices
27.1
Weak Server-Side Controls
27.2
Insecure Data Storage on the Device
27.2.1
Encrypting the SQLite Database
27.2.2
Securing the Device's Local Data Stores
27.2.3
About Security and Application Logs
27.3
Insufficient Transport Layer Protection
27.4
Side-Channel Data Leakage
27.5
Poor Authorization and Authentication
27.6
Broken Cryptography
27.7
Client-Side Injection From Cross-Site Scripting
27.7.1
Protecting MAF Applications from Injection Attacks Using Device Access Permissions
27.7.2
About Injection Attack Risks from Custom HTML Components
27.7.3
About SQL Injections and XML Injections
27.8
Security Decisions From Untrusted Inputs
27.9
Improper Session Handling
27.10
Lack of Binary Protections Resulting in Sensitive Information Disclosure
28
Securing MAF Applications
28.1
Introduction to MAF Security
28.2
About the User Login Process
28.3
Overview of the Authentication Process for MAF Applications
28.4
Overview of the Authentication Process for Containerized MAF Applications
28.5
Configuring MAF Connections
28.5.1
How to Create a MAF Login Connection
28.5.2
How to Create a Multi-Tenant Aware MAF Login Connection
28.5.3
How to Configure Basic Authentication
28.5.4
How to Configure OAuth Authentication
28.5.5
How to Configure Web SSO Authentication
28.5.6
How to Configure a Placeholder Connection for MAF Application Login
28.5.7
How to Update Connection Attributes of a Named Connection at Runtime
28.5.8
How to Store Login Credentials
28.5.9
What Happens When You Create a Connection for a MAF Application
28.5.10
What Happens When You Create a Multi-Tenant Aware Connection
28.5.11
What You May Need to Know About the Login Connection Configuration
28.5.12
What You May Need to Know About Login Connections and Containerized MAF Applications
28.5.13
What You May Need to Know About Multiple Identities for Local and Hybrid Login Connections
28.5.14
What You May Need to Know About Migrating a MAF Application and Authentication Modes
28.5.15
What You May Need to Know About Custom Headers
28.5.16
What Happens at Runtime: When MAF Calls a REST Web Service
28.5.17
What You May Need to Know About Injecting Basic Authentication Headers
28.5.18
What You May Need to Know About Web Service Security
28.5.19
How to Configure Access Control
28.5.20
What You May Need to Know About the Access Control Service
28.5.21
How to Alter the Application Loading Sequence
28.5.22
How to Configure Login Credentials Programmatically Prior to Authentication
28.6
Configuring Security for MAF Applications
28.6.1
How to Enable Application Features to Require Authentication
28.6.2
How to Designate the Login Page
28.6.3
How to Create a Custom Login HTML Page
28.6.4
What You May Need to Know About Login Pages
28.6.4.1
The Default Login Page
28.6.4.2
The Custom Login Page
28.6.5
What You May Need to Know About Login Page Elements
28.6.6
What Happens in JDeveloper When You Configure Security for Application Features
28.7
Allowing Access to Device Capabilities
28.8
Enabling Users to Log Out from Application Features
28.9
Using MAF Authentication APIs
28.10
Creating Certificates to Access Servers That Use Self-Signed Certificates for SSL
28.11
Configuring a MAF Application to Enable Two-Way SSL for Authentication
29
Testing and Debugging MAF Applications
29.1
Introduction to Testing and Debugging MAF Applications
29.2
Testing MAF Applications
29.2.1
How to Perform Accessibility Testing on iOS-Powered Devices
29.3
Configuring JDeveloper and MAF Applications to Debug Code
29.3.1
What You May Need to Know About the Debugging Configuration
29.3.1.1
Creating and Configuring a Run Configuration
29.3.2
How to Enable Debugging of Java Code and JavaScript
29.3.3
How to Debug the MAF AMX Content
29.4
Debugging MAF Applications Deployed on the Android Platform
29.4.1
How to Debug Java Code on the Android Platform
29.4.2
How to Debug UI Code on the Android Platform
29.5
Debugging MAF Applications Deployed on the iOS Platform
29.5.1
How to Debug Java Code on the iOS Platform
29.5.2
How to Debug UI Code on the iOS Platform
29.6
Debugging MAF Applications Deployed on the Universal Windows Platform
29.6.1
How to Debug Java Code on the Universal Windows Platform
29.6.1.1
How to Enable Remote Debugging of a MAF Application on the Universal Windows Platform
29.6.2
How to Debug UI Code on the Universal Windows Platform
29.7
Using and Configuring Logging in MAF Applications
29.7.1
How to Configure Logging Using the Properties File
29.7.2
How to Use JavaScript Logging
29.7.3
How to Use Embedded Logging
29.7.4
How to Use Xcode for Debugging and Logging on the iOS Platform
29.7.5
How to Access the Application Log
29.7.6
How to Disable Logging
29.8
Measuring MAF Application Performance
29.9
Sending Diagnostic Information to Oracle Mobile Cloud Service
29.10
Sending Analytics Information to Oracle Mobile Cloud Service
29.10.1
How to Configure the Transfer of Analytics to Oracle Mobile Cloud Service
29.10.2
How to Programmatically Send Analytics to Oracle Mobile Cloud Service
29.10.3
How to Send Context Events to Oracle Mobile Cloud Service
29.10.4
How to Send Analytics to Other Repositories
29.10.5
MAF Framework Events that Capture Analytics Information
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.