<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Enterprise productivity for the mobile workforce</description><title>Fieldforce</title><generator>Tumblr (3.0; @fieldforce)</generator><link>http://blog.fieldforceapp.com/</link><item><title>Fieldforce Web Portal is Live!</title><description>&lt;p&gt;We’re pleased to offer our users access to the beta version of the Fieldforce &lt;strong&gt;web portal&lt;/strong&gt;, enabling team check-ins, real-time location updates and management of team contacts, accounts &amp;amp; more for enterprise users everywhere. &lt;strong&gt;Fieldforce 3.0&lt;/strong&gt; is available now on the App Store, a free upgrade to existing users, with new features like faster contact manager, integrated account check-ins and updates, and a call-log feature, all synchronized seamlessly to other team members and the new web portal. &lt;a href="http://itunes.com/app/fieldforce"&gt;Update now!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/e345f35cbe478c6dd15f3555a80d455f/tumblr_inline_miaktxgpqy1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;p class="c0"&gt;&lt;span class="c2"&gt;If you’ve not heard about what Fieldforce is doing in the enterprise, we encourage you to learn more about us, here: &lt;a href="http://fieldforceapp.com/"&gt;&lt;a href="http://fieldforceapp.com"&gt;http://fieldforceapp.com&lt;/a&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="c0"&gt;&lt;span class="c2"&gt;We help &lt;strong&gt;solve the problem&lt;/strong&gt; of synchronizing contacts and actions across multiple devices and multiple teams.&lt;/span&gt;&lt;/p&gt;

&lt;p class="c0"&gt;&lt;span class="c2"&gt;With Fieldforce 3.0 and the new web-portal, teams can leverage these key features:&lt;/span&gt;&lt;/p&gt;
&lt;p class="c0"&gt;&lt;span class="c2"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span&gt;Shared Contacts &amp;amp; Accounts&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Geo-tagged Activity Streams&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Real-time &amp;#8220;Push&amp;#8221; Messaging&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Checkin at Accounts&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.fieldforceapp.com/post/43194900454</link><guid>http://blog.fieldforceapp.com/post/43194900454</guid><pubDate>Fri, 15 Feb 2013 21:42:31 -0500</pubDate><category>webapp</category><category>ios</category><category>app</category><category>update</category></item><item><title>Moving to Heroku, Bootstrap &amp; Font-Awesome</title><description>&lt;div class="post_body"&gt;Over the past few weeks, we&amp;#8217;ve transitioned Fieldforce servers to Heroku and at the same time adopted Twitter Bootstrap for our front-end UI framework. Really happy with the results so far, but one thing we wanted to do: stand out from the crazy rush of Bootstrap based websites out there.

&lt;div&gt;Our solution: fonts.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;Actually, &lt;a href="http://fortawesome.github.com/Font-Awesome/" target="_blank"&gt;Font-Awesome&lt;/a&gt; the iconic font which was designed by Dave Gandy&amp;#8230; thanks Dave. The challenge we had was to include Font-Awesome to an existing UI theme using a Rails 3 stack on Heroku. Not so easy given the new asset pipeline of Rails.&lt;/div&gt;

&lt;div&gt;
&lt;div class="p_embed p_image_embed"&gt;&lt;img src="file:///Users/doug/Developer/Field%20Force/Posterous%20Blog/space-2005042-fieldforceapp-6b07eab4bb00836be960deb1bc0a95ab/image/2012/11/45663371-Screen%20Shot%202012-11-08%20at%202.57.17%20PM.png"/&gt;&lt;/div&gt;
&lt;img src="http://media.tumblr.com/986635be2175e2c926b518987f3b5331/tumblr_inline_miak7mo2fo1qz4rgp.png"/&gt;&lt;p&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div&gt;The steps we took to add Font-Awesome are below, and we think the results are looking really good so far.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;

&lt;div&gt;
&lt;p&gt;        1. Download font-awesome from&lt;a href="https://github.com/FortAwesome/Font-Awesome" target="_blank"&gt;&lt;a href="https://github.com/FortAwesome/Font-Awesome"&gt;https://github.com/FortAwesome/Font-Awesome&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;        2. Put the font folder in the app/assets. &lt;/p&gt;

&lt;p&gt;        3. Add config.assets.paths &amp;#171;&amp;#160;&amp;#8220;#{Rails.root}/app/assets/font&amp;#8221; to config/application.rb  to include the font folder in the asset pipeline&lt;/p&gt;

&lt;p&gt;        4. Put the font-awesome.css file in the /assets/stylesheets folder&lt;/p&gt;

&lt;p&gt;        5. Modify the font-awesome.css file to refer to the new assets, for example:&lt;/p&gt;

