Archive for the ‘Uncategorized’ Category

Android – Bridging the Gap Between Native and HTML5 Mobile Apps (ADF-Mobile And Cordova)

Tuesday, March 4th, 2014

At Fishbowl Solutions; we’ve been looking at ways to enhance and bring the Android experience closer to that native experience that every user wants: – here are some solutions that we are using today to help bridge the Android <4.4 gap and also bring in the latest web technology like WebSocket and WebRTC support not available with either cordova or ADF Mobile today..

When it comes to mobile development with ADF-Mobile or Cordova (HTML5) you will notice that there’s a significant difference in performance and support with the HTML5, CSS3 standards between Android and IOS when building HTML5 hybrid mobile apps.

Today; IOS is closer at bridging the gap – giving it a near to native experience in IOS7; – however with Android if your running a device lower than KitKat OS you will still notice a big hit with performance – this is due to ADF-Mobile and Cordova surfacing the standard webview with an old WebKit engine using the default browser with android and not the chromium browser (now part of KitKat).

 

With those developing ADF-Mobile be aware of the following -

- An old version of jquery (1.7.1) is used with the AMX views (1.7.1 was not designed for mobile) – hopefully Oracle will be upgrading this to the latest supported jquery release targeted for mobile or alternatively swap to mobile jquery syntaxed framework like Zepto.js.

- You can push the updates in manually – this will improve response times and animations;  however be aware that some jquery methods may of been depreciated and may cause you some issues – although I have not come across anything major when manually enhancing ADF Mobile.

There is also a bug with the initial load times of apps in ADF Mobile (Android) – I believe Oracle are working to fix this with the next ADF-Mobile update – this is outside of Cordova or the webview issue and I believe to be more related to the JVM setup. (Correct me if I’m wrong – anyone…)

Cordova 2.2.0 is also used on ADF Mobile (the currently cordova release is 3.4.0) – I’m hoping in the future that Oracle will make it easier for us to upgrade the Cordova Release and supply better release notes on ADF Mobile compatibility with Cordova.
i.e. 2.x is supported in the current release 3.x to be supported on the roadmap – 9 months time, etc.

- If you run into any issues with ADF Mobile; its worth taking a look to see what issues/bugs were in Cordova 2.2.0 release and follow up with Oracle Support to supply an fix for the issue or risk patching the framework yourself.

 

Creating that Native UX with Android (Cordova and potentially ADF-Mobile)

At Fishbowl Solutions we split our Apps to a Single Page App view outside of AMX Business component view for content management – this allows our clients web and marketing teams to quickly enhance content and brand mobile apps; without the need to learn ADF-Mobile using best practices for developing hybrid html5 mobile applications. This approach allows us to deploy our core apps to Cordova or lifecycle management systems like IBM-Worklight when clients do not need the power of ADF-Mobile and JAVA support to integrate with other Oracle systems.

Suggested Frontend JS Libraries (Cordova)
After working with Phonegap/Cordova for the last 4 years these are my recommendation of libraries to use for mobile app development outside of ADF-Mobile AMX views.


Rethinking Best Practices

1. ReactJS developed by Facebook/Instagram is a perfect open sourced library for developing Single Page Apps optimised for mobile development with its virtualised DOM and JS Engine makes animations and transitions effortless – If you are new to ReactJS you need to watch Rethinking Best Practices to give you an underlining understanding and appreciation of why virtualisation of DOM makes complete sense – when developing mobile apps – no need for acceleration on your browser to create clean transition touch events. Alternatively you could take a look at AngularJS by Google; but in terms of performance for mobile I personally believe ReactJS is the way to go even though its still fairly new to the industry – it will provide a closer native experience if used correctly.

2. Director part of the Flatiron framework is a great match for Reactjs – it’s a great URL Router to handle page history and template requests for single paged mobile apps.

3. RequireJS library – is a module loader that will improve the speed and quality of your code; compressing both CSS files and JS libraries into a single compressed file.

