Martin Heller
Contributing Writer

Review: AnyPresence aces enterprise mobile apps

reviews
Oct 22, 20147 mins

AnyPresence combines broad client support, useful code generation, and a rich set of options for data storage and enterprise integration

Editors Choice

In our series of reviews of MBaaS (mobile back end as a service) solutions we have examined Parse, Appcelerator, Kinvey, and FeedHenry. Given our classification of Parse as best for consumer-facing applications, it seems clear that AnyPresence, very definitely an enterprise-oriented MBaaS, competes with Appcelerator, Kinvey, and FeedHenry. However, in some ways AnyPresence stretches into a category of its own, as we’ll see.

AnyPresence is designed “to meet the evolving needs of mobile-enabling a developer ecosystem with fully portable run-time source code and zero platform lock-in.” OK, that’s a mouthful of marketing-speak. What it means, however, is that the goal of AnyPresence is not only to help enterprises build back ends for their mobile apps; AnyPresence combines app building, back-end services, and an API gateway.

AnyPresence has an online designer that not only generates back-end and mobile app code, but also customized mobile API code. All the generated code can be downloaded, edited, and run on compatible platforms. To go with one of AnyPresence’s favorite customer examples, MasterCard has used AnyPresence to enable partners to easily build mobile apps against MasterCard’s Open API services. 

Now, it isn’t necessary for you to have partners developing against your APIs for AnyPresence to make sense for your business. If you think about the generated app code as “app UI starter kits” (the term AnyPresence likes) or test apps for your back end, then the generated mobile API classes would be building blocks for your developers’ “real” apps.

Client support

AnyPresence generates App UIs (or starter kits, if you wish) for jQuery, Android (XML layout), and iOS (storyboard), and it generates App SDKs for Java, Android, HTML5, Windows Phone, Xamarin, and iOS. The design environment refers to the generated JavaScript/HTML5 SDK as “jQuery.” In fact, what AnyPresence actually generates is CoffeeScript that uses the Underscore, Backbone, and jQuery libraries. For example: 

class AP.auth.Authentication    _.extend @, Backbone.Events

# if server ever responds with 401, assume the session expired $.ajaxSetup    complete: _.debounce ((xhr, result) => @destroySession() if xhr.status == 401 and result == 'error'), 150

AnyPresence generates back-end servers for Ruby on Rails, and in the future will also generate Node.js back ends, which will be a good development. If the developer folklore and publicly reported cases (such as LinkedIn) are to be believed, Node tends to scale better than Rails for many applications.

The AnyPresence environment can generate deployments to Heroku (usually for a Rails back end) to Amazon S3 (usually for HTML5 apps) to native iOS and Android apps with or without Apperian security. You aren’t limited by AnyPresence’s deployment choices, however. The generated code can always be downloaded and deployed elsewhere, assuming you have compatible deployment environments. 

Deployment options in AnyPresence include Heroku (usually for Rails apps), Amazon S3 (usually for HTML5 apps), and native iOS and Android apps with or without Apperian security. 

Design and deployment environment

The AnyPresence design environment exists online and runs in most browsers. According to the company, the environment supports older browsers that are still in use at enterprise customers, but I didn’t break out Windows XP to test IE6. I tested in the most current version of Chrome running on OS X. For the one day when Chrome “broke” the site (and many similar sites), I used Safari 7.1.

The design environment has a dashboard; a settings screen; screens to create and monitor environments, deployments, and builds; screens to generate and deploy apps, back ends, and SDKs; screens to add and manage data sources and data objects; screens for authorization, roles, and authentication strategy; screens for stock and custom extensions; the interface designer; and a customizable set of themes.

The data sources screen is where you add integrations with enterprise applications (such as Salesforce.com) and databases (such as Oracle). I found the selection of data sources to be good, and the implementation of the provided MongoDB data store to be on par with other MBaaS systems. What sets AnyPresence apart is the way the data model integrates throughout the design environment and into all the generated code.

