Go to main content
1/41
Contents
Title and Copyright Information
Preface
Audience
Documentation Accessibility
Related Documents
Conventions
What's New in This Guide for MAF
2.3.2
New and Changed Features for MAF
2.3.2
1
Introduction to Oracle Mobile Application Framework
1.1
Introduction to the 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 the MAF Development Environment
2.1.1
About the MAF Application Editor
2.1.2
About the MAF Feature Editor
2.2
Using the Oracle MAF Perspective
2.3
Creating a MAF Application
2.3.1
How to Create a MAF Application
2.3.2
What Happens When You Create an MAF Application
2.4
Defining Application Features for a MAF Application
2.4.1
How to Define an Application Feature
2.5
Adding Content to an Application Feature
2.6
Adding Application Features to a MAF Application
2.6.1
How to Add an Application Feature to a MAF Application
2.6.2
What You May Need to Know About Feature Reference IDs and Feature IDs
2.7
Creating MAF AMX Pages and MAF Task Flows
2.7.1
How to Create an MAF AMX Page
2.7.2
How to Create MAF Task Flows
2.7.3
What Happens When You Create MAF AMX Pages and Task Flows
2.8
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 MAF Application Features
4.1
Introduction to MAF Application Features
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 Your 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
What You May Need to Know About Selecting External Resources
6
Creating the Client Data Model in a MAF Application
6.1
Introduction to the Client Data Model in a MAF Application
6.2
Overview of Creating a Client Data Model in a MAF Application
6.3
Connecting to a REST Service to Create the Client Data Model
6.3.1
How to Connect to the REST Service to Retrieve Data Objects
6.3.2
What You May Need to Know About the MCS Anonymous Access Key
6.4
Discovering Candidate Data Objects for the Client Data Model
6.4.1
How to Discover Resources and Data Objects Using a REST Resource URL
6.4.2
How to Discover Data Objects Using a RAML File
6.5
Editing Data Objects for the Client Data Model
6.5.1
How to Create New Data Objects
6.5.2
How to Modify Data Object Attributes
6.6
Making Relationships Discoverable
6.6.1
Relationships Using Web Service Calls
6.6.2
Relationships in the JSON Payload
6.7
Creating the Client Data Model Artifact Profile
6.7.1
Defining CRUD REST Resources
6.7.2
How to Specify Query and Path Parameters
6.7.3
How to Add Custom Resources
6.7.4
Setting Attribute Values in the Profile
6.7.5
Setting Runtime Options for the Client Data Model
6.8
Generating the Client Data Model
6.9
Editing the Client Data Model in a MAF Application
6.10
Accessing the SQLite Database Using the MAF Client Data Model DBPersistenceManager
6.11
Defining a Custom Resource
6.12
Executing Custom Logic After CRUD REST Calls
6.13
Getting Programmatic Access to Service Objects
6.14
Understanding Usage of the Primary Key
6.15
Using Filtered Entity Lists
6.16
Using the CDM in a MAF Application
6.17
Synchronizing Offline Transactions from a MAF Application
6.17.1
How to View Pending Synchronization Actions
6.17.2
How to Add Custom Logic to Handle Failed Synchronization Actions
6.17.3
What You May Need to Know About Disabling Automatic Synchronization
6.18
Understanding the Client Data Model’s Support for Data Change Events
6.19
Forcing Offline Mode in a MAF Application
6.20
Using a Visual Indicator for Running Background Tasks
7
Localizing MAF Applications
7.1
Introduction to MAF Application Localization
7.2
Setting Resource Bundle Options for a MAF Application
7.3
Defining Text Resources in a Base Resource Bundle
7.3.1
How to Define a Text Resource in a Base Resource Bundle
7.3.2
What Happens When You Define a Text Resource in a Base Resource Bundle
7.4
Creating Locale-Specific Resource Bundles
7.4.1
How to Create a Locale-Specific Resource Bundle
7.5
Editing Resources in Resource Bundles
7.6
Localizing Image Files in a MAF Application
7.7
MAF Support of Languages
7.8
Localizable MAF Properties
8
Skinning MAF Applications
8.1
Introduction to MAF Application Skins
8.1.1
About the maf-config.xml File
8.1.2
About the maf-skins.xml File
8.2
Adding a Custom Skin to an Application
8.3
Specifying a Skin for an Application to Use
8.4
Registering a Custom Skin
8.5
Versioning MAF Skins
8.6
What Happens When You Version Skins
8.7
Overriding the Default Skin Styles
8.8
What You May Need to Know About Skinning
8.9
Adding a New Style Sheet to a Skin
8.10
Enabling End Users Change an Application's Skin at Runtime
8.11
What Happens at Runtime: How End Users Change an Application's Skin
9
Reusing the MAF Application Content
9.1
Introduction to Feature Archive Files
9.2
Using FAR Content in a MAF Application
9.3
What Happens When You Add a FAR
9.4
What You May Need to Know About Enabling the Reuse of Feature Archive Resources
10
Using Plugins in MAF Applications
10.1
Introduction to Using Plugins in MAF Applications
10.2
Enabling a Core Plugin in Your MAF Application
10.2.1
How to Enable a Core Plugin in Your MAF Application
10.2.2
What Happens When You Enable a Core Plugin in Your MAF Application
10.3
Registering Additional Plugins in Your MAF Application
10.3.1
How to Register an Additional Plugin
10.3.2
What Happens When You Register an External Plugin for Your MAF Application
10.4
Deploying Plugins with Your MAF Application
10.5
Importing Plugins from a Feature Archive File
10.6
Using a Plugin in a MAF Application
11
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.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 task-flow-definition.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.5
Adding Task Flow Return Activities
12.2.5.6
Using Task Flow Activities with Page Definition Files
12.2.6
How to Define Control Flows
12.2.6.1
Defining a Control Flow Case
12.2.6.2
Adding a Wildcard Control Flow Rule
12.2.6.3
What You May Need to Know About Control Flow Rule Metadata
12.2.6.4
What You May Need to Know About Control Flow Rule Evaluation
12.2.7
What You May Need to Know About MAF Support for Back Navigation
12.2.8
How to Enable Page Navigation by Dragging
12.2.9
How to Specify Action Outcomes Using UI Components
12.2.10
How to Create and Reference Managed Beans
12.2.11
How to Specify the Page Transition Style
12.2.12
What You May Need to Know About Bounded and Unbounded Task Flows
12.2.12.1
Unbounded Task Flows
12.2.12.2
Bounded Task Flows
12.2.12.3
Using Parameters in Task Flows
12.2.12.3.1
Passing Parameters to a Bounded Task Flow
12.2.12.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
Creating MAF AMX Pages
12.3.1.2
What Happens When You Create an MAF AMX Page
12.3.1.3
Accessing the Page Definition File
12.3.1.4
Sharing the Page Contents
12.3.2
How to Add UI Components and Data Controls to an MAF AMX Page
12.3.2.1
Adding UI Components
12.3.2.2
Adding Data Controls to the View
12.3.2.2.1
Dragging and Dropping Attributes
12.3.2.2.2
Dragging and Dropping Operations
12.3.2.2.3
Dragging and Dropping Collections
12.3.2.2.4
What You May Need to Know About Generated Bindings
12.3.2.2.5
What You May Need to Know About Generated Drag and Drop Artifacts
12.3.2.2.6
Using the MAF AMX Editor Bindings Tab
12.3.2.2.7
What You May Need to Know About Removal of Unused Bindings
12.3.2.3
What You May Need to Know About Element Identifiers and Their Audit
12.3.3
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.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 iOS Platform
13.3.8.2
Support for Checkbox Components on 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 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.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.2
Rearranging List View Items
13.3.15.3
Configuring The List View Layout
13.3.15.4
What You May Need to Know About Using a Static List View
13.3.16
How to Use the 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 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 Numerical 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 an 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 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.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 Reference Binding Containers
14.3.5
About the Categories in the Expression Builder
14.3.5.1
About the Bindings Category
14.3.5.2
About the Managed Beans Category
14.3.5.3
About the Mobile Application Framework Objects Category
14.3.6
About EL Events
14.3.7
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 OEPE
14.4.2
What Happens When You Use OEPE 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
The Data Control Manager
14.5.2.2
The Palette
14.5.3
Data Control Built-in Operations
14.5.3.1
addXXX and removeXXX Methods of Data Control
14.6
Creating Databound UI Components from the Data Controls Palette
14.6.1
How to Use the Data Controls Palette
14.6.2
What Happens When You Use the Data Controls Palette
14.7
What Happens at Runtime: How the Binding Context Works
14.8
Working with Data Control Attributes
14.8.1
Setting UI Hints on Attributes
14.9
Creating and Using Bean Data Controls
14.9.1
What You May Need to Know About Serialization of Bean Class Variables
14.10
Using the DeviceFeatures Data Control
14.10.1
How to Use the getPicture Method to Enable Taking Pictures
14.10.2
How to Use the SendSMS Method to Enable Text Messaging
14.10.3
How to Use the sendEmail Method to Enable Email
14.10.4
How to Use the createContact Method to Enable Creating Contacts
14.10.5
How to Use the findContacts Method to Enable Finding Contacts
14.10.6
How to Use the updateContact Method to Enable Updating Contacts
14.10.7
How to Use the removeContact Method to Enable Removing Contacts
14.10.8
How to Use the startLocationMonitor Method to Enable Geolocation
14.10.9
How to Use the displayFile Method to Enable Displaying Files
14.10.10
How to Use the addLocalNotification and cancelLocalNotification Methods to Manage Local Notifications
14.10.11
What You May Need to Know About Device Properties
14.11
Validating Attributes
14.11.1
What You May Need to Know About the Validator Metadata
14.12
Using Background Threads
14.13
Working with Data Change Events
15
Configuring End Points Used in MAF Applications
15.1
Introduction to Configuring End Points
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
Working with REST Services
17.1
Introduction to Working with REST Services
17.1.1
REST Client Page
17.1.2
REST API Page
17.1.3
Data Types Page
17.1.4
Artifact Profiles Page
17.1.5
Using Authentication
17.1.6
How to Open the REST Service Editor
17.1.7
How to Create a REST Service Description
17.2
Using the REST Client
17.2.1
Specifying REST Service Connections
17.2.1.1
How to Enter a Simple URI
17.2.1.2
How to Compose an Address to a REST Service
17.2.1.3
How to Include Queries in the Request
17.2.1.4
How to Include Fragments in the Request
17.2.1.5
How to Use Connection Names from the Application
17.2.1.6
How to Create Persistent Connections
17.2.1.7
Overriding OWSM Policies
17.2.1.8
How to Use Authentication
17.2.2
Sending Requests to the REST Service
17.2.3
What Happens When You Send a Request
17.2.4
Generating Response Types
17.3
Modifying the Request Content
17.3.1
How to Use REST Headers in the Request
17.3.2
How to Use Query Parameters to Configure the Response.
17.3.3
How to Send Input
17.3.4
How to Specify Output
17.4
Importing and Modeling the REST API
17.4.1
Importing REST Client Information
17.4.2
What Happens When You Import REST Client Information
17.4.3
Manually Modeling the REST API
17.4.3.1
How to Create New Requests
17.4.3.2
How to Create New Paths
17.4.4
Working with Path Variable Types
17.4.4.1
How to Edit a Path Variable Type
17.4.4.2
Path Variable Types in Artifact Generation
17.4.4.3
Path Variable Types and the REST Client
17.5
Importing and Modeling Data Types
17.5.1
How to Create Data Types
17.5.2
How to Import Data Types
17.6
Testing Modeled Requests Against the REST Service
17.7
Creating REST Service Artifacts
17.7.1
How to Generate Java Artifacts for REST Services
17.7.2
What Happens When You Generate Java Artifacts
17.7.3
About the Generated Artifacts for REST Services
17.7.3.1
Generated Data Type Artifacts
17.7.3.2
Generated REST API Artifacts
17.7.3.3
Generated Service Artifacts
17.7.4
How to Use the Generated Artifacts in Your MAF Application
17.8
Using the Connections View
17.8.1
How to Open the Connections View
17.8.2
How to Edit a Connection
17.8.3
How to Reuse a Connection
17.8.4
How to Open connections.xml
18
Working with Oracle Cloud Services
18.1
Introduction to Working with Oracle Cloud Services
18.2
Introduction to Working with MCS
18.2.1
Getting Started with MCS
18.2.1.1
Consuming MCS Services in MAF Applications
18.2.1.2
Developing Mobile Clients for MCS Mobile Services
18.2.1.3
Using Mobile Backends
18.2.1.4
What You May Need to Know About the MCS Anonymous Access Key
18.2.1.5
Importing a REST API
18.2.1.5.1
Importing a REST API from Oracle Cloud View
18.2.1.5.2
Importing a REST API Using the REST Service Editor
18.3
Enabling Mobile Applications to Access Data Hosted on Oracle Cloud
18.3.1
How to Authenticate Against Oracle Cloud
18.3.2
How to Create a Web Service Data Control to Access Oracle Java Cloud
18.3.2.1
Configuring the Policy for Web Services
18.3.3
What Happens When You Deploy a Mobile Application that Accesses Oracle Java Cloud Service
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
Using the Local Database in MAF AMX
20.1
Introduction to the Local SQLite Database Usage
20.1.1
Differences Between SQLite and Other Relational Databases
20.1.1.1
Concurrency
20.1.1.2
SQL Support and Interpretation
20.1.1.3
Data Types
20.1.1.4
Foreign Keys
20.1.1.5
Database Transactions
20.1.1.6
Authentication
20.2
Using the Local SQLite Database
20.2.1
How to Connect to the Database
20.2.2
How to Use SQL Script to Initialize the Database
20.2.3
How to Initialize the Database on a Desktop
20.2.4
What You May Need to Know About Commit Handling
20.2.5
Limitations of the MAF's SQLite JDBC Driver
20.2.6
How to Use the VACUUM Command
20.2.7
How to Encrypt and Decrypt the Database
20.2.8
What You May Need to Know About the StockTracker Sample Application
21
Implementing Application Feature Content Using Remote URLs
21.1
Introduction to Remote URL Applications
21.2
Enabling Remote Applications Access Container Services
21.3
Whitelisting Remote URLs in Your MAF Application
21.3.1
How to Whitelist Remote URLs on the Android Platform
21.3.2
How to Whitelist Remote URLs on the iOS Platform
21.3.3
How to Whitelist Remote URLs on Universal Windows Platform
21.4
Enabling the Browser Navigation Bar on Remote URL Pages
21.4.1
How to Add the Navigation Bar to a Remote URL Application Feature
21.4.2
What Happens When You Enable the Browser Navigation Buttons for a Remote URL Application Feature
22
Enabling User Preferences
22.1
Creating User Preference Pages for a Mobile Application
22.1.1
How to Create Mobile Application-Level Preferences Pages
22.1.1.1
How to Create a New User Preference Page
22.1.1.2
What Happens When You Add a Preference Page
22.1.1.3
How to Create User Preference Lists
22.1.1.4
What Happens When You Create a Preference List
22.1.1.5
How to Create a Boolean Preference List
22.1.1.6
What Happens When You Add a Boolean Preference
22.1.1.7
How to Add a Text Preference
22.1.1.8
What Happens When You Define a Text Preference
22.1.2
What Happens When You Create an Application-Level Preference Page
22.2
Creating User Preference Pages for Application Features
22.3
Using EL Expressions to Retrieve Stored Values for User Preference Pages
22.3.1
What You May Need to Know About preferenceScope
22.3.2
Reading Preference Values in iOS Native Views
22.4
Platform-Dependent Display Differences
23
Setting Constraints on Application Features
23.1
Introduction to Constraints
23.1.1
Using Constraints to Show or Hide an Application Feature
23.1.2
Using Constraints to Deliver Specific Content Types
23.2
Defining Constraints for Application Features
23.2.1
How to Define the Constraints for an Application Feature
23.2.2
What Happens When You Define a Constraint
23.2.3
About the property Attribute
23.2.4
About User Constraints and Access Control
23.2.5
About Hardware-Related Constraints
23.2.6
Creating Dynamic Constraints on Application Features and Content
23.2.6.1
About Combining Static and EL-Defined Constraints
23.2.6.2
How to Define a Dynamic Constraint
24
Using AppXray for MAF Artifacts
24.1
Introduction to Using AppXray for MAF Artifacts
24.2
Using AppXray
24.2.1
How to Open AppXaminer
24.2.1.1
About AppXaminer
24.2.2
Using AppXaminer
24.3
Refactoring with AppXray
25
Enabling and Using Notifications
25.1
Introduction to Notifications
25.2
Enabling Push Notifications
25.2.1
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
How to Handle Local Notifications
25.3.5
What You May Need to Know About Local Notification Options and the Application Behavior
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 Configurations
28.2.1
About Deployment Configurations
28.2.2
Differences Between Run Configurations and Debug Configurations
28.2.3
How to Create a Deployment Configuration
28.2.4
What Happens When You Create a Deployment Configuration
28.3
Deploying an Android Application
28.3.1
How to Create an Android Deployment Configuration
28.3.1.1
Setting Advanced Options
28.3.1.2
Setting Deployment Options
28.3.1.3
Defining the Android Signing Options
28.3.1.4
What You May Need to Know About Credential Storage
28.3.1.5
How to Add a Custom Image to an Android Application
28.3.1.6
What Happens When OEPE 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 Locally as an APK File
28.3.4
How to Deploy an Application to an Android-Powered Device
28.3.5
How to Publish an Android Application
28.3.6
What Happens in OEPE When You Create an .apk File
28.3.7
Selecting the Most Recently Used Deployment Configurations
28.3.8
Viewing the Device/Emulator Log in the Console
28.4
Deploying an iOS Application
28.4.1
How to Create an iOS Deployment Configuration
28.4.2
Setting the Device Signing Options
28.4.3
How to Restrict the Display to a Specific Device Orientation
28.4.4
What Happens When You Deselect Device Orientations
28.4.5
Using Images with iOS Applications
28.4.5.1
Overriding the Default Oracle Images in the Configuration
28.4.5.2
Replacing the Default Images
28.4.5.3
Add Custom Images
28.4.6
How to Deploy an iOS Application to an iOS Simulator
28.4.6.1
Using Quick Deploy
28.4.7
How to Deploy an Application to an iOS-Powered Device
28.4.8
What Happens When You Deploy an Application to an iOS Device
28.4.9
What You May Need to Know About Deploying an Application to an iOS-Powered Device
28.4.9.1
Creating iOS Development Certificates
28.4.9.2
Registering an Apple Device for Testing and Debugging
28.4.9.3
Registering an Application ID
28.4.10
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 Create a Deployment Configuration for Universal Windows Platform
28.5.2
Defining the Windows Platform Signing Options
28.5.3
How to Deploy a MAF Application to the Universal Windows Platform
28.5.4
What Happens When You Deploy a MAF Application to the Universal Windows Platform
28.5.5
How to Deploy an Application Locally as a Package
28.5.6
What Happens When You Deploy Locally as a Package
28.6
Deploying Feature Archive Files (FARs)
28.6.1
How to Create a Mobile Feature Archive File
28.6.2
How to Deploy the Feature Archive
28.6.3
What Happens When You Create a Feature Archive File
28.7
Creating a Mobile Application Archive File
28.7.1
How to Create a Mobile Application Archive File
28.8
Creating Unsigned Deployment Packages
28.8.1
How to Create an Unsigned Application
28.8.2
What Happens When You Import a MAF Application Archive File
28.9
Deploying with Oracle Mobile Security Suite
28.9.1
What Happens When You Containerize Your App 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 Mobile 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 Web SSO Authentication
30.5.6
How to Update Connection Attributes of a Named Connection at Runtime
30.5.7
How to Store Login Credentials
30.5.8
What Happens When You Create a Connection for a MAF Application
30.5.9
What Happens When You Create a Multi-Tenant Aware Connection
30.5.10
What You May Need to Know About the Login Connection Configuration
30.5.11
What You May Need to Know About Login Connections and Containerized MAF Applications
30.5.12
What You May Need to Know About Multiple Identities for Local and Hybrid Login Connections
30.5.13
What You May Need to Know About Migrating a MAF Application and Authentication Modes
30.5.14
What You May Need to Know About Custom Headers
30.5.15
What Happens at Runtime: When MAF Calls a REST Web Service
30.5.16
What You May Need to Know About Injecting Basic Authentication Headers
30.5.17
What You May Need to Know about Web Service Security
30.5.18
How to Configure Access Control
30.5.19
What You May Need to Know About the Access Control Service
30.5.20
How to Alter the Application Loading Sequence
30.5.21
How to Configure Login Credentials Programmatically Prior to Authentication
30.6
Configuring Security for Mobile 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 OEPE 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
Configuring a MAF Application to Enable Two-Way SSL for Authentication
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 OEPE 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 Debug Configuration
31.3.2
How to Enable Debugging of Java Code and JavaScript
31.3.2.1
What You May Need to Know About Debugging of JavaScript Using an iOS-Powered Device Simulator on iOS 6 Platform
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.1.1
Troubleshooting adb
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 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
Sending Diagnostic Information to Oracle Mobile Cloud Service
31.10
Sending Analytics Information to Oracle Mobile Cloud Service
31.10.1
How to Configure the Transfer of Analytics to Oracle Mobile Cloud Service
31.10.2
How to Programmatically Send Analytics to Oracle Mobile Cloud Service
31.10.3
How to Send Context Events to Oracle Mobile Cloud Service
31.10.4
How to Send Analytics to Other Repositories
31.10.5
MAF Framework Events that Capture Analytics Information
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
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 Assembly-Level Resources
C.3
About the Application Project Resources
C.4
About the View Project Resources
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
arrays.xml
D.2.3
Strings.xml
D.3
Converting Preferences for iOS
D.4
Converting Preferences for Windows
E
MAF Sample Applications
E.1
Overview of the MAF Sample Applications
Scripting on this page enhances content navigation, but does not change the content in any way.