4. i18next translation library is a great solution for marketing teams to manage internationalisation string for your apps.

5. jQuery 2.1.0 the latest release is now optimised for mobile development a year or so ago I would of recommended Zepto.js but today jQuerys latest release is just as good for mobile development.

Getting Rid of Androids Old WebKit Browser and enhancing with Chromium and Blink!!

So this is where things get interesting!…

I’ve been working with the Crosswalk-Project runtime this last month upgrading Fishbowl Solutions Mobile Cordova Apps – which in effect has given me the OOTB power and experience achieved with IOS7 Cordova apps and more!

CrossWalk Overview

At the heart of Crosswalk is the Blink rendering and layout engine – this provides the same HTML5 features and capabilities you would expect to find in any modern web brower ie webSocket webRTC etc..

Building on Blink, Crosswalk uses the Chromium Content module to provide a multi-process architecture, designed for security and performance.

For anyone developing Cordova or hybrid apps I’d recommend taking a look at this project and incorporating the runtime if you are working on Android Mobile apps.. This month we’ll be looking at the potential to incorporate this runtime with ADF-Mobile – we’ll let you know how we get on.

 

 

ADF Mobile – Packaged WebCenter Accelerator (Cordova Application)

Sunday, February 16th, 2014

[Fishbowl Solutions WebCenter Accelerator] [ADF Mobile]
[Portal, Content And BPM/SOA] 

At Fishbowl Solutions we’ve been focusing heavily on Mobile solutions over the last 4 years – working on both award winning native and hybrid apps as well as adaptive and responsive web sites and portals for tablet and mobile devices. Last year we decided to expand our reach with ADF Mobile and Cordova based hybrid applications targeting the WebCenter Suite for Android and IOS  (as well as Blackberry, Microsoft for those using plain Cordova or IBM Worklight).

Both Oracle and Fishbowl offer a suite of powerful Native apps available on the Android Google Play and IOS iStore; however these solutions to date are not extendible or brand-able from Oracles side or require customisations and consultancy services from Fishbowl Solutions to extend and enhance the native apps to meet unique client requirements.

With the Oracle ADF Mobile Framework java developers and clients can now easily pull together hybrid applications within JDevelopers visual app designer; however and unfortunately there are currently no Oracle supported open ADF Mobile application for the WebCenter suite that allow clients to easily extend and enhance existing functionality for their corporate users running on mobile devices – and currently the WebCenter apps are not targeted to provide the clean User eXperience for mobile devices and lack features like offline or native device support.

All existing WebCenter Apps that clients want mobile access too, now have to be rebuilt for mobile devices as either native or hybrid applications like the ADF Mobile Framework – so at Fishbowl we’ve decided to build out Fishbowl supported mobile app accelerators for WebCenter Spaces, Content and BPM/SOA (More to come on our Mobile Roadmap). That will allow both your Marketing (Web designers with no ADF knowledge) and ADF Mobile Development teams to extend and quickly and easily customise, enhance and build mobile applications that provide all of the key out of the box features that come with the WebCenter Suite more importantly if you don’t have a requirement for any of the modules these can easily be switched off until you need to enable them in the future – these can also be packaged as a single unified app or multiple individual applications based on your requirements.

The core Fishbowl WebCenter accelerators (Portal, Content, BPM/SOA) are packaged and cannot be customised directly this is so that we can send out software updates as we follow our roadmap for more integrations and accelerators to all our clients without the need to worry that our core accelerators have been tweaked – what we do provide is a key set of APIs and templates that enable you to easily extend, enhance, brand the application as well as create or extend the UI or User Flow of the app to support and integrate with customised bespoke client WebCenter services or custom portal taskflow services or even third party core business applications – empowering you to manage and maintain the app whilst we at Fishbowl provide the key core support, services and UI Shell for future WebCenter OOTB releases.