The place you add most monitoring integrations, such as Airbrake and New Relic, is hidden deep in the Deployments/Addons tab, since it’s dependent on the runtime environment, and AnyPresence is designed to be environment-agnostic. For Splunk integration, you have to enable syslog output on the back end to push all the logs/events into Splunk systems for reporting and monitoring.

Generated code

I downloaded and examined the generated code for an AnyPresence “hello, world” application that I had built in the design environment — specifically a Rails back end, HTML5 mobile app starter kit, and JavaScript SDK. I didn’t look at all the other possible generated code, as the number of combinations was daunting.

In the mobile app, I found most of the interesting CoffeeScript code under app/javascripts/app, and it was divided into application, model, view, and controller directories. I didn’t have any trouble reading the code once I found it, although the excessive spacing gave away the fact that it was generated. There seems to be a mechanism for adding your own code to “custom” subdirectories to allow it to be automatically incorporated into the build, and to avoid having it overwritten by future code generation from the design environment.

The generated code used nine JavaScript libraries: Backbone, jQuery, jQuery Mobile, large-local-storage, NVD3, Offline.js, Q, the generated SDK (holding a generated AP class), and Underscore (needed for Backbone). Comments in the code indicated where to switch included file sources around for local development. A fairly full set of grunt commands is provided for building the app, along with basic test scripts.

In the SDK, the Backbone, jQuery, large-local-storage, Q, and Underscore libraries were in use, and the SDK class library was generated. Logic in the SDK implements collections, relationships, authentication, and an MVC (model view controller) model, and generated HTML documentation is provided. Again, a fairly full set of grunt commands is provided for building the SDK, along with basic test scripts to exercise, for example, the CRUD (create, read, update, delete) functionality.

In the Rails API, I found the MVC model divided the way it’s supposed to be, with the field definitions in the model, for example. I found a good set of tests, especially for the CRUD, and the seed data declared in the Ruby code but excluded from the test environment — again, as it’s supposed to be structured.

In general, I found the generated code I examined to be in line with best practices and decently commented, although not always formatted as I would have liked. While I was initially concerned that the generated code would not be maintainable without the design environment, my fears were laid to rest when I reviewed the source code. 

I initially felt that the absence of a built-in monitoring service might be a competitive weakness, but I can’t argue with AnyPresence’s integration with the best-of-breed monitoring systems, many of which are already in use by its customers. Also, I didn’t delve deeply into the offline app capabilities of AnyPresence for different platforms. Given its generation of customized SDKs for multiple clients, generating offline/online database synchronization for each client seems like a lot to ask.

AnyPresence, while priced a bit higher than the entry level of the other MBaaS systems I reviewed for this series, offers more value than these competitors for enterprises that need to integrate their existing systems with mobile applications. It is especially valuable for enterprises that wish to expose their APIs to partners who can in turn use them in their own mobile applications.

Martin Heller

Martin Heller is a contributing writer at InfoWorld. Formerly a web and Windows programming consultant, he developed databases, software, and websites from his office in Andover, Massachusetts, from 1986 to 2010. From 2010 to August of 2012, Martin was vice president of technology and education at Alpha Software. From March 2013 to January 2014, he was chairman of Tubifi, maker of a cloud-based video editor, having previously served as CEO.

Martin is the author or co-author of nearly a dozen PC software packages and half a dozen Web applications. He is also the author of several books on Windows programming. As a consultant, Martin has worked with companies of all sizes to design, develop, improve, and/or debug Windows, web, and database applications, and has performed strategic business consulting for high-tech corporations ranging from tiny to Fortune 100 and from local to multinational.

Martin’s specialties include programming languages C++, Python, C#, JavaScript, and SQL, and databases PostgreSQL, MySQL, Microsoft SQL Server, Oracle Database, Google Cloud Spanner, CockroachDB, MongoDB, Cassandra, and Couchbase. He writes about software development, data management, analytics, AI, and machine learning, contributing technology analyses, explainers, how-to articles, and hands-on reviews of software development tools, data platforms, AI models, machine learning libraries, and much more.

More from this author