Go to main content
1/39
Contents
Title and Copyright Information
Preface
Audience
Documentation Accessibility
Related Documents
Conventions
What's New in This Guide for MAF Release 2.4.1
New and Changed Features for MAF Release 2.4.1
Other Significant Changes in this Document for MAF Release 2.4.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.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
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
Restarting an Application Feature in a MAF Application
4.8.1
How to Restart an Application Feature
4.8.2
What Happens When You Restart an Application Feature
4.9
Navigating a MAF Application Using Android’s Back Button
4.9.1
How to Configure Behavior of the Android System Back Button
4.10
Creating a Sliding Window in a MAF Application
4.11
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
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
10.7
Providing Usage Descriptions for Plugins that Access Device Capabilities on iOS
10.8
Allowing Cordova Plugins to Run in the Native UI on the Windows Platform
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 Use the Action Listener
14.3.22.1
What You May Need to Know About Differences Between the Action Listener Component and Attribute
14.3.23
How to Use the Set Property Listener
14.3.24
How to Use the Client Listener
14.3.25
How to Convert Date and Time Values
14.3.25.1
What You May Need to Know About Date and Time Patterns
14.3.26
How to Convert Numeric Values
14.3.27
How to Enable Drag Navigation
14.3.27.1
What You May Need to Know About the disabled Attribute
14.3.28
How to Use the Loading Indicator
14.4
Creating Custom UI Components
14.5
Enabling Gestures
14.6
Implementing Application Shortcuts for Use on iOS Devices with 3D Touch Support
14.7
Providing Data Visualization
14.7.1
How to Create an Area Chart
14.7.2
How to Create a Bar Chart
14.7.3
How to Create a Range Chart
14.7.4
How to Create a Bubble Chart
14.7.5
How to Create a Combo Chart
14.7.6
How to Create a Line Chart
14.7.7
How to Create a Pie Chart
14.7.7.1
Configuring the Pie Chart as a Ring Chart
14.7.7.2
Styling the Pie Chart
14.7.8
How to Create a Scatter Chart
14.7.9
How to Create a Spark Chart
14.7.10
How to Create a Funnel Chart
14.7.11
How to Create a Stock Chart
14.7.12
How to Style Chart Components
14.7.13
How to Use Events with Chart Components
14.7.14
What You May Need to Know About Customization of Chart Tooltips
14.7.15
How to Enable Sorting of Charts with Categorical Axis
14.7.16
How to Define the Initial Zooming of Charts
14.7.17
How to Define Stacking of Specific Chart Series
14.7.18
How to Enable Split Dual-Y Axis in Charts
14.7.19
How to Create a LED Gauge
14.7.20
How to Create a Status Meter Gauge
14.7.21
How to Create a Dial Gauge
14.7.22
How to Create a Rating Gauge
14.7.22.1
Overwriting the shortDesc Attribute
14.7.22.2
Applying Custom Styling to the Rating Gauge Component
14.7.23
How to Define Child Elements for Chart and Gauge Components
14.7.23.1
Defining Chart Data Item
14.7.23.2
Defining and Configuring Legend
14.7.23.3
Defining and Configuring X Axis, YAxis, and Y2Axis
14.7.23.4
Defining Pie Data Item
14.7.23.5
Defining Spark Data Item
14.7.23.6
Defining Funnel Data Item
14.7.23.7
Defining Stock Data Item
14.7.23.8
Defining Threshold
14.7.24
How to Create a Geographic Map Component
14.7.24.1
Configuring Geographic Map Components With the Map Provider Information
14.7.24.2
Displaying Routes in Geographic Map Components
14.7.25
How to Create a Thematic Map Component
14.7.25.1
Defining Custom Markers
14.7.25.2
Defining Isolated Area Layers
14.7.25.3
Defining Isolated Areas
14.7.25.4
Enabling Initial Zooming
14.7.25.5
Defining a Custom Base Map
14.7.25.6
What You May Need to Know About the Marker Support for Event Listeners
14.7.25.7
Applying Custom Styling to the Thematic Map Component
14.7.26
How to Use Events with Map Components
14.7.27
How to Create a Treemap Component
14.7.27.1
Applying Custom Styling to the Treemap Component
14.7.28
How to Create a Sunburst Component
14.7.28.1
Applying Custom Styling to the Sunburst Component
14.7.29
How to Create a Timeline Component
14.7.29.1
Applying Custom Styling to the Timeline Component
14.7.30
How to Create an NBox Component
14.7.31
How to Create a Picto Chart
14.7.32
How to Define Child Elements for Map Components, Sunburst, Treemap, Timeline, Picto Chart, and NBox
14.7.33
How to Create Databound Data Visualization Components
14.7.33.1
What You May Need to Know About Setting Series Style for Databound Chart Components
14.7.34
How to Create Data Visualization Components Based on Static Data
14.7.35
How to Enable Interactivity in Chart Components
14.7.36
How to Create Polar Charts
14.8
Styling UI Components
14.8.1
How to Use Component Attributes to Define Style
14.8.2
What You May Need to Know About Skinning
14.8.3
What You May Need to Know About Using CSS ID Selectors for Skinning
14.8.4
How to Style Data Visualization Components
14.9
Understanding MAF Support for Accessibility
14.9.1
How to Configure UI and Data Visualization Components for Accessibility
14.9.1.1
Configuring the Accessibility Audit Rules
14.9.2
What You May Need to Know About the Basic WAI-ARIA Terms
14.9.3
What You May Need to Know About the Oracle Global HTML Accessibility Guidelines
14.10
Validating Input
14.11
Using Event Listeners
14.11.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
Sharing Instances of Data Controls Across Application Features
15.11.1
How to Share Instances of Data Controls Across Application Features
15.11.2
What Happens When You Share Instances of Data Controls Across Application Features
15.12
Using the DeviceFeatures Data Control
15.12.1
How to Use the getPicture Method to Enable Taking Pictures
15.12.2
How to Use the SendSMS Method to Enable Text Messaging
15.12.3
How to Use the sendEmail Method to Enable Email
15.12.4
How to Use the createContact Method to Enable Creating Contacts
15.12.5
How to Use the findContacts Method to Enable Finding Contacts
15.12.6
How to Use the updateContact Method to Enable Updating Contacts
15.12.7
How to Use the removeContact Method to Enable Removing Contacts
15.12.8
How to Use the startLocationMonitor Method to Enable Geolocation
15.12.9
How to Use the displayFile Method to Enable Displaying Files
15.12.10
How to Use the addLocalNotification and cancelLocalNotification Methods to Manage Local Notifications
15.12.11
What You May Need to Know About Device Properties
15.13
Validating Attributes
15.13.1
How to Add Validation Rules
15.13.2
What You May Need to Know About the Validator Metadata
15.14
Using Background Threads
15.15
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
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 Credential Injection
17.3.4
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
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
How to Register a Device for Push Notifications from MCS
23.2.2
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
What You May Need to Know About Local Notification Options and the Application Behavior
23.4
Determining Application State When MAF Triggers a Notification Event
24
Displaying Error Messages in MAF Applications
24.1
Introduction to Error Handling in MAF Applications
24.2
Displaying Error Messages and Stopping Background Threads
24.2.1
How Applications Display Error Message for Background Thread Exceptions
24.3
Localizing Error Messages
25
Deploying MAF Applications
25.1
Introduction to Deployment of MAF Applications
25.2
Working with Deployment Profiles
25.2.1
About Automatically Generated Deployment Profiles
25.2.2
How to Create a Deployment Profile
25.2.3
What Happens When You Create a Deployment Profile
25.3
Deploying a MAF Application to the Android Platform
25.3.1
How to Configure Gradle Proxy Settings
25.3.2
How to Sign a MAF Application that You Deploy to the Android Platform
25.3.3
What You May Need to Know About Credential Storage
25.3.4
How to Deploy a MAF Application to the Android Platform
25.3.5
What Happens When You Deploy a MAF Application to the Android Platform
25.3.6
How to Add a Custom Image to an Android Application
25.3.7
What Happens When JDeveloper Deploys Images for Android Applications
25.4
Deploying an iOS Application
25.4.1
How to Create an iOS Deployment Profile
25.4.1.1
Defining the iOS Build Options
25.4.1.2
Setting the Device Signing and Export Options
25.4.1.3
Adding a Custom Image to an iOS Application
25.4.1.4
What You May Need to Know About iTunes Artwork
25.4.1.5
How to Restrict the Display to a Specific Device Orientation
25.4.2
How to Deploy an iOS Application to an iOS Simulator
25.4.3
How to Deploy an Application to an iOS-Powered Device
25.4.4
What Happens When You Deploy an Application to an iOS Device
25.4.5
What You May Need to Know About Deploying an Application to an iOS-Powered Device
25.4.5.1
Creating iOS Development Certificates
25.4.5.2
Registering an Apple Device for Testing and Debugging
25.4.5.3
Registering an Application ID
25.4.6
How to Distribute an iOS Application to the App Store
25.5
Deploying a MAF Application to the Universal Windows Platform
25.5.1
How to Deploy a MAF Application to the Universal Windows Platform
25.5.2
What Happens When You Deploy a MAF Application to the Universal Windows Platform
25.6
Overview of MAF Quick Deployment of Applications
25.6.1
About the Artifacts That Support Quick Deployment
25.6.2
About Requirements for Quick Deployment
25.6.3
What Happens During a Quick Deployment Session
25.6.4
How to Start the Full Deployment of an Application
25.6.5
How to Force the Full Deployment of an Application
25.6.6
What You May Need to Know About Quick Deployment Limitations
25.7
Deploying Feature Archive Files (FARs)
25.7.1
How to Create a Deployment Profile for a Feature Archive
25.7.2
How to Deploy the Feature Archive Deployment Profile
25.7.3
What Happens When You Deploy a Feature Archive File Deployment Profile
25.8
Creating a Mobile Application Archive File
25.8.1
How to Create a Mobile Application Archive File
25.9
Creating a New Application from an Application Archive
25.9.1
How to Create a New Application from an Application Archive
25.9.2
What Happens When You Import a MAF Application Archive File
25.10
Deploying MAF Applications from the Command Line Using OJDeploy
26
Understanding Secure Mobile Development Practices
26.1
Weak Server-Side Controls
26.2
Insecure Data Storage on the Device
26.2.1
Encrypting the SQLite Database
26.2.2
Securing the Device's Local Data Stores
26.2.3
About Security and Application Logs
26.3
Insufficient Transport Layer Protection
26.4
Side-Channel Data Leakage
26.5
Poor Authorization and Authentication
26.6
Broken Cryptography
26.7
Client-Side Injection From Cross-Site Scripting
26.7.1
Protecting MAF Applications from Injection Attacks Using Device Access Permissions
26.7.2
About Injection Attack Risks from Custom HTML Components
26.7.3
About SQL Injections and XML Injections
26.8
Security Decisions From Untrusted Inputs
26.9
Improper Session Handling
26.10
Lack of Binary Protections Resulting in Sensitive Information Disclosure
27
Securing MAF Applications
27.1
Introduction to MAF Security
27.2
About the User Login Process
27.3
Overview of the Authentication Process for MAF Applications
27.4
Configuring MAF Connections
27.4.1
How to Create a MAF Login Connection
27.4.2
How to Create a Multi-Tenant Aware MAF Login Connection
27.4.3
How to Configure Basic Authentication
27.4.4
How to Configure OAuth Authentication
27.4.5
How to Configure Single Sign-On in a MAF Application
27.4.6
How to Configure a Placeholder Connection for MAF Application Login
27.4.7
How to Update Connection Attributes of a Named Connection at Runtime
27.4.8
How to Store Login Credentials
27.4.9
What Happens When You Create a Connection for a MAF Application
27.4.10
What Happens When You Create a Multi-Tenant Aware Connection
27.4.11
What You May Need to Know About the Login Connection Configuration
27.4.12
What You May Need to Know About Multiple Identities for Local and Hybrid Login Connections
27.4.13
What You May Need to Know About Migrating a MAF Application and Authentication Modes
27.4.14
What You May Need to Know About Custom Headers
27.4.15
What Happens at Runtime: When MAF Calls a REST Web Service
27.4.16
What You May Need to Know About Injecting Basic Authentication Headers
27.4.17
What You May Need to Know About Web Service Security
27.4.18
How to Configure Access Control
27.4.19
What You May Need to Know About the Access Control Service
27.4.20
How to Alter the Application Loading Sequence
27.4.21
How to Configure Login Credentials Programmatically Prior to Authentication
27.5
Configuring Security for MAF Applications
27.5.1
How to Enable Application Features to Require Authentication
27.5.2
How to Designate the Login Page
27.5.3
How to Create a Custom Login HTML Page
27.5.4
What You May Need to Know About Login Pages
27.5.4.1
The Default Login Page
27.5.4.2
The Custom Login Page
27.5.5
What You May Need to Know About Login Page Elements
27.5.6
What Happens in JDeveloper When You Configure Security for Application Features
27.6
Allowing Access to Device Capabilities
27.7
Enabling Users to Log Out from Application Features
27.8
Using MAF Authentication APIs
27.9
Creating Certificates to Access Servers That Use Self-Signed Certificates for SSL
27.10
Registering SSL Certificate File Extensions in a MAF Application
28
Testing and Debugging MAF Applications
28.1
Introduction to Testing and Debugging MAF Applications
28.2
Testing MAF Applications
28.2.1
How to Perform Accessibility Testing on iOS-Powered Devices
28.3
Configuring JDeveloper and MAF Applications to Debug Code
28.3.1
What You May Need to Know About the Debugging Configuration
28.3.1.1
Creating and Configuring a Run Configuration
28.3.2
How to Enable Debugging of Java Code and JavaScript
28.3.3
How to Debug the MAF AMX Content
28.4
Debugging MAF Applications Deployed on the Android Platform
28.4.1
How to Debug Java Code on the Android Platform
28.4.2
How to Debug UI Code on the Android Platform
28.5
Debugging MAF Applications Deployed on the iOS Platform
28.5.1
How to Debug Java Code on the iOS Platform
28.5.2
How to Debug UI Code on the iOS Platform
28.6
Debugging MAF Applications Deployed on the Universal Windows Platform
28.6.1
How to Debug Java Code on the Universal Windows Platform
28.6.1.1
How to Enable Remote Debugging of a MAF Application on the Universal Windows Platform
28.6.2
How to Debug UI Code on the Universal Windows Platform
28.7
Using and Configuring Logging in MAF Applications
28.7.1
How to Configure Logging Using the Properties File
28.7.2
How to Use JavaScript Logging
28.7.3
How to Use Embedded Logging
28.7.4
How to Use Xcode for Debugging and Logging on the iOS Platform
28.7.5
How to Access the Application Log
28.7.6
How to Disable Logging
28.8
Measuring MAF Application Performance
28.9
Viewing MAF Application Performance Data
28.10
Inspecting Web Service Calls in a MAF Application
29
Reusing MAF Application Content with a Feature Archive File
29.1
Introduction to Feature Archive Files
29.2
Using FAR Content in a MAF Application
29.3
What Happens When You Add a FAR as a Library
29.4
What Happens When You Add a FAR as a View Controller Project
29.5
What You May Need to Know About Enabling the Reuse of Feature Archive Resources
30
Reusing MAF Application Content with a MAF Shared Library
30.1
Introduction to Reusing MAF Application Content with a MAF Shared Library
30.2
Creating a MAF Application for Shared Library
30.2.1
How to Create a MAF Application for Shared Library
30.2.2
What Happens When You Create a MAF Application for Shared Library
30.2.3
How to Set the Shared Library Root Directory
30.2.4
How to Describe the Shared Library Content to Consumers
30.3
Adding Artifacts to a MAF Application for Shared Library
30.4
Deploying a MAF Application for Shared Library
30.4.1
How to Deploy a MAF Application for Shared Library
30.4.2
What Happens When You Deploy a MAF Application for Shared Library
30.5
Consuming a Shared Library in a MAF Application
30.5.1
How to Consume a Shared Library in a MAF Application
30.5.2
What Happens When You Consume a Shared Library in a MAF Application
30.6
Deploying a MAF Application with Duplicate Shared Library Archive File Names
30.7
Using Cordova Plugins in Shared Libraries
31
Integrating MAF Applications with EMM Solutions
31.1
Introduction to the AppConfig Community
31.2
About the MAF Approach to Enterprise Mobile Applications
31.3
Access Control for MAF Applications with EMM Solutions
31.4
How to Manage MAF Application Configurations with EMM Solutions
31.5
Managing MAF Applications with the AirWatch EMM Solution
31.6
Managing MAF Applications with the MobileIron EMM Solution
31.7
Managing MAF Applications with the Blackberry EMM Solution
31.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.