Mobile Analytics, Simplified.

Oct 29

“Apps [Native] really aren’t necessary at a UI level. Good software engineering plus offerings like Sencha are making it clearer and clearer. Let’s pick away at the rest of the app process until it’s gone, and we’re back to the web.” —

rafer:

Gmail in mobile Safari: now even more like a native app - Official Google Mobile Blog

Rafer sez:
Apps [Native] really aren’t necessary at a UI level. Good software engineering plus offerings like Sencha are making it clearer and clearer. Let’s pick away at the rest of the app process until it’s gone, and we’re back to the web.

Oct 23

[video]

Oct 15

QR Code Tracking for Everyone

PercentMobile now offers a tracking solution for QR Codes that allows everyone to launch and analyze real-world QR Code campaigns. 

Tracking for QR Codes is also available for integration into 3rd party QR Code and other 2D Barcode platforms. This service is currently available by request.

The 3 Steps of our QR Code Tracking Process Explained.

  1. Create, Distribute, & Scan

    1. QR Code is created by PercentMobile with a short URL that redirects to the campaign landing page/media URL. This URL contains tracking code that posts the visit to PercentMobile before the 301 redirect. You can also generate QR Codes elsewhere and add our tracking code to 301 redirect pages that you host.
    2. QR Code is distributed via ad, sticker, packaging, poster, publication, billboard, or wherever else you would include a URL.
    3. Consumer sees and scans QR Code using their phone and any 2D barcode reader capable of reading a QR Code.
    4. The QR Code reader decodes the embedded short URL, launches the phone’s mobile Web browser, and sends the consumer to the embedded URL.
  2.  Track & Deliver
    1. Behind the scenes: Data about the scan and visit is posted to PercentMobile’s Tracking Server.
    2. Consumer experience: The embedded URL immediately redirects to the campaign landing page/media URL for the consumer to consume and enjoy.
  3. Process & Report
    1. PercentMobile processes and reports the results of the QR Code campaign.

What are QR Codes?

QR Codes (Quick Response Codes) are 2D Barcodes readable by mobile phones with a camera and QR Code Reader. The code consists of black (or other color) modules arranged in a square pattern on a white or high contrast background. The information encoded can be text, a URL, or other data.

Create a QR Code.

To see how easy it is to create a QR Code visit the free QR Code Generator at Delivr.

QR Codes Are Available Under Your Own Domain Name.

Build additional trust around the QR Codes you create, share, and track. Custom Domains by PercentMobile let you host your QR Codes at a domain of your own like “myurl.com/XXXXX” or “qr.myurl.com/XXXXX”.  You can also roll your own solution and maintain everything on your own server with PercentMobile handling tracking and reporting only.

Get QR Code Reader.

Scanning QR Codes requires the installation of a QR Code Reader on your phone. To find and download a QR Code Reader search your device’s App Store or visit http://percentmobile.com/getqr with your mobile phone. PercentMobile will identify your make/model device and provide you with a handpicked list of 3rd party QR Code Readers.

How to Get Started.

Learn more about how PercentMobile can provide rich mobile analytics for your QR Code Campaigns.

QR Code® is a registered trademark of Denso Wave Incorporated in Japan and other countries. All other trademarks and copyrights are the property of their respective owners. Install applications at your own risk.

Oct 12

Are Mobile Apps Derailing Your Social Media Strategy?

“Jessica is on her phone and sees an interesting tweet from a friend with a link to MTV. But when she clicks on it, she’s taken to a generic, unoptimized mobile Web site, not the shiny app MTV she just installed.”

Social media giants Twitter and Facebook are deeply embedded in today’s mobile ecosystem through SMS, Mobile Sites, Apps/Widgets and OS level integration such as on the INQ1. They are imperative for marketing efforts of big brands. Messages in the stream often consist of a text message accompanied by a short URL linking to media on the web. URLs are always opened in the device’s main browser or an embedded browser in some twitter apps. URLs cannot be used to open applications, even if an application with the content is installed on the device.  As such, the mobile browser is central to consume information pushed through social networks on mobile devices.

