SlideShare une entreprise Scribd logo
1  sur  115
Télécharger pour lire hors ligne
uMobile Seminar
Jen Bourey

Atlanta Jasig-Sakai Conference
June 10, 2012
About Unicon

Trusted Partner since 1993
Expertise in Open Source Software for Education
Professional Services for uPortal, Sakai, CAS, Shib,
Grouper, and soon Student Success Planner
Innovative Cooperative Support Program
Going Mobile
What’s Different?
 User Interface
   Screen size
   Touchscreen interactions
 Performance
   Bandwidth
   Processing power
 Content
   Overlap with existing apps
Touchscreen Interactions

Tap
Touch
Pinch
Swipe
Additional Hardware


Accelerometer
Camera
Microphone
Common Themes to Date
Student or visitor-focused
Cater to campus life use cases
  News, events
  Maps, transportation
  Maybe some course features
Often no authentication or personalization
How to get started?


Adopt what’s easy and build from there
Build additional pieces as time permits
Questions to Ask

What content needs to be accessed on the go?
What changes frequently?
What do visitors need?
What’s specific to my campus?
Consider diverse audiences

  Visitors
  Recruits
  Students
  Faculty
  Staff
  Alumni
uMobile Overview
uMobile Application Server

 Presents browser-based mobile experience
 Serves as an administrative console
 Provides web-based modules, RESTful data to native
 app
 Based on uPortal
Native App Codebase

Based on Titanium Appcelerator
  JavaScript-based platform-independent
  development framework
  Compile shared codebase to iPhone and Android
  applications with native controls
  Open source under the Apache 2.0 License
Choosing a Distribution
 uPortal
   Includes mobile framework and skin
   Can power the native app
 uMobile
   Branch of uPortal codebase
   Adds additional modules, test data
Adding Content
uMobile Content
Overall Development Style

Create well-defined integration APIs
  Support personalized content, multiple sources
Support common data formats (iCal, RSS)
If no standard exists, define our own XSD
Allow custom implementations
Calendar

 Read-only calendar aggregator
   iCal, CalDAV, XML, Bedework,
   Exchange
   API for custom integrations
 Allows for delegated
 authentication / credential replay
 Role-based feed distribution
News


Read-only news aggregator
RSS / Atom feeds
Role-based feed distribution
Search


Portlet registry
Directory search results
Google Search Appliance
Directory


 Uses uPortal’s person
 directory configuration
 Permissions control visibility
 of users, user attributes
Videos


 Displays recent posts by a single
 YouTube author
 Configure author name in portlet
 definition
Map

Custom XSD defines map data
format
  Name, geocoordinates,
  search keys, categories,
  campuses
Include static JSON file of
location data
Courses

Merges multiple data sources
Supported LMSs
  In-progress DAOs for Sakai
  and Moodle
  Looking for collaborators
Campus Life
Sample Campus Life Data
<laundromat-list xmlns="https://source.jasig.org/schemas/portlet/laundry"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://source.jasig.org/schemas/portlet/laundry ../xsd/laundry.xsd">

    <laundromat name="Saybrook" location-code="SY">
        <machine-type key="Washer" message-key="laundry.type.washer"
            icon-key="Washer" available="5" total="12" />
        <machine-type key="Dryer" message-key="laundry.type.dryer"
            icon-key="Dryer" available="5" total="12" />
    </laundromat>

    <laundromat name="Branford" location-code="BR">
        <machine-type key="Washer" message-key="laundry.type.washer"
            icon-key="Washer" available="2" total="10" />
        <machine-type key="Dryer" message-key="laundry.type.dryer"
            icon-key="Dryer" available="10" total="15" />
    </laundromat>

    <laundromat name="Berkeley" location-code="BK">
        <machine-type key="Washer" message-key="laundry.type.washer"
            icon-key="Washer" available="10" total="12" />
        <machine-type key="Dryer" message-key="laundry.type.dryer"
            icon-key="Dryer" available="3" total="8" />
    </laundromat>

</laundromat-list>
Custom Content
Type                      Advantages


 External Website via
                      • Chose any language / framework
IFrame or Web Proxy
                      • Manage outside of portal
                       framework


                  • Well-defined API
JSR-168 / JSR-286 • Share views w/ desktop portal
     Portlet      • Take advantage of portal services
                       such as auth and roles


                     • Access to native device services
   Native Module     • Potential performance
                       improvements
Web-based vs. Native
Web-based modules
  Allow sharing code with web views
  Easier to update and deploy
Native framework
  Young framework with quickly changing APIs
  Frameworks are changing quickly, want to leave
  options open
Native components
provide navigation



WebView presents
markup from portal
External Content

Leverage existing mobile investment
Allow departments to develop and control their own
content
Enable web-based development in other frameworks
Include external content via WebView, IFrame,
WebProxy
IFrame Publishing Type
Rendered as
  Desktop browser: include external site via IFrame
  Mobile browser: link to external site
  Native app: include in web view
Examples
  Transit, library in default uMobile dataset
IFrame Content
Web Proxy

Proxy an external website
Recommendations
  Design specifically for web proxy view
  Use portal CSS styles
  Avoid AJAX to prevent XSS restrictions
Advanced CMS


<div class="portlet">
    <div class="portlet-content" data-
role="content">
        <ul data-role="listview">
            <li data-role="list-divider">Fish!</li>
            <li>Red Fish</li>
            <li>Blue Fish</li>
        </ul>
    </div>
</div>
Portlet-based Content
JSR-168 / JSR-286 portlet standards
  Enables collaboration beyond uMobile project
Google Gadget integration
Alternate language modules
Provides a familiar, well-defined development model
Assures modules will work across uMobile versions
Mobile Portlet UIs
Tailoring Mobile Views
Using a Single View

Combine desktop and mobile markup to display the
same content to both clients
Best for simple content
Reasonable strategy for developing new portlets
  Developing for mobile first helps keep your interface
  focused and simple
