180 likes | 318 Views
Building Mobile Apps with Rhodes. Adam Blum adam@rhomobile.com. The Rhomobile Mission. Mobilize enterprise apps… cost-effectively with a great user experience. provide the high level productivity and portability of web programming
E N D
Building Mobile Apps with Rhodes Adam Blum adam@rhomobile.com
The Rhomobile Mission Mobilize enterprise apps… cost-effectively with a great user experience. • provide the high level productivity and portability of web programming • with device optimization and offline capability of “native mobile apps” • open source for rapid adoption by developers
Platform Overview • Rhodes • “microframework” for building locally executing natively optimized mobile apps • Developers run app generator for their objects of interest and then edit HTML templates • Contains first mobile Ruby implementation • RhoSync • Sync focused on web service data (needed in the age of SaaS)
The Rhodes Microframework • a minimalist Ruby implementation for mobile devices • a Model-View-Controller "microframework" that consists of a directory structure and file naming convention. Writing to this framework primarily consists of editing a set of ERB templates for creating HTML to display data • the RhoSync synchronization engine client • a simple object relational manager (ORM) called Rhom • a web server which is installed on the mobile device and runs locally • The RhoGen app generator
Sample Rhodes Apps • Rhomobile provides small set of enterprise apps • CRM - subset of SugarCRM’s capabilities: syncing to opportunities, contacts to device • Field service – Siebel field service • third party apps • TrailGuide (Basecamp) will release in a couple months • small number of vendors will accept GPL license • their source will be published on rhohub.com • highlight best of breed examples in several verticals: field service/MRO, medical, scientific
Building a Rhodes App • Get your data (RhoSync) • Generate a sync source • Define your sync source adapter code • Test it from the web page • Generator your app (RhoGen) • Generate an app (in the Rhodes \apps subdirectory for now) • Generate a model and scaffold code • Develop your app (Ruby/HTML editor of choice) • Edit your model controllers • Edit your HTML templates (ERB file) • Build, test, deploy (development environment for device) • Build your app • Test your app • Make available for download (or post to App Store)
RhoSync Architecture RhoSync Server Siebel SOAP SalesForce SOAP SugarCRM your app SOAP Rhodes runtime BaseCamp REST other app backends REST
Defining a Rhosync Source • Provide a Source Adapter class with • login- authentication code for the backend • query - retrieve or read's objects from the backend source • sync - take apart these objects and put them into a "property bag” • create • update • delete • logoff – not always necessary
Generated Source Adapter Class • class <%=name%> < SourceAdapter • def initialize(source) • super • end • def login • #TODO: Write some code here • end • def query • # TODO: write some code here • end • def sync • # usually the generic base class sync does the job • super • end • def create(name_value_list) • #TODO: write some code here • end • def update(name_value_list) • #TODO: write some code here • end • def delete(name_value_list) • #TODO: write some code here if applicable • end • def logoff • #TODO: write some code here if applicable • end • end
Sample Rhosync Source Query select_fields = ['name','case_number','priority','status','type','description','resolution'] result = client.get_entry_list(session_id,'Cases','','case_number',0,select_fields,'10000',0);
Generate Your App • Generate your app • rhogen app accountapp • Creates • application.rb • index.html • Generate your model • cd accountapp • rhogen model account http://rhosync.rhohub.com/sources/1 1 name,industry • Creates • controller.rb • config.rb • index.erb • new.erb • edit.erb
Edit A View <form title="Edit Account" class="panel" id="account_edit_form" method="POST" action="<%=url_for('update')%>"> <fieldset> <input type="hidden" name="id" value="<%=@account.object%>"/> <div class="row"> <label>Name: </label> <input type="text" name="account[name]" value="<%=@account.name%>"/> </div> <div class="row"> <label>Industry: </label> <select name="account[industry]"> <%@industries.each do |i|%> <option value=<%=i%> <%if @account.industry==i%> selected<%end%>><%=i%> </option> <%end%> </select> </div> </fieldset> <input type="submit" value="Update"/> </form>
Platform Status • 0.1 operational on iPhone, Windows Mobile and RIM Blackberry today • Sample apps for SugarCRM and Siebel Field Service • All open source • github.com/rhomobile • rhomobile.lighthouseapp.com • 0.2 at end of December • Better build process • Faster sync • Faster startup • Symbian • Settable source (already checked in) • PIM access
0.3 Release • February 2009 • Hosted services (i.e. app hosting site: http://rhohub.com) • RhoVer - vending machine • Device capabilities service • Android support
Hosted Services • Registration • Developers • Apps • Sync • Create • Test • App Creation • Generate • Edit • Download/upload • Build and provision • Builds • Vending
RhoVer – Over the Air Provisioning 1) user signs up via desktop browser 2) SMS sent to user with download URL DeviceCap RhoVer rhohub.com/vending/yourapp ! 3) User hits vending machine for app with mobile browser 4) Uses DeviceCap (useragent strings/devices) to send back download link Download app for your Kogan Agora 5) User downloads runner/ app for device Your app RhoSync enterprise app backend Rhodes 6) App is running on device 17
Why Rhomobile? • Declarative tag-based approach (web programming) is more productive • Rich client against local data much better than remote web apps • Write it once and it works on all smartphones • Open source from the ground up