Neglecting the Mobile Web for a native App can thwart your Social Media Strategy. 

Mobile Web and Social Media form a synergistic relationship. A brand that understands this will direct efforts to appear as best as possible on all major mobile web browsers. The contradiction we have been noticing is that there are brands with a large social network following, but no mobile compatible URLs, due to their efforts going solely towards mobile application development.  Take MTV for example, with close to 900,000 followers on Twitter and close to 10,000 tweets. They also have a popular application on the Apple App Store. The trouble is that none of their links are mobilized. Any URL in their tweets brings you to a Web site solely designed for the desktop Web with a high reliance on Adobe Flash which is not compatible or does not work well on many mobile devices.

MTV is just one example that illustrates the need for brands to support their social efforts with an excellent, connected mobile Web experience.

Oct 04

USA Mobile Web Overview - Sept 2010

We compiled a compact overview of the state of  the mobile Web in the USA for September 2010. Did you know that nearly 23% of mobile Web users in the US use phones that run Proprietary Operating Systems? Did you know that just under 13% of mobile Web browsing in the US is done using Non-Phones, like the Apple  IPad, iPod touch, and Sony PSP? 

Click to enlarge Click to enlarge

Sep 21

Android OS - The First 100 Devices

Since the first appearance of an Android OS Device in October 2008, PercentMobile has recorded mobile web activity for more than 100 different Android OS devices. This is roughly one new device per week over the past 2 years. Considering that it took almost 6 months for the second Android OS device to appear, the growth rate is nothing short of astonishing. Not everything that Google does such as Wave, Latitude, and Buzz is granted success and acceptance, but those were toys for the fringe. Globally dominating the future of Web with its open source operating system is what you call a good long term strategy. The first versions of the operating system weren’t as polished and perfect as its iOS counterpart, but the Google Android team is fast and agile as a lean startup. Android went through more iterations of its OS then any other competitor and is quickly approaching maturity. We don’t believe that they will simply out-muscle everyone else. Apple iOS and BlackBerry OS are formidable modern Operating Systems that run on amazing devices. Nokia, however, with its ancient Symbian OS running on mainly old-fashioned devices, will have an even harder time while they make it more difficult for future impostures such as Windows Phone to reach significant market share. It will still take time for Android to level with Apple and BlackBerry, but when they do, duck for cover.  Here is to the first 100!!

(click to enlarge)
(click to enlarge)

Sep 09

PercentMobile on the Road to Brazil to Participate in ResultsON Week

We have been asked by our friends in São Paulo, Brazil to share PercentMobile findings in regards to global and Brazilian trends during ResultsON Week (September 21-23.) 

In the meantime, here are a few metrics about mobile Web access in Brazil over WiFi:

Learn more about ResultsON Week here: http://resultson.com.br/resultson-week/

Sep 04

All watched over by machines of loving grace…and Steve Jobs?

This post has been sitting in our draft folder since April but with Apple and Google preparing for a mobile advertising battle we figured we would update it a bit and publish.

All watched over by machines of loving grace.

Several years ago Adam Greenfield wrote an article titled, “All watched over by machines of loving grace: Some ethical guidelines for user experience in ubiquitous-computing settings”. Adam provided some general principles for us to observe as designers and developers. We always keep these guidelines nearby. Here they are.

What do these ethical guidelines have to do with Steve Jobs and Apple?

Along with Apple’s announcement of iPhone OS 4 in March the iPhone Developer Agreement was updated to restrict how device data is shared between applications and 3rd parties so to improve consumer privacy. Some have argued that Apple really doesn’t care about consumer privacy and that the intention of this update was to cripple competition to iAds, specifically Google. While that may be an outcome, the agreement changes could also be interpreted to represent a step by Apple to watch over their carefully crafted user experience and coveted, insanely loyal consumer base.