Single View Markup
Template
<!-- Portlet -->
<div class="fl-widget portlet portlet-content" role="section" data-role="content">

  <!-- Portlet Body -->
  <div class="fl-widget-content portlet-body" role="main">

    <!-- Portlet Section -->
    <div id="${n}search" class="portlet-section" role="region">

         <div class="portlet-section-body">

           <p>Hello World!</p>

         </div>

    </div>

  </div>

</div>
Device-Specific Views
Often need a different feature or interface on one
platform
  Separate layout / CSS for desktop, tablet, mobile
  Mouse vs. Touch-based interactions
Want to share backend logic where possible
  Business logic
  Controllers
Multiple Views
       Controller




     View Resolver           Model




 Desktop            Mobile
  View              View
Calendar Views
          Desktop
          in-page


                    Tablet




  Phone
Parsing the User Agent

User agent available as request property
Strategy in uPortal 3.2 and below
Maybe more portal-agnostic
Potential for mismatch between theme and portlet
Parsing the User Agent
private List<Pattern> mobileDeviceRegexes = null;

/**
  * Set a list of regex patterns for user agents which should be considered
  * to be mobile devices.
  *
  * @param patterns
  */
public void setMobileDeviceRegexes(List<String> patterns) {
         this.mobileDeviceRegexes = new ArrayList<Pattern>();
         for (String pattern : patterns) {
                 this.mobileDeviceRegexes.add(Pattern.compile(pattern));
         }
}

@Override
public boolean isMobile(PortletRequest request) {
    String userAgent = request.getProperty("user-agent");

    // check to see if this is a mobile device
    if (this.mobileDeviceRegexes != null && userAgent != null) {
            for (Pattern regex : this.mobileDeviceRegexes) {
                    if (regex.matcher(userAgent).matches()) {
                            return true;
                    }
            }
    }
Checking Reported Theme


 Theme is provided by portal as a request property
 Requires mapping theme name -> mobile in portlet
 Used by uPortal 4+
Using the Theme Name
protected static final String THEME_NAME_PROPERTY = "themeName";
protected static final String MOBILE_THEMES_KEY = "mobileThemes";
protected static final String[] MOBILE_THEMES_DEFAULT = new String[]{ "UniversalityMobile" };

@Override
public boolean isMobile(PortletRequest request) {
    String[] mobileThemes = request.getPreferences().getValues(MOBILE_THEMES_KEY,
            MOBILE_THEMES_DEFAULT);
    String themeName = request.getProperty(THEME_NAME_PROPERTY);
    if (themeName == null) {
        return false;
    }

    for (String theme : mobileThemes) {
        if (themeName.equals(theme)) {
            return true;
        }
    }

    return false;
}
jQuery Mobile
View Layer: jQuery Mobile
Easily create mobile-friendly views
More lightweight
Fairly new project, though growing quickly
Works with jQuery framework
  Adds touch-based events like tap, swipe, pinch
MIT or GPL 2
jQuery Mobile
jQuery Mobile
Documentation

URL
  View in a mobile browser to use as an example
Hint: Get markup by removing hash tag
Not Using All Features


 jQuery Mobile Theming
 AJAX Navigation
jQM Configuration


jQM is loaded *very* early
  To alter default configuration, must include a script
  *before* loading jQM
jQM uPortal-Level
   Configuration

uportal-war/src/main/webapp/media/skins/muniversality/common/javascript/up-mobile-config.js

    $(document).bind("mobileinit", function(){
      $.extend( $.mobile , {
        ajaxEnabled: false,
        ajaxFormsEnabled: false
      });
    });
jQM + Fluid


The trick: allow jQM to modify markup
Example: YouTube portlet
jQM-only Markup Template

<div class="portlet">


     <div data-role="header" class="titlebar portlet-titlebar">
         <a href="javascript:;" data-role="button" data-icon="back" data-inline="true">Back</a>
         <h2 class="title news-reader-feed-title">Title</h2>
     </div>


	   <div data-role="content" class="portlet-content">


	   	    <p>Hello World!</p>


	   </div>


</div>
Using the Feed Class

<div class="portlet">
	    <div data-role="content" class="portlet-content">
	    	
	    	    <ul data-role="listview" class="feed">
	    	        <c:forEach items="${ feed.entries }" var="entry">
	    	            <li>
	    	            	<a href="${ entry.link }">
	    	    	                 <img src="${ entry.imageUrl }"/>
	    	    	                 <h3 class="title">${ entry.title }</h3>
	    	    	                 <p>
	    	    	                      ${ entry.description.value }
	    	    	                 </p>
	    	                 </a>
	    	            </li>
	    	        </c:forEach>
	    	    </ul>
	    	
	    </div>
</div>
Including jQM in a Portlet


<script type="text/javascript">
$("[data-role=page]").live('pagebeforecreate',function(event){
  return false;
});
</script>
<script type="text/javascript"
    src="<rs:resourceURL value="/rs/jquery-mobile/1.0a3/jquery.mobile-1.0a3.js"/>">
</script>
Improving Performance
Optimizing JS/CSS Libraries
Reduce browser traffic as much as possible
  Minify
  GZip
  Cache
Use Jasig filters
  Only apply long-term cache headers to resources
  that will really, truly never change
ETags


String marks version of a page/resource
Browser only re-downloads if the tags don’t match
Use Spring’s ShallowETagHeaderFilter to automatically
set ETags
uMobile Integration
Minimized Window State

public class MinimizedStateHandlerInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandleRender(RenderRequest request, RenderResponse response,
                Object handler) throws Exception {

        if (WindowState.MINIMIZED.equals(request.getWindowState())) {

            return false;
        }

        return true;
    }

}
New Item Count

Number indicates “new”
items associated with a
module
Invites users to visit a module
Set via a portlet response
property
Linking to Other Portlets

 Create links to other portlets, services
 Examples:
   /s/person?id=student
   /s/location?id=DH