&lt;p&gt;            @font-face {&lt;/p&gt;
&lt;p&gt;              font-family: &amp;#8220;FontAwesome&amp;#8221;;&lt;/p&gt;
&lt;p&gt;              src: url(&amp;#8216;/assets/fontawesome-webfont.eot&amp;#8217;);&lt;/p&gt;
&lt;p&gt;              src: url(&amp;#8216;/assets/fontawesome-webfont.eot?#iefix&amp;#8217;) format(&amp;#8216;eot&amp;#8217;), url(&amp;#8216;/assets/fontawesome-webfont.woff&amp;#8217;) format(&amp;#8216;woff&amp;#8217;), url(&amp;#8216;/assets/fontawesome-webfont.ttf&amp;#8217;) format(&amp;#8216;truetype&amp;#8217;), url(&amp;#8216;/assets/fontawesome-webfont.svg#FontAwesome&amp;#8217;) format(&amp;#8216;svg&amp;#8217;);&lt;/p&gt;
&lt;p&gt;              font-weight: normal;&lt;/p&gt;
&lt;p&gt;              font-style: normal;&lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;
&lt;div&gt;Enjoy!&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
&lt;/div&gt;</description><link>http://blog.fieldforceapp.com/post/43193973420</link><guid>http://blog.fieldforceapp.com/post/43193973420</guid><pubDate>Fri, 15 Feb 2013 21:29:51 -0500</pubDate><category>rails</category><category>FontAwesome</category><category>heroku</category><category>bootstrap</category></item><item><title>Over the past few weeks, we’ve transitioned Fieldforce...</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_md720spURg1riomu6o1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Over the past few weeks, we’ve transitioned Fieldforce servers to Heroku&lt;br/&gt;
and at the same time adopted Twitter Bootstrap for our front-end UI&lt;br/&gt;
framework. Really happy with the results so far, but one thing we wanted to&lt;br/&gt;
do: stand out from the crazy rush of Bootstrap based websites out there.&lt;/p&gt;

&lt;p&gt;Our solution: fonts.&lt;/p&gt;

&lt;p&gt;Actually, Font-Awesome &gt; the&lt;br/&gt;
iconic font which was designed by Dave Gandy… thanks Dave. The challenge&lt;br/&gt;
we had was to include Font-Awesome to an existing UI theme using a Rails 3&lt;br/&gt;
stack on Heroku. Not so easy given the new asset pipeline of Rails.&lt;/p&gt;

&lt;p&gt;[image: Inline image 1]&lt;/p&gt;

&lt;p&gt;The steps we took to add Font-Awesome are below, and we think the results&lt;br/&gt;
are looking really good so far.&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;
        1. Download font-awesome from&lt;br/&gt;
&lt;a href="https://github.com/FortAwesome/Font-Awesome"&gt;https://github.com/FortAwesome/Font-Awesome&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;
        2. Put the font folder in the app/assets.&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;
        3. Add config.assets.paths&lt;/p&gt;</description><link>http://blog.fieldforceapp.com/post/35303062703</link><guid>http://blog.fieldforceapp.com/post/35303062703</guid><pubDate>Thu, 08 Nov 2012 19:14:52 -0500</pubDate><category>iefix</category><category>FontAwesome</category></item><item><title>iPad Business Apps -- Fieldforce</title><description>&lt;p&gt;The past year has seen an &lt;a href="http://t.co/4YBctfjJ"&gt;explosion&lt;/a&gt; of new tablets and &lt;a href="https://twitter.com/fieldforceapp/status/194973592289673216"&gt;apps&lt;/a&gt; focsued on the &lt;a href="http://t.co/e5aWomBS"&gt;professional&lt;/a&gt;, moving past the consumer and now squarely aimed at enterprise users small &amp;amp; large. And the Fieldforce iPad app is a key addition.&lt;/p&gt;
&lt;p&gt;Designed for enterprise users needing to coordinate activities with those working inside and outside of the office, &lt;a href="http://itunes.com/app/fieldforcexl"&gt;Fieldforce iPad&lt;/a&gt; app acts like the command center for field team management.&lt;/p&gt;
&lt;p&gt;&lt;img class="posterous_plugin_object posterous_plugin_object_image" height="100" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2012-07-12/xfwaGzmuhfGtHzqAHgFDsfdvwghvegxvhaIIJoegGgvawiziobqfEiobansk/iPad_Screenshots-_Checkin.png.thumb100.png?content_part=mtIjBbwmhGrCBDlACjEs" width="100"/&gt;&lt;/p&gt;
&lt;p&gt;Fieldforce is a communication and productivity solution for mobile field teams. A hybrid web &amp;amp; app based tool to share contacts, calendars, tasks and memos seamlessly in the cloud. Use it to check-in at business meetings, automatically record new accounts and contacts using built-in business card scanning. Push a team-wide status update to schedule action items, post meeting notes including voice memos. &lt;a href="http://fieldforceapp.com"&gt;Free and paid versions available&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;</description><link>http://blog.fieldforceapp.com/post/32922995042</link><guid>http://blog.fieldforceapp.com/post/32922995042</guid><pubDate>Sun, 12 Aug 2012 00:00:00 -0400</pubDate><category>ipad</category><category>business</category><category>apps</category></item><item><title>iPad Enterprise App Development Changes Everything!</title><description>&lt;p&gt;We are starting beta tests of our iPad app and wanted to take the time to express our appreciation for our users who have provided a list of feature request, explain our design philosophy for this first release and then invite you to join our beta testers by sending us an email at &lt;a href="http://getsatisfaction.com/fieldforceapp"&gt;support@fieldforceapp.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;iPad in the Enterprise&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our friend &lt;a href="http://www.asymco.com/2012/01/17/the-rise-and-fall-of-personal-computing/"&gt;@asymco&lt;/a&gt; has put together an historical summary of the adoption of various desktop &amp;amp; mobile OS&amp;#8217; and devices. Admittedly, its a bit confusing but reinforces something we&amp;#8217;ve seen anecdotally in boardrooms and meeting rooms across the world: the iPad is displacing the laptop as the device of choice for enterprise users.&lt;/p&gt;
&lt;p&gt;&lt;img class="posterous_plugin_object posterous_plugin_object_image" height="100" src="http://getfile5.posterous.com/getfile/files.posterous.com/temp-2012-01-22/jgpqlpAhpGlgEhqpxotqqqvruwqatlpamgquencjAlnmyrCFkAEwcieGGJls/Screen-Shot-2012-01-15-at-1-15-5.54.54-PM.png.thumb100.png?content_part=CeDufyHHkbIeGirFmIha" width="100"/&gt;&lt;/p&gt;
&lt;p&gt;What this has meant for us is a desire to focus on the iPad first as a device target, putting it ahead of Android or HTML5, for example. And to really deliver an enterprise-class solution that&amp;#8217;s focused as we are on the design of professional productivity &amp;amp; group collaboration solutions, designing for the iPad changes everything.&lt;/p&gt;
&lt;p&gt;&lt;img class="posterous_plugin_object posterous_plugin_object_image" height="100" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2012-01-22/buDuwrajxBFIrgetFohmDpDzorsrwwqxwAtsowIpoqFIhlxEoJIjyyGrzapv/iOS_Simulator_Screen_shot_Jan_22_2012_2.47.59_PM.png.thumb100.png?content_part=vlndHiABljHmbzakCfDu" width="100"/&gt;&lt;/p&gt;

&lt;p&gt;Fieldforce is focused on the problem of being a part of or managing a field team. Teams of sales, support or service professionals who are out of the office more than they&amp;#8217;re behind a desk. These team are increasingly turning towards smartphones and specifically the iPad to do accomplish task-specific activities like customer sales &amp;amp; support calls, call planning, field education &amp;amp; training, and basic CRM and HCM functions. And the common need for all of these actions is to do them quickly, seamlessly and on their mobile device.&lt;/p&gt;
&lt;p&gt;The design of the Fieldforce app on the iPad therefore was driven by the need to allow users to get directly to the actions that matter. And to build, from the ground up, an effective team-based collaboration tool. &lt;/p&gt;
&lt;p&gt;If we&amp;#8217;ve done our job right, we&amp;#8217;ve built the design around a seamless combination of communication and productivity tools where the app &amp;#8220;anticipates,&amp;#8221; and wherever possible presents distilled information in the most easily actionable way. We pre-populate and synthesize information for the users based on their physical location, history and team based context.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fieldforceapp.com"&gt;Join us&lt;/a&gt; as we&amp;#8217;re rolling out this new approach to field team productivity, now on the iPad.&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;</description><link>http://blog.fieldforceapp.com/post/32923069055</link><guid>http://blog.fieldforceapp.com/post/32923069055</guid><pubDate>Sun, 22 Jan 2012 00:00:00 -0500</pubDate><category>ipad</category><category>business</category><category>e2.0</category><category>change</category></item><item><title>Weekend Project: iOS5 Storyboard + Parse.com + Heroku Awesomeness</title><description>&lt;p&gt;[&lt;strong&gt;UPDATE&lt;/strong&gt;] &lt;em&gt;Demo application source code avaialble &lt;a href="https://github.com/fieldforceapp/parse-storyboard/tree/" title="GitHub" target="_self"&gt;GitHub&lt;/a&gt;, add comments there please.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;While the rest of the family was eating their fill of Turkey and giblets, we received an enticing request via Kyle Bragger&amp;#8217;s excellent &lt;a href="https://tinyproj.com"&gt;TinyProj&lt;/a&gt; to create a combined iOS app plus server backend for a cool &amp;#8220;video greeting card&amp;#8221; service. We had been looking for an excuse to try Parse.com and the new iOS5 &amp;#8220;Storyboard&amp;#8221; features and this seemed like an excellent chance to try out some new ideas, and get paid (thanks Satjot). And so we dug in!&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" class="posterous_plugin_object posterous_plugin_object_image" height="100" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-11-30/JvvBdmqyooFzAngDheBdCwsCuAjDtcEvrakpnewvjIgGsfzxixpkjlbvaGiz/photo.JPG.thumb100.jpg?content_part=wdlEmlioEheJBmejhCEb" width="100"/&gt;&lt;/p&gt;
&lt;p&gt;First, the &lt;a href="http://developer.apple.com/technologies/ios5/"&gt;iOS5 Storyboards&lt;/a&gt; feature is a new productivity library &amp;amp; tool available within XCode 4.2 to solve the most common rapid prototyping problems, and to provide a flexible framework for &amp;#8220;standard&amp;#8221; navigation apps. &lt;/p&gt;
&lt;p&gt;Second, &lt;a href="http://Parse.com"&gt;Parse.com&lt;/a&gt; is a library and platform for rapid development of cloud-based apps which provides a flexible API, available under iOS, Android and through a RESTful interface, to enable user provisioning, general and relational data store and asset (image, audio, video) upload and synchronization using Amazon S3.&lt;/p&gt;
&lt;p&gt;Lastly, Heroku is, well, &lt;a href="http://Heroku.com"&gt;Heroku&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Our &lt;a href="http://fieldforceapp.com"&gt;Fieldforce&lt;/a&gt; app is a group-based chat and productivity tool which combines real-time messaging with cloud-based synchronization of contacts, and other &amp;#8220;assets.&amp;#8221; We&amp;#8217;ve been studying Parse.com to see if it could replace our backend. And while we have yet to determine if the newly released &amp;#8220;Access Control List&amp;#8221; may provide the type of complex user and asset provisioning that we need, for a &amp;#8220;video greeting card&amp;#8221; app, it seems to be a perfect match. Parse.com provides, out of the box:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Basic user authentication (account CRUd)&lt;/li&gt;
&lt;li&gt;Object synchronization across devices (card metadata CRUd)&lt;/li&gt;
&lt;li&gt;Asset upload &amp;amp; relational data mapping (video message upload &amp;amp; association)&lt;/li&gt;
&lt;li&gt;Password authenticated RESTful access to objects &amp;amp; assets (video asset sharing via S3)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;iOS5 Storyboards probably isn&amp;#8217;t the best for custom navigation controllers (eg., &lt;a href="http://cocoacontrols.com/platforms/ios/controls/openspringboard"&gt;Open Springboard&lt;/a&gt;) but seems to work well for standard UINavigationController or UITabBarController based apps. Specifically for this design, and perhaps especially for iterative client work, Storyboards provided a nice way to quickly stitch together a rough flow of high-level views and determine the best (minimum?) set of views. We used the following approach:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Create the basic &amp;#8220;top-level&amp;#8221; flow using generic view controllers&lt;/li&gt;
&lt;li&gt;Work with &amp;#8220;unconditional&amp;#8221; segues first, you can easily add conditions later&lt;/li&gt;
&lt;li&gt;Build conditional segues using specific &amp;#8220;dummy&amp;#8221; buttons, not programmatically&lt;/li&gt;
&lt;li&gt;Use the IB widgets for UITableViews and UITableViewCells, they&amp;#8217;re getting better!&lt;/li&gt;
&lt;li&gt;Add conditional segues later, may need to &amp;#8220;undo&amp;#8221; the older segues&lt;/li&gt;
&lt;li&gt;Use iOS5 UIAppearance protocols to skin the app&lt;/li&gt;
&lt;li&gt;Deploy with the awesome TestFlightApp.com and their new &lt;a href="https://testflightapp.com/sdk/"&gt;SDK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Get serious about TDD and use &lt;a href="http://corner.squareup.com/2011/07/ios-integration-testing.html"&gt;Square&amp;#8217;s KIF&lt;/a&gt; test framework&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Ok, we didn&amp;#8217;t quite get to TDD this time but we really, really want to&amp;#8230; one of these days. (Heard that before?)&lt;/p&gt;
&lt;p&gt;Finally, we tied the whole thing together using a simple Rails-based Heroku web app which basically parses a hashed URL to display a static &amp;#8220;card&amp;#8221; image and pulls the video asset from the Parse.com RESTful interface, which is acting as a front-end to the Amazon S3 services.&lt;/p&gt;
&lt;p&gt;Some key lessons &amp;amp; learnings below. We can post a follow-up tutorial if there&amp;#8217;s more interest.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Parse.com Setup&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Parse.com setup was about as simple as could be, with the exception of the unfortunate namespace. Regardless, Parse.com allows you to set up data structures passively, without a prior database schema. This is nice in that it allows for experimentation on the app, to add new fields (columns) and objects as needed. The only setup to do on the Parse.com website is to generate the app keys.&lt;img alt="image" class="posterous_plugin_object posterous_plugin_object_image" height="100" src="http://getfile9.posterous.com/getfile/files.posterous.com/temp-2011-11-30/FoafduaJhDnwrsrGBCzoovpbixfhCcujssBtABFjIarDvdxawiHjcklrIxtv/Screen_shot_2011-11-30_at_5.36.00_PM.png.thumb100.png?content_part=ykFheEwmlaeihtIChJHe" width="100"/&gt;&lt;/p&gt;
&lt;p&gt;We had an issue with the automatically generated SDK &amp;#8220;starter kit&amp;#8221; produced by Parse.com, as it&amp;#8217;s not compatible with iOS5 Storyboards, which James at Parse tells me they&amp;#8217;re going to update. But it was easy enough to pull the Parse.com SDK into a blank Storyboard app and use that as our starting point.&lt;/p&gt;
&lt;p&gt;We started our app development with no user provisioning at first, and Parse.com supports this type of global or &amp;#8220;application level&amp;#8221; data objects. It was helpful to not force user registration at first, as we could focus on object (card) creation flow instead. The object metadata needs to be constructed use the typical data objects (NSStrings, NSNumbers, NSDicts, etc.), and, as you would expect, data objects can contain references to previously saved objects. This caused some trouble in the flow of the app in that you have to first store an object before it can be associated. If not, the Parse.com library throws an immediate exception which is ok but means we were left wondering what caused a crash or two when simulator our code. Better exception handling in the Parse.com library would help, a verbose NSLog output please?&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Parse.com RESTful API&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;One of the things we liked about Parse.com was the use of a RESTful API to access the saved objects, including access to the uploaded (video) assets. It wasn&amp;#8217;t clear from the documentation, but they upload assets to Amazon S3 and provide a publicly accessible URL which is immediately available from the +objectURL method call. This meant it was trivial for us to then share those assets with registered users. (Perhaps you can lock these assets down with the new Access Control List features, although it&amp;#8217;s not clear how this translates to S3 permissions).&lt;/p&gt;
&lt;p&gt;Finally, we could uniquely determine the an object hash, again, after the data objects are stored on Parse.com, and we could use this hash to then reference our users&amp;#8217; assets and metadata by leveraging the Parse.com RESTful API. Interestingly, this allows us to present the user with a simple static URL they can share. We can just query the RESTful API to pull all the relavant assets. No redundant data store needed. Sweet.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Parse.com User Authentication With Storyboard&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Once we had data object construction working, we needed to create a user authentication flow. With Parse.com, this means you need to create, populate and save a PFUser object. This is a unique object within the framework which has some standard fields (columns) but also can be extended to store, for example, some business logic for perishable items which we then used as a trigger for our In-App Purchases. &lt;/p&gt;
&lt;p&gt;With iOS5 Storyboards, the PFUser object creation looks something like the following:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" class="posterous_plugin_object posterous_plugin_object_image" height="100" src="http://getfile8.posterous.com/getfile/files.posterous.com/temp-2011-11-30/egsqfdmonIJxJiEeGdyaomwDiptavgeDxltwkynxryHgxrfkfBmkcEmidrHy/Screen_shot_2011-11-30_at_6.13.29_PM.png.thumb100.png?content_part=bofplbIzzhrhlxBzisgs" width="100"/&gt;The various ingress segues are to allow the user to signup from multiple points within the app, which allows for passive onboarding whenever the user feels ready to commit. The egress from login view to &amp;#8220;Signup&amp;#8221; is triggered by the UIButton, as is the &amp;#8220;Forgot Password&amp;#8221; egress. &lt;/p&gt;
&lt;p&gt;All that remained was to add code to the &amp;#8220;Login&amp;#8221; and &amp;#8220;Signup&amp;#8221; buttons to sanity check the entries and then stuff the values into the Parse.com API calls for PFUser registration. The API calls are typically one lines calls, using Cocoa Blocks. The bulk of the code is actually error checking &amp;amp; UI animations. Nice to have the server code so painless for once!&lt;/p&gt;</description><link>http://blog.fieldforceapp.com/post/32922733018</link><guid>http://blog.fieldforceapp.com/post/32922733018</guid><pubDate>Tue, 06 Dec 2011 00:00:00 -0500</pubDate><category>parse</category><category>heroku</category><category>parsecom</category></item><item><title>HTML5 Mobile App for Tablets &amp; Jive</title><description>&lt;p&gt;&lt;span&gt;Jive 5 and Mobile Apps&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Within &lt;a href="http://www.jivesoftware.com/products/engage-employees"&gt;Jive 5&lt;/a&gt;, we&amp;#8217;re using OpenSocial API&amp;#8217;s to provide enterprise users with a business focused &amp;#8220;check-in&amp;#8221; service that&amp;#8217;s combined with a &amp;#8220;peer-to-peer CRM&amp;#8221; system to improve the time &amp;amp; effort spent coordinating field team efforts. We are a &amp;#8220;mobile first&amp;#8221; solution company, and so we found it very natural to take the HTML5 codebase we had using the jQueryMobile and Phonegap stacks and develop an easy to use, compelling enterprise app within &lt;a href="http://www.jivesoftware.com/products/apps/jive-apps-market/buying-apps"&gt;Jive Apps Market&lt;/a&gt;. Here&amp;#8217;s the path we took, hopefully this can help you too.&lt;/p&gt;
&lt;p&gt;&lt;img class="posterous_plugin_object posterous_plugin_object_image" height="100" src="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-08-15/HDarmxBJsCywCkmuGiEihBEFBypthDlAahlrHjsdozssGvFiBGCwplcHmkuc/screenshot3.png.thumb100.png?content_part=HAHJlECeiswGbhjFlqdl" width="100"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;From iOS to HTML5&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ve been focused on iOS app development for the past several years and pleased to have released a &lt;a href="http://blog.fieldforceapp.com/fieldforce-20-chosen-by-apple-whats-hot-produ"&gt;Top50 productivity app&lt;/a&gt; on the iPhone. The &lt;a href="http://blog.fieldforceapp.com/fieldforce-20-chosen-by-apple-whats-hot-produ"&gt;feedback from our users&lt;/a&gt; has been pushing us for some time to support more platforms &amp;#8212; iPad, Web-app and Android are the top three. Expect to see Windows Phone requests next year. And for all of these, we think with technology like HTML5 with local SQL data store, native API bridges like Phonegap and with both Sencha Touch and jQueryMobile we believe we can serve all of these target devices from within the same HTML5 code base.&lt;/p&gt;
&lt;p&gt;The key, for us at least, is having a well formed UI and UX and for that a native iOS app as a starting point has been invaluable. At every design turn, we look back on what we humbly think of a well designed app and take our cues from the iPhone interface even as we implement for the web or Android.&lt;/p&gt;
&lt;p&gt;The lesson learned I guess is, &amp;#8220;go deep somewhere first.&amp;#8221;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;HTML5 Options &amp;amp; Opinions&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;For the past 6-months we&amp;#8217;ve been exploring with different HTML5 frameworks and waiting, frankly, for the browser developers to start targeting a common API subset. Our initial choices were really limited to custom Javascript/CSS frameworks which were really targeted for pre-HTML5 mobile websites. But with the advent of &lt;a href="http://www.sencha.com/products/touch/"&gt;Sencha Touch&lt;/a&gt; and the alpha version of &lt;a href="http://jquerymobile.com/blog/2011/08/03/jquery-mobile-beta-2-released/"&gt;jQueryMobile&lt;/a&gt;, we started to get excited about the options.&lt;/p&gt;
&lt;p&gt;What changed for us was the advent of &lt;a href="http://www.phonegap.com/"&gt;Phonegap 1.0 and their Build product&lt;/a&gt;, which is still in beta, but allows for automated builds across different devices. We&amp;#8217;re still not yet ready to publish production apps using this beta code, but it&amp;#8217;s convinced us of the viability of Phonegap for production environments.&lt;/p&gt;
&lt;p&gt;Finally there is Sencha Touch and their ExtJS framework and jQueryMobile alpha. We investigated both and for our needs, which includes both iPad, Android and a wide range of web-apps, we felt jQueryMobile gives us the most flexibility. This may change but we felt the ExtJS framework was too big of a hurdle to overcome while jQueryMobile, especially in the alpha version, if anything is too lightweight. But with Phonegap and now jQueryMobile going to beta we&amp;#8217;ve placed our bets on that stack.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;HTML5 jQueryMobile for Tablet, First&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our first target for our HTML5 code was a tablet based form factor using jQueryMobile. We chose to target a tablet, and of course had the iPad in mind, because it can provide a good UI form factor that can work well for both web and tablet apps, which we would argue are merging in terms of leading edge UX. Apple&amp;#8217;s Lion OS is certainly a start in that direction. Regardless, we went with tablet format first but hit our first roadblock: jQueryMobile doesn&amp;#8217;t have a &amp;#8220;two pane&amp;#8221; interface for tablets but rather assumed, at least in alpha, a simpler phone interface.&lt;/p&gt;
&lt;p&gt;To fix this, we first implemented a two-pane tablet interface using jQueryMobile beta. You can see the results, &lt;a href="http://jsfiddle.net/fieldforceapp/zCMUC/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img class="posterous_plugin_object posterous_plugin_object_image" height="100" src="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-08-15/zcIzBjhhrdJammqjFJHykuoBaFarDDqhzAkzhasBlyGgwhioJnhInnerGHsD/Screen_shot_2011-08-15_at_11.41.46_AM.png.thumb100.png?content_part=efgayyHGwwklwdosnnfr" width="100"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Custom jQueryMobile Tablet UI&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;What we focused on was the classic tablet interface of a left pane with a scrollable datalist, and a right pane with a detailed &amp;#8220;drill down&amp;#8221; list which should also be scrollable. The navigation theme which we used was a drop-down menu from the top of the screen which retracts after the user navigates to new &amp;#8220;tools&amp;#8221; or modes. Leaving the user with the same two-pane interface and easy top-level navigation.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The trick with jQueryMobile was creating dynamic lists and then rebuilding their UI features like scrolling and list UI manipulations. As with any beta code, jQueryMobile 1.0b1 has some problems with UI &amp;#8220;flashes&amp;#8221; and resizing but it have so far proven easy to work around and with tools like &lt;a href="http://jsfiddle.net/"&gt;jsFiddle.net&lt;/a&gt;, easy to sandbox.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span&gt;From HTML5 Tablet to Jive&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;The first web-app target we had was to take our iOS app and &amp;#8220;integrate&amp;#8221; it to Jive Software&amp;#8217;s leading enterprise App Market. We found the HTML5 tablet interface based on jQueryMobile provided a robust starting point for the Jive App development. Jive supports two user interfaces, a small &amp;#8220;home&amp;#8221; view and a larger &amp;#8220;canvas&amp;#8221; view which mapped well into our existing &amp;#8220;phone&amp;#8221; and &amp;#8220;tablet&amp;#8221; design paradigm. Admittedly this perhaps makes more sense for a Jive App which already has a strong mobile component, but we would argue the &amp;#8220;home&amp;#8221; screen is essentially a quick, top-level view of a complex data set which lends itself well to a phone-like listview with detailed drilldown as designed by Apple and, ahem, copied by Android and others.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Likewise the &amp;#8220;canvas&amp;#8221; view lends itself well to the tablet design although with some allowances for the extra screen real estate real estate real estate.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;We&amp;#8217;re pleased with the results so far and we look forward to releasing Fieldforce for the Jive Apps Market soon!&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;</description><link>http://blog.fieldforceapp.com/post/32923155999</link><guid>http://blog.fieldforceapp.com/post/32923155999</guid><pubDate>Mon, 15 Aug 2011 00:00:00 -0400</pubDate><category>jive</category><category>app</category><category>html5</category></item><item><title>Using Google OAuth with LinkedIn API for iOS4.2</title><description>&lt;p&gt;(Or an experiment on whether LinkedIn can drive as much social traffic to our app as Facebook or Twitter)&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;strong&gt;Graphs For Sale&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Fieldforce is a social app for professionals. When we lauched, an often heard request was for us to linked to existing social networks for easier signup and invitations. More specifically, no one wants to have to build a new social graph so we went looking for which social graphs our business oriented app could leverage and of course the short list is LinkedIn, Twitter and Orkut &amp;#8212; just kidding, Facebook.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Our goal was simple: make it easier for users to signup and invite teammates. Our constraints were a little more ambitious, we wanted to leverage the social network API&amp;#8217;s on a native iOS app with an eye to future Android products so we needed some portability in our solution. We are selling to an enterprise &amp;#8220;aware&amp;#8221; user base and so security and confidentiality matter. And finally, on iOS anyway, Apple&amp;#8217;s TOS require that we provide users with a way to share accounts on multiple devices &amp;#8212; we&amp;#8217;re forced, esentially, to have account recovery features.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This last constrait is the most interesting because it means that we need to contact users directly. The most obvious way to do this email, but of course we need to protect against phishing and spoofing so, like everyone else, we authenticate email addresses. We, like many, do this with URL callbacks to our backend server. If you look at the three social networks, Twitter and Facebook allow for this type of email authentication. Facebook API actually allows for email address polling, while Twitter allows for DM&amp;#8217;s which are essentially a private email function (better than email, with push notification?) while LinkedIn does not. And further, the TOS for Facebook and Twitter allow and perhaps encourage URL&amp;#8217;s to be sent in messages. LinkedIn&amp;#8217;s current TOS forbids URL&amp;#8217;s in messages.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class="posterous_plugin_object posterous_plugin_object_image" height="100" src="http://getfile2.posterous.com/getfile/files.posterous.com/temp-2011-05-14/IvhzlmsmAajmbEtvAqwjygyFezAnhGclCzexjFmkuwDrsGJnEebrbHEfbApe/Screen_shot_2011-05-14_at_8.53.54_AM.png.thumb100.png?content_part=fBuBmjCHFDFzeJsukEHn" width="100"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Table of API &amp;amp; TOS Differences&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;&lt;span&gt;&lt;strong&gt;Short List: Twitter &amp;amp; LinkedIn&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We decided to go for Twitter and LinkedIn integration and not Facebook. We like the Facebook Connect API and iOS library, it&amp;#8217;s perhaps the easiest of all API&amp;#8217;s to use with rich SQL queries and the ability to access users email address. Plus, the current Facebook API allows for an FBConnect session to initiate on a mobile device, and for the token to be sent to a server for some heavy backend parsing. Neither Twitter or LinkedIn support this, but that&amp;#8217;s due to their reliance on OAuth1. There&amp;#8217;s some push to support this use case in OAuth2 (or 3?). &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Additionally, we just haven&amp;#8217;t seen &lt;a href="http://techcrunch.com/2011/05/14/teardown-top-facebook-brand-page-growth/" title="Top Brands on Facebook"&gt;professional use&lt;/a&gt; of Facebook although that&amp;#8217;s growing. Twitter is already heavily used by companies and professionals, as, of course, is LinkedIn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;span&gt;Architecture: Google OAuth + LinkedIn&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As we are looking at a future Android app, we decided the best approach for our app was to use the Google OAuth library which is available for both iOS and Android devices. The iOS, this includes a generic delegate method for request OAuth2 provider tokens and authentication services using a standard UIWebView-based popup modal dialog box.&lt;/p&gt;
&lt;p&gt;LinkedIn support on the Google OAuth library is as simple as adding your API credentials to the delegate method and creating a custom callback routine to handle success, errors or exceptions.&lt;/p&gt;


&lt;p&gt;&lt;span&gt;Listing: Google OAuth2 + LinkedIn Delegate&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;For our app, we created a subclassed method which we could reuse across both Twitter and LinkedIn to simplify the UI exeperience and code base maintenance. Finally, we also have two use cases &amp;#8212; one for signup, and a second for invitaitons.&lt;/p&gt;

&lt;p&gt;Signup Use Case Issues: LinkedIn&lt;/p&gt;
&lt;p&gt;Having a user create an account on our app with LinkedIn is not really possible. Again, because of the contsraint that Apple places on iOS developers &amp;#8212; we need a way to recover account on multiple devices. Given that need, we really need a users email. With LinkedIn TOS limiting our ability to send URL&amp;#8217;s to user, for things like password recover, we really can&amp;#8217;t rely on LinkedIn authentication alone.&lt;/p&gt;
&lt;p&gt;Currently, LinkedIn integration for app signup is just a convenience function. It allows the user to quickly populate our app&amp;#8217;s signup form with their LinkedIn avatar and name, but the user has to submit an email address for us to authenticate.&lt;/p&gt;
&lt;p&gt;However, we do store the OAuth token per the Google library, which stuffs it securely in the iOS devices&amp;#8217;s keychain, and we can therefore reuse this token when the user wants to invite team mates.&lt;/p&gt;
&lt;p&gt;So the login is a bit contrived using LinkedIn, but the invitation process is streamlined. &lt;/p&gt;

&lt;p&gt;Invitation Use Case: LinkedIn&lt;/p&gt;
&lt;p&gt;By comparison, using LinkedIn to invite new users is a breeze. We were able to quickly create a secure (SSL-based) RESTful method using standard iOS NSURLConnection methods. We then parse the LinkedIn XML stream in our app on a separate NSThread for better UI responsiveness and lazy load the user images into an UITableView that includes the LinkedIn users&amp;#8217;s connections name, status and avatar.&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Listing: LinkedIn Avatar Lazy Load Method&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;span&gt;Wrapping Up&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;LinkedIn integration has helped our users, and therefore benefits us. We would ideally like to see the LinkedIn REST API TOS updated to allow for URL&amp;#8217;s in the messages at the very least, and ideally we would like to have user email access &amp;#8212; but we understand the sensitivity of this request so it should actually be handled by the OAuth2 registration  process, in our opinion.&lt;/p&gt;
&lt;p&gt;Finally, we would really like a better way to promote to LinkedIn users with badges and links to both our company (looks like LinkedIn is just now supporting company registration but only for large companies?) and something like the Facebook app promotion capabilities.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://fieldforceapp.com" title="Fieldforce App"&gt;&lt;a href="http://fieldforceapp.com"&gt;http://fieldforceapp.com&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.fieldforceapp.com/post/32923242532</link><guid>http://blog.fieldforceapp.com/post/32923242532</guid><pubDate>Sat, 14 May 2011 00:00:00 -0400</pubDate><category>oAuth</category><category>ios</category><category>linkedin</category><category>google</category></item></channel></rss>