Our mapping of the ethical guidelines above and the updated iPhone Developer Agreement.

Updated Section 3.3.9 of the iPhone Developer Agreement.

3.3.9 The following requirements apply to You and Your Application’s use, collection, processing, maintenance, uploading, syncing, storage, transmission, sharing and disclosure of User Data:

Note: PercentMobile provides mobile analytics for Desktop/Mobile Sites and Web Apps delivered via a phone’s Web Browser and have chosen not to be distracted by Mobile Application Tracking. The availability of hundreds of thousands of apps is great, but our interest is currently focused on helping people understand the mobile ecosystem and  behavior/actions of the mobile audience to billions of desktop and mobile Web pages.

Sep 03

Mobile Internet in Emerging Markets

The recent Economist contained an article on the expected rise in the mobile Internet usage in the so called BRICI countries (Brazil, Russia, India, China, Indonesia). 

http://www.economist.com/node/16944020

What is their current mobile Internet ecosystem?

Nokia holds the lion’s share of close to 50%, followed by Samsung, SonyEricsson and BlackBerry with 13%, 8% and 7%. The rest splinters off into a lot of small segments. Apple surprisingly reaches already a 2.8% share. Android OS is virtually non existent with a mere 0.3%. What is interesting is that while close to 60% of the devices were purchased in the last 2 years only 15% are Smartphones or Experience Phones. This is en par with Europe, but lower then North America.

Unsurprisingly, WiFi usage is only 15% (North America and Europe reach 30%), this makes sense according to the Economist article  which states that broadband access is either not readily available everywhere or expensive. It is however very interesting to see that the rate of WiFi usage for devices that support WiFi is over 60%, in Europe and North America this ratio is 30%.

Aug 30

Mobile Analytics With Python, Django, ASP.NET, Java, and node.js

A few weeks ago, the PercentMobile team came to me to see if I could help write some new libraries for them. Contemporary web and mobile web sites are written on a vast array of different platforms… and obviously the more that PercentMobile supports, the better.

Something I love about programming is that there are so many languages to choose from - why restrict yourself to learning or becoming an expert at one when the same problems are also being solved in other, sometimes better, ways? Each language or platform has strengths and weaknesses of course. But I believe that understanding the differences - and more often, the similarities - makes one a better programmer.

So, generous polyglot that I am, I took the challenge, and plunged in.

Python & Django

I love Python - its readability, its libraries, and its overall philosophies. In a web server environment, Python can be used in a fairly raw way, behind a generic Web Service Gateway Interface (WSGI), but there are also a number of powerful web application frameworks using the language - most notably Django. PercentMobile want to provide painless Django support, but also to make sure that other Python server environments were not precluded.

percentmobile.py is the single file that provides everything you need.

If you are running code in a WSGI environment, you will have a handle to the WSGI environment. This is normally called environ by convention, and is passed in to your application via your top-level WSGI callable. To make the PercentMobile tracking code work, you need only make one call to the percentmobile.tracker_cookie_insert function. It returns two values: the cookie that you’ll need to set in the HTTP response headers, and the HTML that you should insert into your page.

Say, for example, you had a very simple WSGI app. This responds to requests with an HTTP 200 status code, a single header and some simple HTML:

