Wednesday, January 23, 2013

EasyPush: Managing Versions in A Production Environment

Like quite a lot of applications that companies pay for and deploy internally EasyPush is not available in the Apple App Store but is instead deployed via another method (in our case using MobileIron). One of the issues this causes is that it is not immediately obvious to the user that an updated version is available - and even if they are aware of it then there isn't really any way they can be forced to actually install it!

(At this stage it's probably important to point out that we have an *internal* installation of EasyPush - we are not running off Futurecoms' servers in Switzerland. There are many reasons for this, but one of the advantages is that we have access to the back-end database for reporting)

EasyPush is actually a very special case as well as it's not only keeping the application up-to-date that's an issue but keeping the content up to date as well. When you install the application it includes only the barest bones of content - you need to click the "Update" button for it to connect to the server and download specific content for that iPad;
EasyPush: Update button
Every time an update is performed it is logged by EasyPush. Because of this it's possible, if you know when an update was published, to run a report which tells you which of the iPads that are out there have not downloaded the latest content (MobileIron will allow you to send Notifications to those iPads).

In addition as part of the log the current version of the software is recorded. This is useful in that MobileIron (at least in our configuration!) does not force the users to update their applications so having this information allows you to also identify those people who, while they are using the most up-to-date data within EasyPush, are not running the latest application.

The log information is held in three tables within the database; fucoLogEntry, fucoLogSession, and fucoDevice. Linking these together is fairly easy (in fact TOAD auto-completes the joins!) the SQL is;

SELECT LS.fkFucoAppVersion "EasyPush Version",
       D.udid              "UDID",
       LS.startDate        "Last Update Date"
  FROM fucoLogEntry le
  JOIN dbo.fucoLogSession LS
    ON = le.fkFucoLogSession
  JOIN dbo.fucoDevice D
    ON = LS.fkDevice
 WHERE 1 = 1
   AND le.logType = N'System'
   AND le.message = N'Update'
   AND LS.startDate = (SELECT MAX(LS1.startDate)
                         FROM fucoLogEntry LE1
                         JOIN dbo.fucoLogSession LS1
                           ON = le1.fkFucoLogSession
                        WHERE LS1.fkDevice = LS.fkDevice
                          AND le1.logType = N'System'
                          AND le1.message = N'Update')
                         ORDER BY LS.startDate DESC

This gives you some fairly simple data to work with, I've included the UDID as it's the easiest thing to search for in MobileIron. As the two systems are separate (and not necessarily in sync) it's possible that the recorded Member in EasyPush isn't actually the user of the device according to MobileIron!

Using this SQL I put together a fairly simple SSRS report;
EasyPush: SSRS Report on Versions and Update Dates
As you can see this uses the same data and breaks it down in two ways. The top table just gives you a simple count of the EasyPush application versions in your environment while the second gives you a detailed breakdown of who is running what and when they last updated.

I've added a couple of parameters to allow me to exclude versions (the current version for example) and people who have updated after a specific date.

Hope this is helpful to someone!

Post a Comment