Search Integration


 New search API in uPortal 4
 Based on JSR-286 events
 https://wiki.jasig.org/
 display/UPM40/Using+the
 +new+Search+API
Notifications Integration


 On uMobile 1.3 roadmap
 Publish notifications to drop-down panel in native app
Module Distribution
Role-based Content
Use existing campus roles to drive personalized
content
Potential data sources
  LDAP, Active Directory, Grouper
  Local (app-specific) group definitions
  Attribute-based ad-hoc groups
Use roles to distribute both module list and content
within modules
Disabling Content in Mobile
Theme

 “hideFromMobile” global CPD preference
 Removes portlet during structure transform
 Set via portlet administration menu or portlet definition
 file
Adding mobile-only
fragments

UserAgentProfileMapper distributes fragments by user
agent
Use to distribute fragments just to mobile users
Can’t combine with role-based rules :-(
Skinning uMobile
User Profiles

Maps to a theme, structure, skin, and layout
One user can have multiple profiles, but only one layout
By default two profiles: mobile and desktop
Can create / configure through data import
User Profile Selection


 Controlled by IProfileMapper API
 By default selected by user agent regexes
 Configure in userContext.xml
Home Screen View


Either folder-based or grid-based view
Icons set via portlet administration tool
Development Tips
Jasig Portlet Archetype
 Quickly create a new portlet project
   Project structure and spring config
   Desktop and mobile views
 Resources
   https://wiki.jasig.org/display/UMM/Using+the
   +uMobile+Portlet+Archetype
   http://www.youtube.com/jasigumobile
Maven deploy-war plugin

Specific to uPortal and uPortal 4
Allows deployment directly from portlet directory
  Performs pluto-fication and deploys to tomcat
mvn -Plocaldev -Dmaven.tomcat.home=/path/to/
tomcat install org.jasig.portal:maven-uportal-
plugin:deploy-war
Disabling Aggregation


Turn off all aggregation, minification, and caching of JS/
CSS
Useful for development and debugging
Don’t do in a production portal!
SASS watch goal


Compiles SASS files and copies to tomcat whenever a
SASS source file is edited
Useful for skin development and debugging
Spoofing User Agents

Change browser’s reported “user agent” string
  Describes browser type and version, machine, etc.
View portal’s response to particular device
Helpful for testing skin, browser mappings, and portlet
UIs
Firefox User Agent
Safari User Agent
Logging Transformations

log4j.properties

 ## Uncomment to see the XML at various stages in the rendering pipeline
 log4j.logger.org.jasig.portal.rendering.LoggingStAXComponent=DEBUG, R
 log4j.additivity.org.jasig.portal.rendering.LoggingStAXComponent=false
Native App Development
Titanium Appcelerator


JavaScript platform for creating mobile apps
Compiles OS-independent JS into Android and iPhone
projects
Open source Apache 2 licensed project
Titanium APIs

Views
Network
Map
Contacts
Anatomy of a Project


Driven by a main app.js file
Can include other javascript files
Titanium Documentation


http://developer.appcelerator.com/documentation
Includes APIs, Getting Started guide
For API, use PDF, not web
Getting Started
Preparing for Native
Development
 Install Titanium
   Lots of extra steps for Windows :-(
 Install an Emulator
   Android on all platforms
   iPhone on OS X only
 Install Jasig uMobile SDK
 Check out the project
Some Tips


Troubleshooting: When in doubt, clean!
  for the iPhone, delete build/iphone
Turn log level up to TRACE
Configuring uMobile

Most settings in config.js
  Base portal URL
  Authentication method
  Person directory information
  Emergency contact numbers
Skinning the Native App


Controlled by style.js
CSS-like javascript file provides style attributes for new
objects
Module Icons


Map modules to icons by fname in config.js
Need multiple versions for various resolutions
Localizing uMobile
 Messages in localization.js
   Simple dictionary of translations
 Configure default language in config.js
   In the future, maybe get default locale from portal?
 Using the messages
   app.localDictionary.translatedTextStringKey
Adding External Sites
config.js
   UPM.LOCAL_MODULES.twitter = {
       title: 'Twitter',
       fname: 'twitter',
       url: 'http://mobile.twitter.com/searches?
   q=jasigsakai12',
       externalModule: true
   };
Overriding Portlets
config.js
   UPM.LOCAL_MODULES.directory = {
       title: 'directory',
       fname: 'directory',
       iconUrl: 'icons/directory.png',
       doesRequireLayout: true,
       window: 'directory'
   };
Adding Native Modules

Follow tutorial at https://wiki.jasig.org/display/UPC/
Build+a+Native+Module+-+Hello+World
High-level steps
  Create controller
  Add facade to window manager
  Add to config and set icon
uMobile
               Server



Request data from     Return location
uPortal map service   data as JSON




                                        Present native components
              uMobile                      based on portal data

               App
Testing

 Real actual phone
   Best way to test, need to do this before releasing
   Should consider multiple versions
 Emulator
   iPhone: OS X only
   Android: all platforms
Testing: iOS

 Need an iOS Developer Program Account ($99/year)
 A Development Certificate to sign applications for
 testing on devices
 A Development Provisioning Profile to install on devices
 for testing
Publishing: iOS

 Create publishing certificates and profiles
 Set up the app in iTunes Connect
 Create a new Bundle ID
 Generate a Distribution Profile
 Validate and submitting the app binary through Xcode
Publishing: Android

 Set up an Android Developer account for ($25)
 Create a self-signed certificate to sign your application
 Compile your app for distribution in Titanium Developer
 Zipalign your APK
 Set up and upload your app in Android Market
 Developer Console
Tips


  Make sure to handle network errors and other
  exceptions
  Use at least a 1.0 version number
  Leave lots of time to publish to the Apple store
The Future
Layout Support
Native App Platform
  Investigating PhoneGap as an option
Multiple Layouts / User
  Requires fix to uPortal codebase
  Development item for 4.1
Add mobile theme layout editing
More Resources
uMobile Roadmap



https://wiki.jasig.org/display/umobile/uMobile+1.2+
%28Phase+3%29+Roadmap
Documentation
uMobile Manual
  https://wiki.jasig.org/display/UMM/Manual+Home
uPortal 4 Manual
  https://wiki.jasig.org/display/UPM40/Home
Jasig Portlet Developer Space
  https://wiki.jasig.org/display/PLT/Portlet
  +Development
Documentation

uMobile YouTube
  http://youtube.com/jasigumobile
jQuery Mobile
  http://jquerymobile.com/test/
Additional Resources


Jasig mailing lists
  uMobile, portlet, and uPortal lists
  https://wiki.jasig.org/display/JSG/Jasig+Mailing
  +Lists
Questions?

Want to make something? :-)
Mobile Seminar Overview

Contenu connexe

Tendances

Intro To webOS
Intro To webOSIntro To webOS
Intro To webOSfpatton
 
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Innomatic Platform
 
SD Forum Java SIG - Service Oriented UI Architecture
SD Forum Java SIG - Service Oriented UI ArchitectureSD Forum Java SIG - Service Oriented UI Architecture
SD Forum Java SIG - Service Oriented UI ArchitectureJeff Haynie
 
HTML5: the new frontier of the web
HTML5: the new frontier of the webHTML5: the new frontier of the web
HTML5: the new frontier of the webIvano Malavolta
 
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias Wessendorf
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias WessendorfHTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias Wessendorf
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias WessendorfJAX London
 
Web programming and development - Introduction
Web programming and development - IntroductionWeb programming and development - Introduction
Web programming and development - IntroductionJoel Briza
 
HTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsHTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsJames Pearce
 
HTML5 and CSS3 refresher
HTML5 and CSS3 refresherHTML5 and CSS3 refresher
HTML5 and CSS3 refresherIvano Malavolta
 
Web 2.0 Tech Talk
Web 2.0 Tech TalkWeb 2.0 Tech Talk
Web 2.0 Tech Talkpooyad
 
Three WEM Dev Tricks
Three WEM Dev TricksThree WEM Dev Tricks
Three WEM Dev TricksGabriel Walt
 
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineIMC Institute
 
Integrate Shindig with Joomla
Integrate Shindig with JoomlaIntegrate Shindig with Joomla
Integrate Shindig with JoomlaAnand Sharma
 
Liferay hardening principles
Liferay hardening principlesLiferay hardening principles
Liferay hardening principlesAmbientia
 
Developing Next-Gen Enterprise Web Application
Developing Next-Gen Enterprise Web ApplicationDeveloping Next-Gen Enterprise Web Application
Developing Next-Gen Enterprise Web ApplicationMark Gu
 
Mobile application
Mobile applicationMobile application
Mobile applicationaspnet123
 
Mobile Ajax Workshop
Mobile Ajax WorkshopMobile Ajax Workshop
Mobile Ajax WorkshopBryan Rieger
 
FATC UK - Real time collaborative Flex apps
FATC UK - Real time collaborative Flex appsFATC UK - Real time collaborative Flex apps
FATC UK - Real time collaborative Flex appsMichael Chaize
 

Tendances (20)

Intro To webOS
Intro To webOSIntro To webOS
Intro To webOS
 
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
 
SD Forum Java SIG - Service Oriented UI Architecture
SD Forum Java SIG - Service Oriented UI ArchitectureSD Forum Java SIG - Service Oriented UI Architecture
SD Forum Java SIG - Service Oriented UI Architecture
 
HTML5: the new frontier of the web
HTML5: the new frontier of the webHTML5: the new frontier of the web
HTML5: the new frontier of the web
 
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias Wessendorf
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias WessendorfHTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias Wessendorf
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias Wessendorf
 
Web programming and development - Introduction
Web programming and development - IntroductionWeb programming and development - Introduction
Web programming and development - Introduction
 
HTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsHTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applications
 
Webapplication ppt prepared by krishna ballabh gupta
Webapplication ppt prepared by krishna ballabh guptaWebapplication ppt prepared by krishna ballabh gupta
Webapplication ppt prepared by krishna ballabh gupta
 
Overview of Liferay 7 Technology
Overview of Liferay 7 TechnologyOverview of Liferay 7 Technology
Overview of Liferay 7 Technology
 
Imdad resume
Imdad resumeImdad resume
Imdad resume
 
HTML5 and CSS3 refresher
HTML5 and CSS3 refresherHTML5 and CSS3 refresher
HTML5 and CSS3 refresher
 
Web 2.0 Tech Talk
Web 2.0 Tech TalkWeb 2.0 Tech Talk
Web 2.0 Tech Talk
 
Three WEM Dev Tricks
Three WEM Dev TricksThree WEM Dev Tricks
Three WEM Dev Tricks
 
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App EngineJava Web Programming on Google Cloud Platform [1/3] : Google App Engine
Java Web Programming on Google Cloud Platform [1/3] : Google App Engine
 
Integrate Shindig with Joomla
Integrate Shindig with JoomlaIntegrate Shindig with Joomla
Integrate Shindig with Joomla
 
Liferay hardening principles
Liferay hardening principlesLiferay hardening principles
Liferay hardening principles
 
Developing Next-Gen Enterprise Web Application
Developing Next-Gen Enterprise Web ApplicationDeveloping Next-Gen Enterprise Web Application
Developing Next-Gen Enterprise Web Application
 
Mobile application
Mobile applicationMobile application
Mobile application
 
Mobile Ajax Workshop
Mobile Ajax WorkshopMobile Ajax Workshop
Mobile Ajax Workshop
 
FATC UK - Real time collaborative Flex apps
FATC UK - Real time collaborative Flex appsFATC UK - Real time collaborative Flex apps
FATC UK - Real time collaborative Flex apps
 

Similaire à Mobile Seminar Overview

Approaches to mobile site development
Approaches to mobile site developmentApproaches to mobile site development
Approaches to mobile site developmentErik Mitchell
 
Java Technology
Java TechnologyJava Technology
Java Technologyifnu bima
 
Reaching out from ADF Mobile (ODTUG KScope 2014)
Reaching out from ADF Mobile (ODTUG KScope 2014)Reaching out from ADF Mobile (ODTUG KScope 2014)
Reaching out from ADF Mobile (ODTUG KScope 2014)Luc Bors
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web DevelopmentRobert J. Stein
 
Drupalcamp LA Aug 2009
Drupalcamp LA Aug 2009Drupalcamp LA Aug 2009
Drupalcamp LA Aug 2009Tom Deryckere
 
Dojo - from web page to web apps
Dojo - from web page to web appsDojo - from web page to web apps
Dojo - from web page to web appsyoavrubin
 
Making your site mobile-friendly - DevCSI Reading 21.07.2010
Making your site mobile-friendly - DevCSI Reading 21.07.2010Making your site mobile-friendly - DevCSI Reading 21.07.2010
Making your site mobile-friendly - DevCSI Reading 21.07.2010Patrick Lauke
 
Developing your first application using FI-WARE
Developing your first application using FI-WAREDeveloping your first application using FI-WARE
Developing your first application using FI-WAREFermin Galan
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWAREFIWARE
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to TornadoGavin Roy
 
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложенияCodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложенияCodeFest
 
SEE 2009: Improving Mobile Web Developer Experience
SEE 2009: Improving Mobile Web Developer ExperienceSEE 2009: Improving Mobile Web Developer Experience
SEE 2009: Improving Mobile Web Developer ExperienceTasneem Sayeed
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
Folio3 - An Introduction to PHP Yii
Folio3 - An Introduction to PHP YiiFolio3 - An Introduction to PHP Yii
Folio3 - An Introduction to PHP YiiFolio3 Software
 
Briding the Gap between Desktop and Mobile publishing
Briding the Gap between Desktop and Mobile publishingBriding the Gap between Desktop and Mobile publishing
Briding the Gap between Desktop and Mobile publishingTom Deryckere
 
D22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source FrameworksD22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source FrameworksSunil Patil
 
D22 portlet development with open source frameworks
D22 portlet development with open source frameworksD22 portlet development with open source frameworks
D22 portlet development with open source frameworksSunil Patil
 

Similaire à Mobile Seminar Overview (20)

uMobile Development Strategies
uMobile Development StrategiesuMobile Development Strategies
uMobile Development Strategies
 
Approaches to mobile site development
Approaches to mobile site developmentApproaches to mobile site development
Approaches to mobile site development
 
Java Technology
Java TechnologyJava Technology
Java Technology
 
Reaching out from ADF Mobile (ODTUG KScope 2014)
Reaching out from ADF Mobile (ODTUG KScope 2014)Reaching out from ADF Mobile (ODTUG KScope 2014)
Reaching out from ADF Mobile (ODTUG KScope 2014)
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web Development
 
Drupalcamp LA Aug 2009
Drupalcamp LA Aug 2009Drupalcamp LA Aug 2009
Drupalcamp LA Aug 2009
 
Dojo - from web page to web apps
Dojo - from web page to web appsDojo - from web page to web apps
Dojo - from web page to web apps
 
Mobile Web
Mobile WebMobile Web
Mobile Web
 
Making your site mobile-friendly - DevCSI Reading 21.07.2010
Making your site mobile-friendly - DevCSI Reading 21.07.2010Making your site mobile-friendly - DevCSI Reading 21.07.2010
Making your site mobile-friendly - DevCSI Reading 21.07.2010
 
Developing your first application using FI-WARE
Developing your first application using FI-WAREDeveloping your first application using FI-WARE
Developing your first application using FI-WARE
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWARE
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
 
Customizing Oracle EBS OA Framework
Customizing Oracle EBS OA FrameworkCustomizing Oracle EBS OA Framework
Customizing Oracle EBS OA Framework
 
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложенияCodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
CodeFest 2014. Пухальский И. — Отзывчивые кроссплатформенные веб-приложения
 
SEE 2009: Improving Mobile Web Developer Experience
SEE 2009: Improving Mobile Web Developer ExperienceSEE 2009: Improving Mobile Web Developer Experience
SEE 2009: Improving Mobile Web Developer Experience
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Folio3 - An Introduction to PHP Yii
Folio3 - An Introduction to PHP YiiFolio3 - An Introduction to PHP Yii
Folio3 - An Introduction to PHP Yii
 
Briding the Gap between Desktop and Mobile publishing
Briding the Gap between Desktop and Mobile publishingBriding the Gap between Desktop and Mobile publishing
Briding the Gap between Desktop and Mobile publishing
 
D22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source FrameworksD22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source Frameworks
 
D22 portlet development with open source frameworks
D22 portlet development with open source frameworksD22 portlet development with open source frameworks
D22 portlet development with open source frameworks
 

Plus de Jennifer Bourey

Migrating a 1M+ LOC project from AngularJS to Angular
Migrating a 1M+ LOC project from AngularJS to AngularMigrating a 1M+ LOC project from AngularJS to Angular
Migrating a 1M+ LOC project from AngularJS to AngularJennifer Bourey
 
Delivering Mobile Course Content with uMobile
Delivering Mobile Course Content with uMobileDelivering Mobile Course Content with uMobile
Delivering Mobile Course Content with uMobileJennifer Bourey
 
uMobile: Taking Mobile Applications and Devices to the Next Level
uMobile: Taking Mobile Applications and Devices to the Next LeveluMobile: Taking Mobile Applications and Devices to the Next Level
uMobile: Taking Mobile Applications and Devices to the Next LevelJennifer Bourey
 

Plus de Jennifer Bourey (6)

Migrating a 1M+ LOC project from AngularJS to Angular
Migrating a 1M+ LOC project from AngularJS to AngularMigrating a 1M+ LOC project from AngularJS to Angular
Migrating a 1M+ LOC project from AngularJS to Angular
 
Getting to Angular 2
Getting to Angular 2Getting to Angular 2
Getting to Angular 2
 
Delivering Mobile Course Content with uMobile
Delivering Mobile Course Content with uMobileDelivering Mobile Course Content with uMobile
Delivering Mobile Course Content with uMobile
 
uMobile: Taking Mobile Applications and Devices to the Next Level
uMobile: Taking Mobile Applications and Devices to the Next LeveluMobile: Taking Mobile Applications and Devices to the Next Level
uMobile: Taking Mobile Applications and Devices to the Next Level
 
Sakai and uPortal 4
Sakai and uPortal 4Sakai and uPortal 4
Sakai and uPortal 4
 
uPortal 3.2 And Beyond
uPortal 3.2 And BeyonduPortal 3.2 And Beyond
uPortal 3.2 And Beyond
 

Dernier

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 

Dernier (20)

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 

Mobile Seminar Overview

  • 1. uMobile Seminar Jen Bourey Atlanta Jasig-Sakai Conference June 10, 2012
  • 2. About Unicon Trusted Partner since 1993 Expertise in Open Source Software for Education Professional Services for uPortal, Sakai, CAS, Shib, Grouper, and soon Student Success Planner Innovative Cooperative Support Program
  • 4. What’s Different? User Interface Screen size Touchscreen interactions Performance Bandwidth Processing power Content Overlap with existing apps
  • 7. Common Themes to Date Student or visitor-focused Cater to campus life use cases News, events Maps, transportation Maybe some course features Often no authentication or personalization
  • 8. How to get started? Adopt what’s easy and build from there Build additional pieces as time permits
  • 9. Questions to Ask What content needs to be accessed on the go? What changes frequently? What do visitors need? What’s specific to my campus?
  • 10. Consider diverse audiences Visitors Recruits Students Faculty Staff Alumni
  • 12. uMobile Application Server Presents browser-based mobile experience Serves as an administrative console Provides web-based modules, RESTful data to native app Based on uPortal
  • 13. Native App Codebase Based on Titanium Appcelerator JavaScript-based platform-independent development framework Compile shared codebase to iPhone and Android applications with native controls Open source under the Apache 2.0 License
  • 14.
  • 15. Choosing a Distribution uPortal Includes mobile framework and skin Can power the native app uMobile Branch of uPortal codebase Adds additional modules, test data
  • 18. Overall Development Style Create well-defined integration APIs Support personalized content, multiple sources Support common data formats (iCal, RSS) If no standard exists, define our own XSD Allow custom implementations
  • 19. Calendar Read-only calendar aggregator iCal, CalDAV, XML, Bedework, Exchange API for custom integrations Allows for delegated authentication / credential replay Role-based feed distribution
  • 20. News Read-only news aggregator RSS / Atom feeds Role-based feed distribution
  • 21. Search Portlet registry Directory search results Google Search Appliance
  • 22. Directory Uses uPortal’s person directory configuration Permissions control visibility of users, user attributes
  • 23. Videos Displays recent posts by a single YouTube author Configure author name in portlet definition
  • 24. Map Custom XSD defines map data format Name, geocoordinates, search keys, categories, campuses Include static JSON file of location data
  • 25. Courses Merges multiple data sources Supported LMSs In-progress DAOs for Sakai and Moodle Looking for collaborators
  • 27. Sample Campus Life Data <laundromat-list xmlns="https://source.jasig.org/schemas/portlet/laundry" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://source.jasig.org/schemas/portlet/laundry ../xsd/laundry.xsd"> <laundromat name="Saybrook" location-code="SY"> <machine-type key="Washer" message-key="laundry.type.washer" icon-key="Washer" available="5" total="12" /> <machine-type key="Dryer" message-key="laundry.type.dryer" icon-key="Dryer" available="5" total="12" /> </laundromat> <laundromat name="Branford" location-code="BR"> <machine-type key="Washer" message-key="laundry.type.washer" icon-key="Washer" available="2" total="10" /> <machine-type key="Dryer" message-key="laundry.type.dryer" icon-key="Dryer" available="10" total="15" /> </laundromat> <laundromat name="Berkeley" location-code="BK"> <machine-type key="Washer" message-key="laundry.type.washer" icon-key="Washer" available="10" total="12" /> <machine-type key="Dryer" message-key="laundry.type.dryer" icon-key="Dryer" available="3" total="8" /> </laundromat> </laundromat-list>
  • 29. Type Advantages External Website via • Chose any language / framework IFrame or Web Proxy • Manage outside of portal framework • Well-defined API JSR-168 / JSR-286 • Share views w/ desktop portal Portlet • Take advantage of portal services such as auth and roles • Access to native device services Native Module • Potential performance improvements
  • 30. Web-based vs. Native Web-based modules Allow sharing code with web views Easier to update and deploy Native framework Young framework with quickly changing APIs Frameworks are changing quickly, want to leave options open
  • 31. Native components provide navigation WebView presents markup from portal
  • 32. External Content Leverage existing mobile investment Allow departments to develop and control their own content Enable web-based development in other frameworks Include external content via WebView, IFrame, WebProxy
  • 33. IFrame Publishing Type Rendered as Desktop browser: include external site via IFrame Mobile browser: link to external site Native app: include in web view Examples Transit, library in default uMobile dataset
  • 35. Web Proxy Proxy an external website Recommendations Design specifically for web proxy view Use portal CSS styles Avoid AJAX to prevent XSS restrictions
  • 36. Advanced CMS <div class="portlet"> <div class="portlet-content" data- role="content"> <ul data-role="listview"> <li data-role="list-divider">Fish!</li> <li>Red Fish</li> <li>Blue Fish</li> </ul> </div> </div>
  • 37. Portlet-based Content JSR-168 / JSR-286 portlet standards Enables collaboration beyond uMobile project Google Gadget integration Alternate language modules Provides a familiar, well-defined development model Assures modules will work across uMobile versions
  • 40. Using a Single View Combine desktop and mobile markup to display the same content to both clients Best for simple content Reasonable strategy for developing new portlets Developing for mobile first helps keep your interface focused and simple
  • 41. Single View Markup Template <!-- Portlet --> <div class="fl-widget portlet portlet-content" role="section" data-role="content"> <!-- Portlet Body --> <div class="fl-widget-content portlet-body" role="main"> <!-- Portlet Section --> <div id="${n}search" class="portlet-section" role="region"> <div class="portlet-section-body"> <p>Hello World!</p> </div> </div> </div> </div>
  • 42. Device-Specific Views Often need a different feature or interface on one platform Separate layout / CSS for desktop, tablet, mobile Mouse vs. Touch-based interactions Want to share backend logic where possible Business logic Controllers
  • 43. Multiple Views Controller View Resolver Model Desktop Mobile View View
  • 44. Calendar Views Desktop in-page Tablet Phone
  • 45. Parsing the User Agent User agent available as request property Strategy in uPortal 3.2 and below Maybe more portal-agnostic Potential for mismatch between theme and portlet
  • 46. Parsing the User Agent private List<Pattern> mobileDeviceRegexes = null; /** * Set a list of regex patterns for user agents which should be considered * to be mobile devices. * * @param patterns */ public void setMobileDeviceRegexes(List<String> patterns) { this.mobileDeviceRegexes = new ArrayList<Pattern>(); for (String pattern : patterns) { this.mobileDeviceRegexes.add(Pattern.compile(pattern)); } } @Override public boolean isMobile(PortletRequest request) { String userAgent = request.getProperty("user-agent"); // check to see if this is a mobile device if (this.mobileDeviceRegexes != null && userAgent != null) { for (Pattern regex : this.mobileDeviceRegexes) { if (regex.matcher(userAgent).matches()) { return true; } } }
  • 47. Checking Reported Theme Theme is provided by portal as a request property Requires mapping theme name -> mobile in portlet Used by uPortal 4+
  • 48. Using the Theme Name protected static final String THEME_NAME_PROPERTY = "themeName"; protected static final String MOBILE_THEMES_KEY = "mobileThemes"; protected static final String[] MOBILE_THEMES_DEFAULT = new String[]{ "UniversalityMobile" }; @Override public boolean isMobile(PortletRequest request) { String[] mobileThemes = request.getPreferences().getValues(MOBILE_THEMES_KEY, MOBILE_THEMES_DEFAULT); String themeName = request.getProperty(THEME_NAME_PROPERTY); if (themeName == null) { return false; } for (String theme : mobileThemes) { if (themeName.equals(theme)) { return true; } } return false; }
  • 50. View Layer: jQuery Mobile Easily create mobile-friendly views More lightweight Fairly new project, though growing quickly Works with jQuery framework Adds touch-based events like tap, swipe, pinch MIT or GPL 2
  • 52. jQuery Mobile Documentation URL View in a mobile browser to use as an example Hint: Get markup by removing hash tag
  • 53. Not Using All Features jQuery Mobile Theming AJAX Navigation
  • 54. jQM Configuration jQM is loaded *very* early To alter default configuration, must include a script *before* loading jQM
  • 55. jQM uPortal-Level Configuration uportal-war/src/main/webapp/media/skins/muniversality/common/javascript/up-mobile-config.js $(document).bind("mobileinit", function(){ $.extend( $.mobile , { ajaxEnabled: false, ajaxFormsEnabled: false }); });
  • 56. jQM + Fluid The trick: allow jQM to modify markup Example: YouTube portlet
  • 57. jQM-only Markup Template <div class="portlet"> <div data-role="header" class="titlebar portlet-titlebar"> <a href="javascript:;" data-role="button" data-icon="back" data-inline="true">Back</a> <h2 class="title news-reader-feed-title">Title</h2> </div> <div data-role="content" class="portlet-content"> <p>Hello World!</p> </div> </div>
  • 58. Using the Feed Class <div class="portlet"> <div data-role="content" class="portlet-content"> <ul data-role="listview" class="feed"> <c:forEach items="${ feed.entries }" var="entry"> <li> <a href="${ entry.link }"> <img src="${ entry.imageUrl }"/> <h3 class="title">${ entry.title }</h3> <p> ${ entry.description.value } </p> </a> </li> </c:forEach> </ul> </div> </div>
  • 59. Including jQM in a Portlet <script type="text/javascript"> $("[data-role=page]").live('pagebeforecreate',function(event){ return false; }); </script> <script type="text/javascript" src="<rs:resourceURL value="/rs/jquery-mobile/1.0a3/jquery.mobile-1.0a3.js"/>"> </script>
  • 61. Optimizing JS/CSS Libraries Reduce browser traffic as much as possible Minify GZip Cache Use Jasig filters Only apply long-term cache headers to resources that will really, truly never change
  • 62. ETags String marks version of a page/resource Browser only re-downloads if the tags don’t match Use Spring’s ShallowETagHeaderFilter to automatically set ETags
  • 64. Minimized Window State public class MinimizedStateHandlerInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandleRender(RenderRequest request, RenderResponse response, Object handler) throws Exception { if (WindowState.MINIMIZED.equals(request.getWindowState())) { return false; } return true; } }
  • 65. New Item Count Number indicates “new” items associated with a module Invites users to visit a module Set via a portlet response property
  • 66. Linking to Other Portlets Create links to other portlets, services Examples: /s/person?id=student /s/location?id=DH
  • 67. Search Integration New search API in uPortal 4 Based on JSR-286 events https://wiki.jasig.org/ display/UPM40/Using+the +new+Search+API
  • 68. Notifications Integration On uMobile 1.3 roadmap Publish notifications to drop-down panel in native app
  • 70. Role-based Content Use existing campus roles to drive personalized content Potential data sources LDAP, Active Directory, Grouper Local (app-specific) group definitions Attribute-based ad-hoc groups Use roles to distribute both module list and content within modules
  • 71. Disabling Content in Mobile Theme “hideFromMobile” global CPD preference Removes portlet during structure transform Set via portlet administration menu or portlet definition file
  • 72. Adding mobile-only fragments UserAgentProfileMapper distributes fragments by user agent Use to distribute fragments just to mobile users Can’t combine with role-based rules :-(
  • 74. User Profiles Maps to a theme, structure, skin, and layout One user can have multiple profiles, but only one layout By default two profiles: mobile and desktop Can create / configure through data import
  • 75. User Profile Selection Controlled by IProfileMapper API By default selected by user agent regexes Configure in userContext.xml
  • 76. Home Screen View Either folder-based or grid-based view Icons set via portlet administration tool
  • 78. Jasig Portlet Archetype Quickly create a new portlet project Project structure and spring config Desktop and mobile views Resources https://wiki.jasig.org/display/UMM/Using+the +uMobile+Portlet+Archetype http://www.youtube.com/jasigumobile
  • 79. Maven deploy-war plugin Specific to uPortal and uPortal 4 Allows deployment directly from portlet directory Performs pluto-fication and deploys to tomcat mvn -Plocaldev -Dmaven.tomcat.home=/path/to/ tomcat install org.jasig.portal:maven-uportal- plugin:deploy-war
  • 80. Disabling Aggregation Turn off all aggregation, minification, and caching of JS/ CSS Useful for development and debugging Don’t do in a production portal!
  • 81. SASS watch goal Compiles SASS files and copies to tomcat whenever a SASS source file is edited Useful for skin development and debugging
  • 82. Spoofing User Agents Change browser’s reported “user agent” string Describes browser type and version, machine, etc. View portal’s response to particular device Helpful for testing skin, browser mappings, and portlet UIs
  • 85. Logging Transformations log4j.properties ## Uncomment to see the XML at various stages in the rendering pipeline log4j.logger.org.jasig.portal.rendering.LoggingStAXComponent=DEBUG, R log4j.additivity.org.jasig.portal.rendering.LoggingStAXComponent=false
  • 87. Titanium Appcelerator JavaScript platform for creating mobile apps Compiles OS-independent JS into Android and iPhone projects Open source Apache 2 licensed project
  • 89. Anatomy of a Project Driven by a main app.js file Can include other javascript files
  • 92. Preparing for Native Development Install Titanium Lots of extra steps for Windows :-( Install an Emulator Android on all platforms iPhone on OS X only Install Jasig uMobile SDK Check out the project
  • 93. Some Tips Troubleshooting: When in doubt, clean! for the iPhone, delete build/iphone Turn log level up to TRACE
  • 94. Configuring uMobile Most settings in config.js Base portal URL Authentication method Person directory information Emergency contact numbers
  • 95. Skinning the Native App Controlled by style.js CSS-like javascript file provides style attributes for new objects
  • 96. Module Icons Map modules to icons by fname in config.js Need multiple versions for various resolutions
  • 97. Localizing uMobile Messages in localization.js Simple dictionary of translations Configure default language in config.js In the future, maybe get default locale from portal? Using the messages app.localDictionary.translatedTextStringKey
  • 98. Adding External Sites config.js UPM.LOCAL_MODULES.twitter = { title: 'Twitter', fname: 'twitter', url: 'http://mobile.twitter.com/searches? q=jasigsakai12', externalModule: true };
  • 99. Overriding Portlets config.js UPM.LOCAL_MODULES.directory = { title: 'directory', fname: 'directory', iconUrl: 'icons/directory.png', doesRequireLayout: true, window: 'directory' };
  • 100. Adding Native Modules Follow tutorial at https://wiki.jasig.org/display/UPC/ Build+a+Native+Module+-+Hello+World High-level steps Create controller Add facade to window manager Add to config and set icon
  • 101. uMobile Server Request data from Return location uPortal map service data as JSON Present native components uMobile based on portal data App
  • 102. Testing Real actual phone Best way to test, need to do this before releasing Should consider multiple versions Emulator iPhone: OS X only Android: all platforms
  • 103. Testing: iOS Need an iOS Developer Program Account ($99/year) A Development Certificate to sign applications for testing on devices A Development Provisioning Profile to install on devices for testing
  • 104. Publishing: iOS Create publishing certificates and profiles Set up the app in iTunes Connect Create a new Bundle ID Generate a Distribution Profile Validate and submitting the app binary through Xcode
  • 105. Publishing: Android Set up an Android Developer account for ($25) Create a self-signed certificate to sign your application Compile your app for distribution in Titanium Developer Zipalign your APK Set up and upload your app in Android Market Developer Console
  • 106. Tips Make sure to handle network errors and other exceptions Use at least a 1.0 version number Leave lots of time to publish to the Apple store
  • 108. Layout Support Native App Platform Investigating PhoneGap as an option Multiple Layouts / User Requires fix to uPortal codebase Development item for 4.1 Add mobile theme layout editing
  • 111. Documentation uMobile Manual https://wiki.jasig.org/display/UMM/Manual+Home uPortal 4 Manual https://wiki.jasig.org/display/UPM40/Home Jasig Portlet Developer Space https://wiki.jasig.org/display/PLT/Portlet +Development
  • 112. Documentation uMobile YouTube http://youtube.com/jasigumobile jQuery Mobile http://jquerymobile.com/test/
  • 113. Additional Resources Jasig mailing lists uMobile, portlet, and uPortal lists https://wiki.jasig.org/display/JSG/Jasig+Mailing +Lists
  • 114. Questions? Want to make something? :-)