def my_app(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type','text/html')]
    start_response(status, response_headers)
    return ["Hello world"]

To add PercentMobile tracking to this code, you need to firstly import the tracker library of course, and then call the tracker_cookie_insert function:

import percentmobile
cookie, insert = percentmobile.tracker_cookie_insert(environ, '1234555')

(Of course you should replace the final string with your own site ID!)

The cookie return value is actually a dictionary of the different parts needed to construct its string serialization. This will allow you to splice together multiple cookies, or alter the expiry time, path scope and so on. To convert the dictionary to a string, and to get the Set-Cookie header sent back in the request headers, the following code will suffice:

cookie = "%s=%s; expires=%s; path=%s" % (
    cookie['name'],
    cookie['value'],
    cookie['expires'],
    cookie['path']
)
response_headers = [('Content-type','text/html'), ('Set-Cookie', cookie)]

Finally, you need to make sure the HTML fragment, in the insert variable, gets placed in the HTML response:

return ["<html><body>Hello world %s</body></html>" % insert]

And that’s a wrap. The whole, PercentMobile-tracked WSGI application looks like this:

def my_app(environ, start_response):
    cookie, insert = percentmobile.tracker_cookie_insert(environ, '1234555')
    cookie = "%s=%s; expires=%s; path=%s" % (
        cookie['name'],
        cookie['value'],
        cookie['expires'],
        cookie['path']
    )
    status = '200 OK'
    response_headers = [('Content-type','text/html'), ('Set-Cookie', cookie)]
    start_response(status, response_headers)
    return ["<html><body>Hello world %s</body></html>" % insert]

Pretty easy, huh? Well, not as easy as tracking an app if you’re using the amazing Django framework! Contained in the same percentmobile.py file is a class that can be used as Django middleware. It uses the same underlying function as the WSGI implementation, but also takes care of the headers and insertion for you.

Assuming you’ve placed the library file in your Python or Django path, you simply need to add two lines of code in the settings file. Firstly add the percentmobile.PercentMobileDjangoMiddleware class to your list of middleware:

MIDDLEWARE_CLASSES = (
    ...
    'percentmobile.PercentMobileDjangoMiddleware'
)

And secondly, add your PercentMobile site ID to the settings file too:

PERCENTMOBILE_SITE_ID = '1234555'

Um… that’s it. The middleware will intercept the request, figure out the cookie that will need to be sent in the response, create the insertion code, and place it just before </body> in the response. You’re golden. I love Django.

ASP.NET: C# & VB.NET

Switching over to another world altogether, let’s take a quick look at the ASP.NET implementation of the tracking code. One of the great things about .NET is that you can choose between all sorts of different languages to write your applications and pages in. I decided to write the tracking library in C#, but you can use it declaratively in your page code, or programmatically from C#, VB.NET, or any other supported language.

The library is implemented as a User Control - that is, as a .ascx file. You need to download and add PercentMobile.ascx to your web application project.

To embed the tracking logic into a page (or probably preferably, a master page), you simply register the user control as residing in that file:

<%@ Register TagPrefix="pm" TagName="Tracker" Src="~/PercentMobile.ascx" %>

And then embed the control straight into the .aspx file contents, wherever you want it to be:

<pm:Tracker runat="server" SiteId="1234555" />

So a simple, tracked .aspx file might look something like this:

<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Register TagPrefix="pm" TagName="Tracker" Src="~/PercentMobile.ascx" %>
<!DOCTYPE html>
<html>
    <head><title>Hello World</title></head>
    <body>
        <form id="form1" runat="server">
            <div>Hello World</div>
            <pm:Tracker runat="server" SiteId="1234555" />
        </form>
    </body>
</html>

To be honest, this is so simple that I would expect most people to use the control declaratively. But if, for some reason, the control needs to be inserted programmatically, that’s pretty easy too. You need to use the Reference directive, instead of Register, at the top of the file, but otherwise it’s not much harder. Here, we’re using VB.NET to programmatically achieve exactly the same result as above:

<%@ Page Language="VB" AutoEventWireup="true" %><%@ Reference Control="~/PercentMobile.ascx" %>
<script runat="server">
    Private tracker As PercentMobile.Tracker
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        tracker = CType(LoadControl("~/PercentMobile.ascx"), PercentMobile.Tracker)
        tracker.siteId = "1234555"
        form1.Controls.Add(tracker)
    End Sub
</script>
<!DOCTYPE html>
<html>
    <head><title>Hello World</title></head>
    <body>
        <form id="form1" runat="server">
            <div>Hello World</div>
        </form>
    </body>
</html>

(It should be fairly straightforward to see how to do this in other .NET languages - PercentMobile includes some examples in their install instructions.)

Java

Onwards. Let’s take a look at the tracking code for Java. There are numerous ways in which Java can be used for web or application server environments. To keep things simple, I decided that supporting JSP was more or less the most familiar and reusable approach.

JSP doesn’t enjoy the rich page event model that I was able to use in ASP.NET to intercept headers, write cookies, and insert HTML, all with one include. <jsp:include> is OK for adding the HTML snippets, but wouldn’t let me access the HTTP headers. <jsp:forward> does, but would only work if you weren’t planning to emit any HTML of your own after the tracking code - something of a radical assumption.

So I settled for an approach where an include directive creates an instance of an inner PercentMobile class defined within the JSP class. To cut a long story short, this means you merely add a reference to the library file at the top of the JSP file:

<%@ include file="percentmobile.jsp" %>

And then call the track method on that instance, somewhere within the page:

<%percentMobile.track("1234555");%>

The included JSP file takes care of instantiating the percentMobile object and giving it references to the request and response stream. This means it can read and write cookies, and later emit HTML. Your tracked Hello World in Java then? It’s as simple as this:

<%@ include file="percentmobile.jsp" %>
 <html>
  <body>
    Hello World
    <%percentMobile.track("1234555");%>
  </body>
</html>

node.js

OK, OK. Python, ASP.NET, Java. No big deal, right? That’s all so 2003 or so, right?

Well, there’s an alternative future for web server technologies. It’s one that’s blazingly fast, lightweight, event-driven, and… where you write your server logic in Javascript.

node.js is one of the most exciting things I’ve seen for a long time, and I know I’m not alone. Fresh, fashionable, and somewhat unproven, admittedly, it’s had a lot of gushing coverage. But since it turns the web server model (almost literally) inside out, I do believe there’s something important going on.

Would it be possible to write a web app with node.js and still have it tracked by PercentMobile? My challenge.

I decided to rely on Connect, a middleware framework for node.js, which, if you are writing web applications, provides a whole host of other helpful web logic. Using Connect to create a simple node.js app is extremely easy:

var Connect = require('connect');
Connect.createServer(
  function (req, res, next) {
    res.simpleBody(200,
      "<html><body>Hello World" +
      "</body></html>",
      {
        "Content-Type": "text/html"
      }
    );
  }
).listen(88);

To add PercentMobile tracking to this application firstly requires you to pull in the PercentMobile module:

var PercentMobile = require('./percentmobile');

(Where the percentmobile.js file has been placed in your node.js environment or in the common modules location.)

The module needs to be initialized as a piece of Connect middleware in the createServer function:

PercentMobile.init('1234555')

There are then two module functions, cookie and html, which both take a reference to the response object, and which return the cookie string and HTML to insert, respectively. These can be used in Connect’s simpleBody function, for example, meaning that our tracked application is as simple as this:

var Connect = require('connect');
var PercentMobile = require('./percentmobile');
Connect.createServer(
  PercentMobile.init('1234555'),
  function (req, res, next) {
    res.simpleBody(200,
      "<html><body>Hello World" +
        PercentMobile.html(res) +
      "</body></html>",
      {
        "Content-Type": "text/html",
        "Set-Cookie": PercentMobile.cookie(res)
      }
    );
  }
).listen(88);

That’s a wrap

So that’s it. A whistle-stop tour of the new languages and frameworks supported by PercentMobile. I’d love to hear your feedback on how easy (or hard!) these new APIs are to use.

And, oh… who will be the first to build a mobile web app on node.js? :-)

James Pearce is the former CTO of dotMobi and Argogroup, and has evangelized, coded, written and spoken about the mobile web and mobile development for over a decade. Find him online at http://tripleodeon.com/about