SlideShare una empresa de Scribd logo
1 de 57
Descargar para leer sin conexión
Reaching out from ADF Mobile 
ODTUG Kscope 14, Seattle, June 2014
Who Am I 
• Luc Bors 
• Principal Consultant 
• AMIS, Netherlands 
• 3 times Oracle Fusion Middleware Partner 
of the year (2011, 2013, 2014)
3 Types of Applications 
• Native Solution 
– Higher barrier to entry 
– Tight integration to device 
features 
• Browser-based Solution 
– Easiest to provide 
– Limited integration to device 
features 
• Hybrid Solution 
Image from http://wiki.developerforce.com (salesforce) 
– Combines ease of web development with the power of native 
applications 
– Good integration to device features
Oracle ADF Mobile 
• Build Once, Run on Multiple-Platforms – Phones, Tablets, iOS, Android, 
… 
• Java for business logic 
• HTML5/JavaScript user interface 
• Consistent business logic & data model 
• Disconnected: SQLite with encryption 
• Full access to native device features 
• Modular, reusable application components 
• JDeveloper and soon Eclipse
Native Mobile User Experience 
• Device native user experience 
• Spring board and tab bar for feature navigation 
• Advanced HTML5-based UI 
• Full animation, gesture, and touch interaction support 
• Interactive Data Visualization Components 
• Device Interaction using Cordova
ADF Mobile Overview
The Big Bad Mobile World
Todays Topics 
• Embedding remote content 
• Displaying remote files 
• Using GPS and Google APIs’ 
• Embedding Social Media 
• Inter App Communication 
• Notifications
Remote URLs 
• For embedding existing web pages in your ADF Mobile app. 
• For instance: 
– News Website 
– Existing enterprise app Mobile Browser Pages 
• Note: 
– Best use Optimized Mobile Browser Pages 
– Apache Trinidad components 
– Oracle recommends using ADF Mobile browser
Feature as Remote URL 
• Create New Feature as 
Remote URL 
• Create URL Connection
Disable Device Access 
• Device Access can be disabled
Browser Navigation 
• You can Enable Browser Navigation Buttons
Whitelisting 
• Why do we need to do this ? 
• Again; Why do we need to do this ?
FileContent Display 
• Integration with Device Native Viewers 
• Exposed as displayFile on DataControl 
• On Android: Use FileType to start appropriate 
viewer 
• On iOS QuickLook Preview is used
The File Processing 
• displayFile method is only able to display files that are local to the device. 
– This means that remote files first have to be downloaded. 
public void remotePreview(ActionEvent e){ 
URL remoteFileUrl; 
InputStream is; 
FileOutputStream fos; 
try{ 
// open connection to remote PDF file 
remoteFileUrl = new URL( 
"http://ilabs.uw.edu/sites/default/files/sample_0.pdf"); 
URLConnection connection = remoteFileUrl.openConnection(); 
is = connection.getInputStream(); 
// we write the file to the application directory 
File localFile = new File( 
AdfmfJavaUtilities.getDirectoryPathRoot( 
AdfmfJavaUtilities.ApplicationDirectory) + 
"/downloadedPDF.pdf"); 
fos = new FileOutputStream(localFile);
The Actual Display 
// displayFile takes a URL string which has to be encoded. 
// Call method in a utility class to do the encoding of the String 
String encodedString = MyUtils.EncodeUrlString(localFile); 
// create URL and invoke displayFile with its String representation 
URL localURL = new URL("file", "localhost", encodedString); 
DeviceManager dm = DeviceManagerFactory.getDeviceManager(); 
dm.displayFile(localURL.toString(), “Preview Header”);
Google Places
Enable API Acces 
• Enable Google Places API Access
The Places URL 
https://maps.googleapis.com/maps/api/place/nearbysearch/JSON?parameters
Parameters 
• location=52.35985,4.88510 (will be derived from the GPS location of 
your device) 
• radius=1000 
• types 
– food 
– leisure (this is actually a set of types that can be combined by using a pipe symbol) 
• museum 
• art_gallery 
• zoo 
• movie_theater 
• sensor=false 
• key=<your google API key> 
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=5 
2.35985,4.88510&radius=1000&types=art_gallery&sensor=false&key=<you 
r google API key>
Result 
"results" : [ 
{ 
"geometry" : { 
"location" : { 
"lat" : 52.363850, 
"lng" : 4.880790 
} 
}, 
"icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/cafe-71.png", 
"id" : "7e7aa85e3e8fb7436bf77647cecbc6ce80db0b4a”, 
"name" : "American Hotel", 
"rating" : 3.60, 
"types" : [ "cafe", "lodging", "food", "establishment" ], 
"vicinity" : "Leidsekade 97, Amsterdam” 
}, 
… next results……
Two important classes 
• To handle a JSON response you need two classes 
– RestServiceAdapter 
– JSONBeanSerializationHelper 
• In this Example these are used in one method that does the search and 
processes the result 
public void searchAction(String mapType) { 
…. 
…
Connection 
• RestServiceAdapter interface in your ADF Mobile application, it needs a 
valid connection to the URL where the service is hosted. Make sure that 
there is a valid connection in the connections.xml or simply create a new 
connection.
RestServiceAdapter 
RestServiceAdapter restServiceAdapter =Model.createRestServiceAdapter(); 
// Clear previously request properties 
restServiceAdapter.clearRequestProperties(); 
// Set the connection 
restServiceAdapter.setConnectionName("GooglePlacesUrlConn"); 
// Specify the type 
restServiceAdapter.setRequestType(RestServiceAdapter.REQUEST_TYPE_GET); 
restServiceAdapter.addRequestProperty("Content-Type”,"application/json"); 
restServiceAdapter.addRequestProperty("Accept”,"application/json; charset=UTF-8"); 
// Specify the number of retries 
restServiceAdapter.setRetryLimit(0); 
// Set the URI 
restServiceAdapter.setRequestURI("?location=52.35985,4.88510&radius=1000&types=" + 
mapType + "&sensor=false&key=<yourKey>"); 
String response = "error"; 
try { 
response = restServiceAdapter.send("");
JSONBeanSerializationHelper 
• For JSON deserialization 
JSONBeanSerializationHelper jsonHelper = 
new JSONBeanSerializationHelper(); 
try { 
response = restServiceAdapter.send(""); 
ServiceResult responseObject = 
(ServiceResult)jsonHelper.fromJSON(ServiceResult.class, response); 
if ( "OK".equalsIgnoreCase( responseObject.getStatus()) ) { 
placesResult = 
PlacesHelper.transformObject(responseObject).getResults(); 
} 
this.result = responseObject.getStatus(); 
} catch (Exception e) { 
e.printStackTrace(); 
this.result = "error"; 
}
Search and Result 
public class PlacesResult { 
private String vicinity; 
private Double rating; 
private String name; 
private String types; 
private String icon; 
private PlacesGeometry geometry;
The ADF DVT Map Component 
<dvtm:geographicMap id="map1" zoomLevel="4" centerX="52.37323" centerY="4.89166"> 
<dvtm:pointDataLayer value="#{bindings.placesResults.collectionModel}" 
id="pdl2" var="row"> 
<dvtm:pointLocation id="ptl1" type="address" 
pointName="#{row.name}" address="#{row.vicinity}"> 
<dvtm:marker id="mrk1" source="#{row.icon}"/> 
</dvtm:pointLocation> 
</dvtm:pointDataLayer> 
</dvtm:geographicMap>
Embedding Twitter 
• Two options: 
– Exactly like the previous sample using the Twitter REST API v1.1 
https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=<name> 
– Using twitter Widgets (only on Android)
Twitter Widgets
The code for the Widget 
<a class="twitter-timeline” 
href="https://twitter.com/TamcappConf" 
data-widget-id="yourData-Widget-Id"> Tweets by @TamcappConf</a> 
<script type="text/javascript"> 
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/ 
^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d 
.createElement(s);js.id=id;js.src=p+"http://platform.twitter.com/widge 
ts.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitt 
er-wjs"); 
</script>
Whitelisting
Layout Components
Using Layout Components
Gesture Support 
• You can configure Button, Link, and List Item components to react to the 
following gestures: 
• Swipe to the right 
• Swipe to the left 
• Swipe up 
• Swipe down 
• Tap-and-hold
Use case example
Inter App Communication 
• Communicate between apps using URL Scheme 
– Call One ADF Mobile app from other ADF Mobile App 
– Call Skype from within ADF Mobile App 
– Call Barcode Scanner App form ADF Mobile App 
– Call any App from ADF Mobile App
Barcode Scanning
URL Scheme 
•
URL Scheme Listener 
public class UrlSchemeCalledListener implements EventListener { 
public UrlSchemeCalledListener() { 
super(); 
} 
public void onMessage(Event event){ 
} 
public void onError(AdfException adfException){ 
} 
public void onOpen(String string){ 
} 
}
URL Scheme Listener 
public void start(){ 
EventSource openUrl = EventSourceFactory.getEventSource( 
EventSourceFactory.OPEN_URL_EVENT_SOURCE_NAME); 
openUrl.addListener(new UrlSchemeCalledListener());
Interact with other App 
<amx:goLink url="zxing://scan/?ret=tamcapp://scan?scannedCode={CODE}" 
id="gl2"> 
<amx:image inlineStyle="height:102px;width:102px;margin-top:4px" 
source="/images/Barcode.png"/> 
</amx:goLink>
Work with the response 
public void onMessage(Event event){ 
AdfELContext elctx = AdfmfJavaUtilities.getAdfELContext(); 
String url = event.getPayload(); 
// Isolate the action. We do this because if there are more URL-Scheme 
// callbacks, we are able to respond to this in this one single method 
String action = url.substring(url.indexOf("//") + 2, url.indexOf("?")); 
if (action.equalsIgnoreCase("scan")) { 
String codeScanned = 
url.substring(url.indexOf("?scannedCode=")+ 13, url.length()); 
ValueExpression val2 = AdfmfJavaUtilities.getValueExpression( 
"#{applicationScope.scannedCode}", Object.class); 
try{ 
val2.setValue(elctx, codeScanned); 
} 
catch {………..} 
AdfmfContainerUtilities.gotoFeature("com.blogspot.lucbors.scan.Scanner"); 
} 
}
Demo
Push Notifications
Push Notifications 
•
Push Notifications 
• Subscribe to Messaging Service 
• Receive token 
• Register with Enterprise app 
• Enterprise app Pushes message 
to Messaging Service 
• Messaging Service delegates 
message to device(s)
Push Notification
Start GCM 
• ApplicationLifeCycleListener 
– Start() 
– getNotificationStyle() 
– getSourceAuthorizationId() 
public void start() { 
// Add code here... 
EventSource evtSource = 
EventSourceFactory.getEventSource( 
NativePushNotificationEventSource. 
NATIVE_PUSH_NOTIFICATION_REMOTE_EVENT_SOURCE_NAME); 
evtSource.addListener(new PushNotificationListener()); 
} 
public long getNotificationStyle() { 
return PushNotificationConfig.NOTIFICATION_STYLE_ALERT | 
PushNotificationConfig.NOTIFICATION_STYLE_BADGE | 
PushNotificationConfig.NOTIFICATION_STYLE_BADGE;}
Open the application 
• PushNotificationListener 
– OnMessage 
– OnError 
– OnOpen 
public void onOpen(String token) { 
// Invoked during the Push Notification registration process. 
// The parameter "token" contains the token received from APNs or GCMs 
// that uniquely identifies a specific device-application combination. 
ValueExpression ve = AdfmfJavaUtilities.getValueExpression( 
"#{applicationScope.deviceToken}", String.class); 
if (token != null){ 
ve.setValue(AdfmfJavaUtilities.getAdfELContext(), token); 
} 
else{ 
ve.setValue(AdfmfJavaUtilities.getAdfELContext(), "dummy Token"); 
} 
}
Example 
• Select device 
• Send message • Get notified
GCM Demo
Summary 
• Remote URL 
– Simple for (re-) using existing mobile websites 
• Display File 
– To download files and display them in the App in the device native viewer. 
• REST Services (such as Google Places) 
– Embed external data into your ADF Mobile APP 
• Twitter via Local HTML 
– To use twitter timeline via Twitter Widgets 
• URL Scheme 
– For inter app communication 
• Push Notifications 
– Rather complex setup but after that very powerful 
– Keep in mind that there is no guaranteed delivery
Luc Bors, AMIS, The Netherlands 
Luc.Bors@amis.nl 
LucBors@gmail.com 
Follow me on : @lucb_

Más contenido relacionado

La actualidad más candente

User interface customization for aem6 circuit
User interface customization for aem6 circuitUser interface customization for aem6 circuit
User interface customization for aem6 circuitDamien Antipa
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for JavaLars Vogel
 
Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0Diego Zuluaga
 
2011 a grape odyssey
2011   a grape odyssey2011   a grape odyssey
2011 a grape odysseyMike Hagedorn
 
User Interface customization for AEM 6
User Interface customization for AEM 6User Interface customization for AEM 6
User Interface customization for AEM 6Damien Antipa
 
Extending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScriptExtending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScriptRoy Clarkson
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsStefano Celentano
 
AEM 6.1 User Interface Customization
AEM 6.1 User Interface CustomizationAEM 6.1 User Interface Customization
AEM 6.1 User Interface CustomizationChristian Meyer
 
Mobile Web Development with HTML5
Mobile Web Development with HTML5Mobile Web Development with HTML5
Mobile Web Development with HTML5Roy Clarkson
 
UI Customization in AEM 6.0
UI Customization in AEM 6.0UI Customization in AEM 6.0
UI Customization in AEM 6.0Gilles Knobloch
 
iOS Media APIs (MobiDevDay Detroit, May 2013)
iOS Media APIs (MobiDevDay Detroit, May 2013)iOS Media APIs (MobiDevDay Detroit, May 2013)
iOS Media APIs (MobiDevDay Detroit, May 2013)Chris Adamson
 
Academy PRO: HTML5 API multimedia
Academy PRO: HTML5 API multimediaAcademy PRO: HTML5 API multimedia
Academy PRO: HTML5 API multimediaBinary Studio
 
Android pro tips trilogy
Android  pro tips trilogyAndroid  pro tips trilogy
Android pro tips trilogyVitali Pekelis
 
AEM 6.0 Touch-optimized UI
AEM 6.0 Touch-optimized UIAEM 6.0 Touch-optimized UI
AEM 6.0 Touch-optimized UIGilles Knobloch
 
CIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM SitesCIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM SitesICF CIRCUIT
 
Get On The Audiobus (CocoaConf Atlanta, November 2013)
Get On The Audiobus (CocoaConf Atlanta, November 2013)Get On The Audiobus (CocoaConf Atlanta, November 2013)
Get On The Audiobus (CocoaConf Atlanta, November 2013)Chris Adamson
 
Introduction to Apache Roller
Introduction to Apache RollerIntroduction to Apache Roller
Introduction to Apache RollerMatt Raible
 
[2015/2016] Apache Cordova
[2015/2016] Apache Cordova[2015/2016] Apache Cordova
[2015/2016] Apache CordovaIvano Malavolta
 
Get On The Audiobus (CocoaConf Boston, October 2013)
Get On The Audiobus (CocoaConf Boston, October 2013)Get On The Audiobus (CocoaConf Boston, October 2013)
Get On The Audiobus (CocoaConf Boston, October 2013)Chris Adamson
 

La actualidad más candente (20)

User interface customization for aem6 circuit
User interface customization for aem6 circuitUser interface customization for aem6 circuit
User interface customization for aem6 circuit
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0
 
2011 a grape odyssey
2011   a grape odyssey2011   a grape odyssey
2011 a grape odyssey
 
User Interface customization for AEM 6
User Interface customization for AEM 6User Interface customization for AEM 6
User Interface customization for AEM 6
 
Extending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScriptExtending Spring MVC with Spring Mobile and JavaScript
Extending Spring MVC with Spring Mobile and JavaScript
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling Models
 
AEM 6.1 User Interface Customization
AEM 6.1 User Interface CustomizationAEM 6.1 User Interface Customization
AEM 6.1 User Interface Customization
 
Mobile Web Development with HTML5
Mobile Web Development with HTML5Mobile Web Development with HTML5
Mobile Web Development with HTML5
 
UI Customization in AEM 6.0
UI Customization in AEM 6.0UI Customization in AEM 6.0
UI Customization in AEM 6.0
 
iOS Media APIs (MobiDevDay Detroit, May 2013)
iOS Media APIs (MobiDevDay Detroit, May 2013)iOS Media APIs (MobiDevDay Detroit, May 2013)
iOS Media APIs (MobiDevDay Detroit, May 2013)
 
Academy PRO: HTML5 API multimedia
Academy PRO: HTML5 API multimediaAcademy PRO: HTML5 API multimedia
Academy PRO: HTML5 API multimedia
 
Apache Cordova 4.x
Apache Cordova 4.xApache Cordova 4.x
Apache Cordova 4.x
 
Android pro tips trilogy
Android  pro tips trilogyAndroid  pro tips trilogy
Android pro tips trilogy
 
AEM 6.0 Touch-optimized UI
AEM 6.0 Touch-optimized UIAEM 6.0 Touch-optimized UI
AEM 6.0 Touch-optimized UI
 
CIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM SitesCIRCUIT 2015 - Content API's For AEM Sites
CIRCUIT 2015 - Content API's For AEM Sites
 
Get On The Audiobus (CocoaConf Atlanta, November 2013)
Get On The Audiobus (CocoaConf Atlanta, November 2013)Get On The Audiobus (CocoaConf Atlanta, November 2013)
Get On The Audiobus (CocoaConf Atlanta, November 2013)
 
Introduction to Apache Roller
Introduction to Apache RollerIntroduction to Apache Roller
Introduction to Apache Roller
 
[2015/2016] Apache Cordova
[2015/2016] Apache Cordova[2015/2016] Apache Cordova
[2015/2016] Apache Cordova
 
Get On The Audiobus (CocoaConf Boston, October 2013)
Get On The Audiobus (CocoaConf Boston, October 2013)Get On The Audiobus (CocoaConf Boston, October 2013)
Get On The Audiobus (CocoaConf Boston, October 2013)
 

Similar a Reaching out from ADF Mobile (ODTUG KScope 2014)

Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)ejlp12
 
Getting Started with DrupalGap
Getting Started with DrupalGapGetting Started with DrupalGap
Getting Started with DrupalGapAlex S
 
uMobile Preconference Seminar
uMobile Preconference SeminaruMobile Preconference Seminar
uMobile Preconference SeminarJennifer Bourey
 
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W... 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...Robert Nyman
 
Meteor Meet-up San Diego December 2014
Meteor Meet-up San Diego December 2014Meteor Meet-up San Diego December 2014
Meteor Meet-up San Diego December 2014Lou Sacco
 
Building Web Apps with Express
Building Web Apps with ExpressBuilding Web Apps with Express
Building Web Apps with ExpressAaron Stannard
 
Made for Mobile - Let Office 365 Power Your Mobile Apps
Made for Mobile - Let Office 365 Power Your Mobile AppsMade for Mobile - Let Office 365 Power Your Mobile Apps
Made for Mobile - Let Office 365 Power Your Mobile AppsSPC Adriatics
 
Ember.js - A JavaScript framework for creating ambitious web applications
Ember.js - A JavaScript framework for creating ambitious web applications  Ember.js - A JavaScript framework for creating ambitious web applications
Ember.js - A JavaScript framework for creating ambitious web applications Juliana Lucena
 
Playing with parse.com
Playing with parse.comPlaying with parse.com
Playing with parse.comJUG Genova
 
Building mobile applications with DrupalGap
Building mobile applications with DrupalGapBuilding mobile applications with DrupalGap
Building mobile applications with DrupalGapAlex S
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Atlassian
 
amis-adf-enterprise-mobility
amis-adf-enterprise-mobilityamis-adf-enterprise-mobility
amis-adf-enterprise-mobilityLuc Bors
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on MobileAdam Lu
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - MozillaRobert Nyman
 
Android Workshop
Android WorkshopAndroid Workshop
Android WorkshopJunda Ong
 
Building Android apps with Parse
Building Android apps with ParseBuilding Android apps with Parse
Building Android apps with ParseDroidConTLV
 
TechTalk: Everything You Need to Know about Appium & Selenium
TechTalk: Everything You Need to Know about Appium & SeleniumTechTalk: Everything You Need to Know about Appium & Selenium
TechTalk: Everything You Need to Know about Appium & SeleniumLizzy Guido (she/her)
 
Everything You Need To Know about Appium and Selenium
Everything You Need To Know about Appium and SeleniumEverything You Need To Know about Appium and Selenium
Everything You Need To Know about Appium and SeleniumLizzy Guido (she/her)
 

Similar a Reaching out from ADF Mobile (ODTUG KScope 2014) (20)

Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)
 
Getting Started with DrupalGap
Getting Started with DrupalGapGetting Started with DrupalGap
Getting Started with DrupalGap
 
uMobile Preconference Seminar
uMobile Preconference SeminaruMobile Preconference Seminar
uMobile Preconference Seminar
 
Node.js and Parse
Node.js and ParseNode.js and Parse
Node.js and Parse
 
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W... 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 
uMobile Development Strategies
uMobile Development StrategiesuMobile Development Strategies
uMobile Development Strategies
 
Meteor Meet-up San Diego December 2014
Meteor Meet-up San Diego December 2014Meteor Meet-up San Diego December 2014
Meteor Meet-up San Diego December 2014
 
Building Web Apps with Express
Building Web Apps with ExpressBuilding Web Apps with Express
Building Web Apps with Express
 
Made for Mobile - Let Office 365 Power Your Mobile Apps
Made for Mobile - Let Office 365 Power Your Mobile AppsMade for Mobile - Let Office 365 Power Your Mobile Apps
Made for Mobile - Let Office 365 Power Your Mobile Apps
 
Ember.js - A JavaScript framework for creating ambitious web applications
Ember.js - A JavaScript framework for creating ambitious web applications  Ember.js - A JavaScript framework for creating ambitious web applications
Ember.js - A JavaScript framework for creating ambitious web applications
 
Playing with parse.com
Playing with parse.comPlaying with parse.com
Playing with parse.com
 
Building mobile applications with DrupalGap
Building mobile applications with DrupalGapBuilding mobile applications with DrupalGap
Building mobile applications with DrupalGap
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
 
amis-adf-enterprise-mobility
amis-adf-enterprise-mobilityamis-adf-enterprise-mobility
amis-adf-enterprise-mobility
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on Mobile
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - Mozilla
 
Android Workshop
Android WorkshopAndroid Workshop
Android Workshop
 
Building Android apps with Parse
Building Android apps with ParseBuilding Android apps with Parse
Building Android apps with Parse
 
TechTalk: Everything You Need to Know about Appium & Selenium
TechTalk: Everything You Need to Know about Appium & SeleniumTechTalk: Everything You Need to Know about Appium & Selenium
TechTalk: Everything You Need to Know about Appium & Selenium
 
Everything You Need To Know about Appium and Selenium
Everything You Need To Know about Appium and SeleniumEverything You Need To Know about Appium and Selenium
Everything You Need To Know about Appium and Selenium
 

Más de Luc Bors

Talk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotTalk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotLuc Bors
 
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development KitExtending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development KitLuc Bors
 
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud ServiceNO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud ServiceLuc Bors
 
OgH Data Visualization Special Part III
OgH Data Visualization Special Part IIIOgH Data Visualization Special Part III
OgH Data Visualization Special Part IIILuc Bors
 
OgH Data Visualization Special Part II
OgH Data Visualization Special Part IIOgH Data Visualization Special Part II
OgH Data Visualization Special Part IILuc Bors
 
OgH Data Visualization Special Part I
OgH Data Visualization Special Part IOgH Data Visualization Special Part I
OgH Data Visualization Special Part ILuc Bors
 
MAF push notifications
MAF push notificationsMAF push notifications
MAF push notificationsLuc Bors
 
Doag wysiwyg
Doag wysiwygDoag wysiwyg
Doag wysiwygLuc Bors
 
Oracle day 2014-mobile-customer-case
Oracle day 2014-mobile-customer-caseOracle day 2014-mobile-customer-case
Oracle day 2014-mobile-customer-caseLuc Bors
 
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...Luc Bors
 
oow2013-adf-mo-bi-le
oow2013-adf-mo-bi-leoow2013-adf-mo-bi-le
oow2013-adf-mo-bi-leLuc Bors
 
Goodbye Nightmare : Tops and Tricks for creating Layouts
Goodbye Nightmare : Tops and Tricks for creating LayoutsGoodbye Nightmare : Tops and Tricks for creating Layouts
Goodbye Nightmare : Tops and Tricks for creating LayoutsLuc Bors
 
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADF
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADFDont Reinvent the Wheel: Tips and Tricks for reuse in ADF
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADFLuc Bors
 
ADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
ADF Mobile : Best Practices for Developing Applications with Oracle ADF MobileADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
ADF Mobile : Best Practices for Developing Applications with Oracle ADF MobileLuc Bors
 
Oracle ADF Mobile OGh (Oracle User Group Netherlands)
Oracle ADF Mobile OGh (Oracle User Group Netherlands)Oracle ADF Mobile OGh (Oracle User Group Netherlands)
Oracle ADF Mobile OGh (Oracle User Group Netherlands)Luc Bors
 
Real life forms to adf
Real life forms to adfReal life forms to adf
Real life forms to adfLuc Bors
 
ADF Mobile - an intro for Developers
ADF Mobile - an intro for DevelopersADF Mobile - an intro for Developers
ADF Mobile - an intro for DevelopersLuc Bors
 
How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF Luc Bors
 
An ADF Special Report
An ADF Special Report An ADF Special Report
An ADF Special Report Luc Bors
 
...and thus your forms automagically disappeared
...and thus your forms automagically disappeared...and thus your forms automagically disappeared
...and thus your forms automagically disappearedLuc Bors
 

Más de Luc Bors (20)

Talk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular ChatbotTalk to me Goose: Going beyond your regular Chatbot
Talk to me Goose: Going beyond your regular Chatbot
 
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development KitExtending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
Extending Oracle SaaS Using Oracle Cloud UX Rapid Development Kit
 
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud ServiceNO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
NO CODE : Or How to Extend Oracle SaaS with Oracle Visual Builder Cloud Service
 
OgH Data Visualization Special Part III
OgH Data Visualization Special Part IIIOgH Data Visualization Special Part III
OgH Data Visualization Special Part III
 
OgH Data Visualization Special Part II
OgH Data Visualization Special Part IIOgH Data Visualization Special Part II
OgH Data Visualization Special Part II
 
OgH Data Visualization Special Part I
OgH Data Visualization Special Part IOgH Data Visualization Special Part I
OgH Data Visualization Special Part I
 
MAF push notifications
MAF push notificationsMAF push notifications
MAF push notifications
 
Doag wysiwyg
Doag wysiwygDoag wysiwyg
Doag wysiwyg
 
Oracle day 2014-mobile-customer-case
Oracle day 2014-mobile-customer-caseOracle day 2014-mobile-customer-case
Oracle day 2014-mobile-customer-case
 
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
AMIS UX Event 2014: Mobile ADF; From Design To Device; The Tools that make it...
 
oow2013-adf-mo-bi-le
oow2013-adf-mo-bi-leoow2013-adf-mo-bi-le
oow2013-adf-mo-bi-le
 
Goodbye Nightmare : Tops and Tricks for creating Layouts
Goodbye Nightmare : Tops and Tricks for creating LayoutsGoodbye Nightmare : Tops and Tricks for creating Layouts
Goodbye Nightmare : Tops and Tricks for creating Layouts
 
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADF
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADFDont Reinvent the Wheel: Tips and Tricks for reuse in ADF
Dont Reinvent the Wheel: Tips and Tricks for reuse in ADF
 
ADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
ADF Mobile : Best Practices for Developing Applications with Oracle ADF MobileADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
ADF Mobile : Best Practices for Developing Applications with Oracle ADF Mobile
 
Oracle ADF Mobile OGh (Oracle User Group Netherlands)
Oracle ADF Mobile OGh (Oracle User Group Netherlands)Oracle ADF Mobile OGh (Oracle User Group Netherlands)
Oracle ADF Mobile OGh (Oracle User Group Netherlands)
 
Real life forms to adf
Real life forms to adfReal life forms to adf
Real life forms to adf
 
ADF Mobile - an intro for Developers
ADF Mobile - an intro for DevelopersADF Mobile - an intro for Developers
ADF Mobile - an intro for Developers
 
How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF How to Bring Common UI Patterns to ADF
How to Bring Common UI Patterns to ADF
 
An ADF Special Report
An ADF Special Report An ADF Special Report
An ADF Special Report
 
...and thus your forms automagically disappeared
...and thus your forms automagically disappeared...and thus your forms automagically disappeared
...and thus your forms automagically disappeared
 

Último

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in sowetomasabamasaba
 

Último (20)

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 

Reaching out from ADF Mobile (ODTUG KScope 2014)

  • 1. Reaching out from ADF Mobile ODTUG Kscope 14, Seattle, June 2014
  • 2. Who Am I • Luc Bors • Principal Consultant • AMIS, Netherlands • 3 times Oracle Fusion Middleware Partner of the year (2011, 2013, 2014)
  • 3. 3 Types of Applications • Native Solution – Higher barrier to entry – Tight integration to device features • Browser-based Solution – Easiest to provide – Limited integration to device features • Hybrid Solution Image from http://wiki.developerforce.com (salesforce) – Combines ease of web development with the power of native applications – Good integration to device features
  • 4. Oracle ADF Mobile • Build Once, Run on Multiple-Platforms – Phones, Tablets, iOS, Android, … • Java for business logic • HTML5/JavaScript user interface • Consistent business logic & data model • Disconnected: SQLite with encryption • Full access to native device features • Modular, reusable application components • JDeveloper and soon Eclipse
  • 5. Native Mobile User Experience • Device native user experience • Spring board and tab bar for feature navigation • Advanced HTML5-based UI • Full animation, gesture, and touch interaction support • Interactive Data Visualization Components • Device Interaction using Cordova
  • 7. The Big Bad Mobile World
  • 8. Todays Topics • Embedding remote content • Displaying remote files • Using GPS and Google APIs’ • Embedding Social Media • Inter App Communication • Notifications
  • 9. Remote URLs • For embedding existing web pages in your ADF Mobile app. • For instance: – News Website – Existing enterprise app Mobile Browser Pages • Note: – Best use Optimized Mobile Browser Pages – Apache Trinidad components – Oracle recommends using ADF Mobile browser
  • 10. Feature as Remote URL • Create New Feature as Remote URL • Create URL Connection
  • 11. Disable Device Access • Device Access can be disabled
  • 12. Browser Navigation • You can Enable Browser Navigation Buttons
  • 13. Whitelisting • Why do we need to do this ? • Again; Why do we need to do this ?
  • 14.
  • 15. FileContent Display • Integration with Device Native Viewers • Exposed as displayFile on DataControl • On Android: Use FileType to start appropriate viewer • On iOS QuickLook Preview is used
  • 16. The File Processing • displayFile method is only able to display files that are local to the device. – This means that remote files first have to be downloaded. public void remotePreview(ActionEvent e){ URL remoteFileUrl; InputStream is; FileOutputStream fos; try{ // open connection to remote PDF file remoteFileUrl = new URL( "http://ilabs.uw.edu/sites/default/files/sample_0.pdf"); URLConnection connection = remoteFileUrl.openConnection(); is = connection.getInputStream(); // we write the file to the application directory File localFile = new File( AdfmfJavaUtilities.getDirectoryPathRoot( AdfmfJavaUtilities.ApplicationDirectory) + "/downloadedPDF.pdf"); fos = new FileOutputStream(localFile);
  • 17. The Actual Display // displayFile takes a URL string which has to be encoded. // Call method in a utility class to do the encoding of the String String encodedString = MyUtils.EncodeUrlString(localFile); // create URL and invoke displayFile with its String representation URL localURL = new URL("file", "localhost", encodedString); DeviceManager dm = DeviceManagerFactory.getDeviceManager(); dm.displayFile(localURL.toString(), “Preview Header”);
  • 18.
  • 20. Enable API Acces • Enable Google Places API Access
  • 21. The Places URL https://maps.googleapis.com/maps/api/place/nearbysearch/JSON?parameters
  • 22. Parameters • location=52.35985,4.88510 (will be derived from the GPS location of your device) • radius=1000 • types – food – leisure (this is actually a set of types that can be combined by using a pipe symbol) • museum • art_gallery • zoo • movie_theater • sensor=false • key=<your google API key> https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=5 2.35985,4.88510&radius=1000&types=art_gallery&sensor=false&key=<you r google API key>
  • 23. Result "results" : [ { "geometry" : { "location" : { "lat" : 52.363850, "lng" : 4.880790 } }, "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/cafe-71.png", "id" : "7e7aa85e3e8fb7436bf77647cecbc6ce80db0b4a”, "name" : "American Hotel", "rating" : 3.60, "types" : [ "cafe", "lodging", "food", "establishment" ], "vicinity" : "Leidsekade 97, Amsterdam” }, … next results……
  • 24. Two important classes • To handle a JSON response you need two classes – RestServiceAdapter – JSONBeanSerializationHelper • In this Example these are used in one method that does the search and processes the result public void searchAction(String mapType) { …. …
  • 25. Connection • RestServiceAdapter interface in your ADF Mobile application, it needs a valid connection to the URL where the service is hosted. Make sure that there is a valid connection in the connections.xml or simply create a new connection.
  • 26. RestServiceAdapter RestServiceAdapter restServiceAdapter =Model.createRestServiceAdapter(); // Clear previously request properties restServiceAdapter.clearRequestProperties(); // Set the connection restServiceAdapter.setConnectionName("GooglePlacesUrlConn"); // Specify the type restServiceAdapter.setRequestType(RestServiceAdapter.REQUEST_TYPE_GET); restServiceAdapter.addRequestProperty("Content-Type”,"application/json"); restServiceAdapter.addRequestProperty("Accept”,"application/json; charset=UTF-8"); // Specify the number of retries restServiceAdapter.setRetryLimit(0); // Set the URI restServiceAdapter.setRequestURI("?location=52.35985,4.88510&radius=1000&types=" + mapType + "&sensor=false&key=<yourKey>"); String response = "error"; try { response = restServiceAdapter.send("");
  • 27. JSONBeanSerializationHelper • For JSON deserialization JSONBeanSerializationHelper jsonHelper = new JSONBeanSerializationHelper(); try { response = restServiceAdapter.send(""); ServiceResult responseObject = (ServiceResult)jsonHelper.fromJSON(ServiceResult.class, response); if ( "OK".equalsIgnoreCase( responseObject.getStatus()) ) { placesResult = PlacesHelper.transformObject(responseObject).getResults(); } this.result = responseObject.getStatus(); } catch (Exception e) { e.printStackTrace(); this.result = "error"; }
  • 28. Search and Result public class PlacesResult { private String vicinity; private Double rating; private String name; private String types; private String icon; private PlacesGeometry geometry;
  • 29. The ADF DVT Map Component <dvtm:geographicMap id="map1" zoomLevel="4" centerX="52.37323" centerY="4.89166"> <dvtm:pointDataLayer value="#{bindings.placesResults.collectionModel}" id="pdl2" var="row"> <dvtm:pointLocation id="ptl1" type="address" pointName="#{row.name}" address="#{row.vicinity}"> <dvtm:marker id="mrk1" source="#{row.icon}"/> </dvtm:pointLocation> </dvtm:pointDataLayer> </dvtm:geographicMap>
  • 30.
  • 31. Embedding Twitter • Two options: – Exactly like the previous sample using the Twitter REST API v1.1 https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=<name> – Using twitter Widgets (only on Android)
  • 33. The code for the Widget <a class="twitter-timeline” href="https://twitter.com/TamcappConf" data-widget-id="yourData-Widget-Id"> Tweets by @TamcappConf</a> <script type="text/javascript"> !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/ ^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d .createElement(s);js.id=id;js.src=p+"http://platform.twitter.com/widge ts.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitt er-wjs"); </script>
  • 35.
  • 38. Gesture Support • You can configure Button, Link, and List Item components to react to the following gestures: • Swipe to the right • Swipe to the left • Swipe up • Swipe down • Tap-and-hold
  • 40. Inter App Communication • Communicate between apps using URL Scheme – Call One ADF Mobile app from other ADF Mobile App – Call Skype from within ADF Mobile App – Call Barcode Scanner App form ADF Mobile App – Call any App from ADF Mobile App
  • 43. URL Scheme Listener public class UrlSchemeCalledListener implements EventListener { public UrlSchemeCalledListener() { super(); } public void onMessage(Event event){ } public void onError(AdfException adfException){ } public void onOpen(String string){ } }
  • 44. URL Scheme Listener public void start(){ EventSource openUrl = EventSourceFactory.getEventSource( EventSourceFactory.OPEN_URL_EVENT_SOURCE_NAME); openUrl.addListener(new UrlSchemeCalledListener());
  • 45. Interact with other App <amx:goLink url="zxing://scan/?ret=tamcapp://scan?scannedCode={CODE}" id="gl2"> <amx:image inlineStyle="height:102px;width:102px;margin-top:4px" source="/images/Barcode.png"/> </amx:goLink>
  • 46. Work with the response public void onMessage(Event event){ AdfELContext elctx = AdfmfJavaUtilities.getAdfELContext(); String url = event.getPayload(); // Isolate the action. We do this because if there are more URL-Scheme // callbacks, we are able to respond to this in this one single method String action = url.substring(url.indexOf("//") + 2, url.indexOf("?")); if (action.equalsIgnoreCase("scan")) { String codeScanned = url.substring(url.indexOf("?scannedCode=")+ 13, url.length()); ValueExpression val2 = AdfmfJavaUtilities.getValueExpression( "#{applicationScope.scannedCode}", Object.class); try{ val2.setValue(elctx, codeScanned); } catch {………..} AdfmfContainerUtilities.gotoFeature("com.blogspot.lucbors.scan.Scanner"); } }
  • 47. Demo
  • 50. Push Notifications • Subscribe to Messaging Service • Receive token • Register with Enterprise app • Enterprise app Pushes message to Messaging Service • Messaging Service delegates message to device(s)
  • 52. Start GCM • ApplicationLifeCycleListener – Start() – getNotificationStyle() – getSourceAuthorizationId() public void start() { // Add code here... EventSource evtSource = EventSourceFactory.getEventSource( NativePushNotificationEventSource. NATIVE_PUSH_NOTIFICATION_REMOTE_EVENT_SOURCE_NAME); evtSource.addListener(new PushNotificationListener()); } public long getNotificationStyle() { return PushNotificationConfig.NOTIFICATION_STYLE_ALERT | PushNotificationConfig.NOTIFICATION_STYLE_BADGE | PushNotificationConfig.NOTIFICATION_STYLE_BADGE;}
  • 53. Open the application • PushNotificationListener – OnMessage – OnError – OnOpen public void onOpen(String token) { // Invoked during the Push Notification registration process. // The parameter "token" contains the token received from APNs or GCMs // that uniquely identifies a specific device-application combination. ValueExpression ve = AdfmfJavaUtilities.getValueExpression( "#{applicationScope.deviceToken}", String.class); if (token != null){ ve.setValue(AdfmfJavaUtilities.getAdfELContext(), token); } else{ ve.setValue(AdfmfJavaUtilities.getAdfELContext(), "dummy Token"); } }
  • 54. Example • Select device • Send message • Get notified
  • 56. Summary • Remote URL – Simple for (re-) using existing mobile websites • Display File – To download files and display them in the App in the device native viewer. • REST Services (such as Google Places) – Embed external data into your ADF Mobile APP • Twitter via Local HTML – To use twitter timeline via Twitter Widgets • URL Scheme – For inter app communication • Push Notifications – Rather complex setup but after that very powerful – Keep in mind that there is no guaranteed delivery
  • 57. Luc Bors, AMIS, The Netherlands Luc.Bors@amis.nl LucBors@gmail.com Follow me on : @lucb_