For more information or a demo – Please contact Fishbowl Solutions here.

 

 

 

 

 

 

Google Search Appliance Connector 3.0 for Oracle WebCenter Demo

Monday, July 15th, 2013

Fishbowl Solutions recently released the newest version of our Google Search Appliance Connector for Oracle WebCenter.

The Google Search Appliance (GSA) provides Google’s sophisticated search capabilities for your intranets, websites, portals, and other enterprise repositories. Fishbowl’s GSA connector allows the GSA to index and serve items stored in Oracle WebCenter Content and includes an easy-to-use search interface to provide a Google-like search experience for WebCenter Users.

The new features include:

  • Document previews
  • User-Added Results
  • People Search
  • Segmented Search
  • Content Service OneBox Results
  • Enhanced Security

Watch Fishbowl’s GSA Connector Version 3.0 for Oracle WebCenter demo below

Join Fishbowl Solutions for a Webinar on June 27th announcing Google Search Appliance Connector 3.0 for Oracle WebCenter

Monday, June 24th, 2013

We hope you will be able to join us this Thursday, June 27th for a webinar that will detail the release of Version 3.0 of our Google Search Appliance (GSA) Connector for Oracle WebCenter. Kim Negaard, Fishbowl’s GSA Connector Product Manager, will share the newest features and functionality of the connector as well as provide a product demonstration. Make plans to attend and learn how the GSA makes finding content in Oracle WebCenter Content easier, more interactive and faster than ever before
 

New customers will learn:

  • Differences between GSA search and built-in Oracle WebCenter search
  • Benefits of Google relevancy, synonyms, previews, and more
  • Fishbowl GSA Connector architecture and technical overview

Existing customers will learn:

  • What’s new in Fishbowl’s GSA Connector Version 3.0
  • Upgrade path from Version 2.5 to 3.0
  • Benefits and impacts of upgrading

Date: Thursday, June 27th, 2013

Time: 1 PM EST, 12 PM CST

Register Now

Integrating Android Applications with WebCenter Content Using RIDC

Friday, June 21st, 2013

When I first started creating Android applications, I decided to create a demo application that allowed me to search WebCenter Content in order to find and display content from Fishbowl’s main Content Server.  Since Android applications are written in Java, an easy option was to use Oracle’s Remote Intradoc Client (RIDC) API to create the integration.  Fishbowl has used RIDC to integrate a number of our products with WebCenter Content, including our Intranet In A Box and Enterprise Batchloader products, so I had a solid codebase already to work from.  You can find more info on the RIDC API here.    In this post I will walk through the steps required to get RIDC integrated into an Android application as well as create a connection to the Content Server in order to execute a search and return data.

Start by creating a brand new Android application in Eclipse.  If you have not created an Android app before, Google has some really good tutorials that can be found here.  I named my new application WebCenter Search.

Since this new application will be using the internet connection of the phone to query the Content Server, make sure you add the proper permissions to your AndroidManifest.xml file.

<uses-permission android:name="android.permission.INTERNET" />

Next, download the RIDC client jar file from the Oracle WebCenter Content downloads page here.  The RIDC client jar file needs to be dropped into the libs folder of your Android application in order to use it in your app.  Additionally, RIDC requires the Jakarta Commons Http Client jar file in order to communicate over HTTP with the Content Server.  The Jakarta Commons Http Client jar file will need to be dropped into the libs folder of your Android application as well.  You can find more info on that jar file here.  Once those two jar files are in place, your application is ready to integrate with the Content Server.

In practice you will most likely want to create a login page and store a user’s credentials after successful login, and you may also want to have a way for the user to enter and store the Content Server URL to which they are connecting.  I won’t cover those topics here as there are a ton of examples of login pages and storing user preference data if you do a simple Google search.  I will hardcode that information for simplicity sake.

To create a search interface, start by creating a search input field and a search button in the main activity layout of your application.  The search button will have an onClick function (called doSearch in my case) that will perform the search.  I have also created an extra TextView in my layout to demonstrate displaying the results that come back from a search.  My sample layout XML file looks like this:

 

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”>

<EditText

android:id=“@+id/search_field”

android:layout_width=“200dp”

android:layout_height=“50dp” />

<Button

android:layout_width=“wrap_content”

android:layout_height=“50dp”

android:text=“Search”

android:onClick=“doSearch”/>

<TextView

android:id=“@+id/search_results”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”/>

</LinearLayout>

 

Next, initialize the connection to the Content Server in the onCreate method of your main activity by creating IdcClient and IdcContext objects.  The connection will need to be initialized with the CGI path to the Content Server in order to tell RIDC to connect over HTTP instead of over the socket.

public class MainActivity extends Activity {

 

private IdcClient idcClient;

private IdcContext userPasswordContext;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

String contentServerURL = “https://myserver.mydomain.com/cs/idcplg”;

IdcClientManager manager = new IdcClientManager();

try {

this.idcClient = manager.createClient(contentServerURL);

this.userPasswordContext = new IdcContext(“weblogic”, “welcome1″);

} catch (IdcClientException e) {

e.printStackTrace();

}

}

}

Once a connection to the Content Server has been properly initialized, you are ready to implement the doSearch method.  Simply pass the required search parameters into a DataBinder object, and execute the GET_SEARCH_RESULTS service using the IdcClient and IdcContext objects created when initializing the Content Server connection.  The results can then be taken from the ServiceResponse object and displayed in your app.  The example below will take all the Content IDs from the search results that are returned and put them in to a comma separated string to be displayed in the app.  Note that since the doSearch method is making a connection over the network, best practice dictates that this process be run in a separate thread so that you don’t lock the main UI thread while the search is being run.  This is handled in the example below by creating a GetSearchResultsTask class to do most of the work.

public void doSearch(View v) throws IdcClientException  {

GetSearchResultsTask gsrt = new GetSearchResultsTask();

gsrt.execute();

}

 

private class GetSearchResultsTask extends AsyncTask<String, Integer, DataResultSet>{

protected DataResultSet doInBackground(String… queryText)

{

DataResultSet searchResults = null;

try {

EditText searchField = (EditText) findViewById(R.id.search_field);

String searchVal = searchField.getText().toString();

DataBinder binder = idcClient.createBinder();

binder.putLocal(“IdcService”, “GET_SEARCH_RESULTS”);

binder.putLocal(“QueryText”, “dDocType <MATCHES> `” + searchVal + “`”);

ServiceResponse response = idcClient.sendRequest (userPasswordContext, binder);

DataBinder serverBinder = response.getResponseAsBinder();

searchResults = serverBinder.getResultSet(“SearchResults”);

} catch (Exception e) {

e.printStackTrace();

}

return searchResults;

}

protected void onPostExecute(DataResultSet searchResults) {

TextView searchResultsView = (TextView) findViewById(R.id.search_results);

String allContentIDs = “”;

List<DataObject> searchResultsList = searchResults.getRows();

for(DataObject result : searchResultsList)

{

String contentId = result.get(“dDocName”);

if(allContentIDs.length() == 0) {

allContentIDs = contentId;

}

else{

allContentIDs += “,” + contentId;

}

}

searchResultsView.setText(allContentIDs);

}

}

When I run the app and do a search, the results look like this:

There is still a lot of work to be done to make this into a usable app, however these basic steps outline the minimum needed to integrate an Android app with the Content Server without having to write the integration pieces yourself.  The major drawback to this approach of course is that it is Android specific and will not work on iOS devices.  If you’re looking for WebCenter Content apps for both Android and iOS, check out the FishbowlToGo app.  The FishbowlToGo app uses Fishbowl’s proprietary JSON-based mobility API to integrate with the Content Server, and has some pretty cool features and functionality.