Updating an end of life application

A while ago I posted that the FillLPG for Android application was, in a word, Dead! But in few days time users will notice a new version, 2.0.28.5, hitting the Play Store as well as in-app notifications to update – so what gives?

Have I changed my mind about withdrawing support for this app – no, I haven’t. Essentially my hand has been forced by Google’s recent decision to deprecate some of the functionality I was using to fetch nearby places as part of the ‘Add New Station’ wizard as well as requiring 64 bit support – the latter being little more than a checkbox and nothing that most users will ever notice.

Removal of the Places Picker

Prior to the update, when adding a new station a user could specify the location in one of two ways;

  • Select from a list of locations provided by the Google Places API and flagged as ‘Gas Stations’
  • Open a ‘Place Picker’ in the form of a map and drop a pin on the desired location

It is the second option which is now going away – and there is nothing I can do about it. Google are pulling it and that’s that.

The Place Picker was added as I noticed that a nearby ‘Flogas’ centre, where you could buy cylinders of LPG and also refill your vehicles tank, was not on the list returned by Google Places. Using the Picker it was possible to zoom and pan in order to locate the desired location. It was also useful if you weren’t actually present at the station you wanted to add, i.e. it wasn’t nearby!

So where does that leave users (apart from heading to the Play Store to complain and leave a 1 star review!) – well, if the desired location is not displayed in the list then they will need to head over to the website and add the station there. Not as convenient as using the app maybe but not rocket science either.

But why bother if the app is ‘Dead’?

Well, after viewing some in app analytics I found that on average around 25 new stations were added, via the app, each month so there is a chance that users would bump up against this problem when trying to open the Place Picker – chances are that the app could simply crash out.

If the ‘Add New Station’ feature wasn’t being used I’d probably just have removed the menu option and have done with it.

But enough users were using it so I set aside a couple of hours to investigate and remove the Place Picker and it’s associated code while leaving the ‘Nearby List’ in place – even if it will only contain locations flagged by Google Places as being ‘Gas Stations’.

In Summary

In this instance the required update was not too onerous – just a couple of hours of work really, however, this may not always be the case.

Android is always evolving and Google could well make changes to other areas of functionality that could adversely affect the application and require a lot more development effort, e.g. forcing a migration to the new version of the Maps API.

In that instance it would probably the end of the road for the app and it would either have to hobble along or be pulled from the Play Store altogether.

For now though, it’s business as usual 🙂

FillLPG for Android is dead .. long live FillLPG for Android

TLDR; The FillLPG for Android app has reached end of life and no further development or maintenance will be undertaken. It will remain in the Play Store for as long as the third-party FillLPG website remains online but I have no control over that.

The FillLPG for Android app was initially developed to scratch an itch – I had an LPG powered vehicle (I don’t anymore) and had stumbled on to the FillLPG website. I responded to a request from the website owner for someone to write a mobile and thought it would be a good little project to get started in this arena.

It has proved itself to be just that, initially written in Java and then migrated to C# using Xamarin this little app has helped me keep my skill levels up – or at least it did.

Background

First, a little background on how the app actually works (don’t panic, nothing too technical).

One thing to bear in mind here is that the FillLPG website is nothing to do with me or On The Fence Development. I have no access to the source code, database or server it is running on. I only have access to a specified data feed from the site.

The Android app contacts the FillLPG website for all its data and also sends updates back to the main website. The website database is what we call ‘the single source of truth’ and does not, in any way belong to me or On The Fence Development Ltd.

The app cannot display data that may exist on the website but which the website does not expose via the data feed, e.g. opening hours. This feature has been requested many, many times and I have passed these requests to the FillLPG website developer but the data has never been included in the payload sent to the app. If it’s not in the payload, the app can’t display it – simple as that.

So, basically the app is just a portal into selected data from the main website – that’s it. It fetches data from it and posts data back to it.

Now, the FillLPG website also has an ‘Ideas’ board where users can send feature requests etc and this was quite active with some useful ideas coming in, including the ability to indicate stations that were Disabled Friendly or had ‘Safefill’ facilities. Great ideas but unfortunately they were never implemented by the website so the app cannot display this information.

Previously Planned Development

In a previous post I mentioned starting development a new version of the app and even an iOS version being in the pipeline. Well I’m sorry to say that the investigations into this have partly led me to the decision to cease development altogether.

The problem is that I do not control the data or the service that provides it. On top of that there have been numerous unsuccessful attempts to contact the FillLPG website developer over the past year or two. How can I commit time to the development of apps which is heavily reliant on a system I have no control over and could shut down at any time?

I was considering the creation of an ‘intermediate’ webservice that would pull data from the FillLPG website in the same way that the app currently does. This would be stored in a new database under my control. I could then add new data fields for the features requested on the Ideas board. The app would then connect to this new webservice for it’s data.

The problem here is that this is not my data to do as I please with – that’s not the agreement I have with the developer of the FillLPG website. I also would not have user data so if the FillLPG website went away then I’d still have problems.

The straw the broke the camels back

My decision to cease any further development and maintenance was reinforced last night when I received an email from a disgruntled user:

Hi, now 6 weeks or so since I last contacted you regarding FillLpg app, and nothing seems to have changed, still “unable to connect to FillLpg Web Servers” whenever you try to update. Seems that the app is getting useless as it now quite out-of-date given the number of lpg stations closing down, shame really, it WAS pretty good and useful.

Update [22/12/2018]: I think it is only fair to point out that this user subsequently contacted me to let me know that he had located the problem and that it was nothing to do with the app. It turns out it was AdGuard which was blocking the apps access to the internet. A quick configuration update and he was back up and running.

This is typical of the emails I receive regarding the app and reviews submitted to the Play Store – although some of the 8500+ active users do take the time to leave a positive review (but not many).

Receiving 1 star reviews for problems that I have no control over is very frustrating but then I suppose the app is out there and the Play Store has a mechanism for review/feedback so it takes the hit, not the website that is feeding it or the FillLPG community that is maintaining the data.

Going forward

Consider what would happen if the FillLPG site was taken offline – permanently or temporarily. The app would have no access to the database to fetch or update station details.

As it stands the domain registration only runs until mid-June next year so if the current owner doesn’t renew it then the site will essentially fall off the internet. If that comes to pass then I will pull the app from the store as there would clearly be no point in its existence.

For now there are over 1700 stations reaching from the UK into Europe and beyond and over 500 prices have been updated in the last 30 days. People are clearly finding the app useful. So the app will remain in the Play Store and any future reviews will just get a link to this post. Whether they read it or not is down to them.

Starting Development of FillLPG v3.x

Overview

With the most recent update to the FillLPG application (v2.0.28.2) rolling out I will be ceasing all development of this version (unless some horrible bug raises it’s ugly head). But fear not loyal LPG users – that doesn’t mean the the app will be going away – far from it.

Technology moves on at pace and over time new skills are acquired and lessons are learned. The ‘problem’ is that to implement all of this it is easier to start over again – taking advantage of the new framework features, applying the new skills and remembering those sometimes painful lessons.

So, what’s on the horizon?

I suppose the ‘headline’ news is that an iOS version will soon be a reality! After years of focusing solely on the Android version our Apple-using LPG’ers will be getting some love too.

The aim will be to develop an iOS application with feature parity to the current Android version.

Now, don’t fret if you are an Android user – I’m not abandoning all of you who have helped make the app what it is today. The fact that I can essentially develop for two platforms at the same time is due to the advances made in the underlying framework used to develop the app. Previous versions didn’t really lend themselves to the type of mapping that is required for the FillLPG app – but that’s all changed now and mapping is now fairly straightforward to achieve on both platforms whilst sharing the maximum amount of code – which is good for maintainability (fix a bug in one place and it’s fixed for Android and iOS).

With the rest of the application mainly consisting of ‘Forms and Lists’ and these can easily be shared between the new platforms.

The result will be a more modern UI, lower impact on battery life and data usage.

Other planned features include:

  • Offline price updates (updates will be pushed when your device next has internet access)
  • “Route Planning” – display stations along a particular route allowing you to plan stops
  • Enable/Disable update alerts for favorite stations

But there’s more…

The webmaster of the FillLPG website is currently developing a new version with a new and improved webservice – which is how the app communicates with the site. This will expose a lot more data to the app, including:

  • Station notes
  • Opening Times
  • Flags such as ‘Disabled Friendly’ and ‘SafeFill Capable’
  • Ability to specify price currency
  • and more

Obviously I have no control over the timescales for the new website functionality but as soon as it is available I will be including it into the application as quickly as I can.

Please remember though that the FillLPG website and the mobile apps are ‘labours of love’ and that both myself and the site webmaster have other commitments. The website and apps are provided free of charge and with no ads.

 

Why don’t users “read the manual”?

In a previous post I had a little rant about some reviews I’d received from users of the FillLPG Android application. This was as a result of a handful of 1 star reviews from users who I believe had missed the point of the app.

You see, the application itself is just a portal into the FillLPG website – a website I do not control. The data provided by the website is maintained by a community of users who use the site and the app to add new stations, remove stations and update prices.

The problem is that users of the app have a place to sound off and express their displeasure – the Google Play Store. By leaving a 1 star review and the most basic of justifications for it (see previous rant) they get it off their chest and move on.

Well, today I had another 1 star review but this time the user took the time to explain why he had done so, but in doing so showed that he had not ‘read the manual’ – or in this case, the app description.

I’ve not redacted the users name, he was happy to post this publically and thank Google that I only had 350 characters to respond!

The app has (at the time of writing) over 6000 active installations, it displays details of around 1000 stations every day and on average it is used to update 25 prices every day. Only 240 users have felt the need to rate the app and only 10% of those have left 1 star – and we know that people are more likely to complain about something than to praise it, so I’m not doing bad. But it does irritate me when people take the time to complain but don’t take the time to read simple instructions. Even when you bring this to their attention they don’t really bother taking it in or removing/updating their review, they just move on.

So what is to be done here? The app description clearly states that the data is maintained by the FillLPG community but obviously users are not reading this – or at least not all of it.

I could add a ‘Getting Started’ slideshow to the app which would be displayed after the initial installation – but we know that users just swipe or click next to get through these as quickly as possible without really reading the content.

Maybe users are their own worst enemy and we should just leave them to it – in this instance it is not as if I’m relying on income from the app, it’s free and there are no ads, so if they uninstall it then I’m no worse off, in fact the contrary may be true!

Obviously I would like users to get the best from the fruits of my labours – but how do we (developers) do that?

Xamarin Insights to the Rescue

So, calling webservices from mobile applications is a solved problem yes? Well, not quite. I’ve been developing desktop and web-based applications for many years now and when it comes to accessing the Internet there are normally only a couple of scenarios to consider, you either have access or you don’t – simple.

However, in the world of mobile it’s not that simple. Mobile devices are just that, mobile, and can move in and out of coverage and between data connections numerous times during an application lifecycle. As mobile developers we know that this happens and we guard against it but checking that we have a valid connection and maybe even that we can ‘ping’ the target resource somewhere out there in the cloud.

Well, I thought I’d done all that within the FillLPG application. I knew, absolutely knew, the format of the content that the webservice would return, which is currently XML, and had suitable methods in place to parse that data. So imagine my confusion when I start receiving error reports like this:

The above is from the Xamarin Insights dashboard which provides me with near real-time crash and issue reporting. There was dozens of records like this in the logs and it was really confusing because I know that the webservice should be returning the following XML:

<?xml version="1.0" encoding="UTF-8"?>
<colours>
  <green>53.9</green>
  <yellow>59</yellow>
</colours>

So, why on earth was the app complaining about a DTD reference?

Well, with a quick configuration tweak I was able to find out. I added the response to the exception data before sending the report to Insights so that I could see what the method was actually returning:

catch (Exception ex)
{
    ex.Data.Add("Thresholds XML", xmlResponse);
    Insights.Report(ex);
    throw;
}

And this was the result…..

This was not the XML is was expecting and explains why the parsing method were choking. But where was this HTML page coming from? I was sure it was nothing to do with the FillLPG website.

Reading through the markup it was clear that this was a login page for a Wifi Hotspot! The device had connected to it but it was not authenticated so the calls to the FillLPG webservice were just being redirected to the login page.

I was able to replicate this scenario by configuring my router to block all traffic to the FillLPG site and then hitting refresh (or any operation that invoked a webservice call). The router then redirected to the ‘This Site Is Blocked’ page and the app crashed!

The fix for this was fairly straightforward and I’ll put another post together for that, but I was already checking the Status Code of the Response and assumed, wrongly as it happens, the a value of 200 indicated a successful operation.

I was also using the ConnectivityPlugin and checking for an active connection AND that the site was reachable – but for some reason these tests were passing even though the router was actively blocking connection to the webservice.

So Xamarin Insights has saved the day for me again. There is no way I would have located this issue without it and while it is still ‘In Preview’ it is proving to be an invaluable tool for tracking down even the most elusive of bugs.

Users, you just can’t please all of them…

Recently I released the new version of the FillLPG for Android application as a Beta, that is working but with the potential for a few bugs and missing features. Because of my current work load I have not been able to put as much time into what is essentially a ‘pet project’ so I was running the risk of it never seeing the light of day.

On the whole it was received very well and there was a lot of positive feedback and feature suggestions. Then there are the ‘1 Star Brigade’ – you know, those who are so disappointed about an app that they just can’t let it go by and can give it a ‘virtual middle finger’ by leaving a 1 Star review – but frequently without taking the time to explain the reason for their displeasure.

By way of venting my own spleen I have a few examples:

This little gem was left a couple of weeks ago and is factually accurate – there are currently no stations listed in Bulgaria. But then why would there be? All the stations in the system are added and maintained by the users of the FillLPG website (which I should add is nothing to do with On The Fence Development Ltd or myself). Furthermore, the service was initially intended to provide location and price information for UK stations only.As more people hear about the site more and more stations are being added – currently as far away as Poland and Northern Norway! The users who add these stations are doing it for their own benefit and that of other LPG users.

My response to you Kiril is that users who complain about there being missing stations are, frankly, missing the point of the FillLPG community.

Next up in this helpful, two word, review – ‘Empty Map’. Well what am I supposed to do with that? How can I start to diagnose the problem – and to be honest, should I even bother? You see there are currently over 4000 installs of this version of the application and if nobody could see a map I’d be getting a lot more feedback from the users (over 4000 of them on the current release). I strongly suspect that this users problem is due to an out of date version of Google Maps on his device (it’s happened before – but that user contacted me to resolve the problem, which I did). I can’t understand why some users don’t realise that they problem may, just may be to do with them, their phone, connection or carrier and not the application. But no – it must be the app, it’s crap and I’m going to tell the world about!

To Maciej I say that you should think about the users who are running the app without any problems and think to yourself – ‘maybe it’s something at my end’

Finally there is this one, the app won’t run Android M. Now some of you maybe saying “Android M” what on earth is that? Well, it’s the next version of Android that was released AS A PREVIEW at the end of May this year. The actual release will be sometime before the end of this year, some say around September but you can’t be too sure with Google. When it does eventually come out, don’t expect to see it on your handset for a while afterward (unless you’re running a Nexus device) because it can take a while for the handset manufacturers to test it with their hardware and to put their own spin on it if required. HTC state that they will get the new releases onto their current compatible handsets within 90 days – so that’s pushing into next year.

So getting back to Stuarts ‘review’ – basically, two weeks after Android M was release AS A PREVIEW to developers and a good 9 MONTHS before any consumer device will be running it he sees fit to give the app a 1 Star review because it’s not compatible!

To you Stuart, I don’t really know what to say! I’m assuming you are a developer as most normal users won’t know what Android M is or how to get it. So developer to developer, you should know better!

The thing is, the app has about a 4 Star rating – dropping  a little thanks to ‘users’ like those above – and that’s fine with me. What irritates me is when people don’t consider the time and effort that other put in to producing these things. FillLPG for Android is a FREE app and doesn’t contain any Ads (and never will). I develop it in my ‘spare’ time and use it as a vehicle to practice my mobile development skills, so when I hear people whinging about missing stations, maps and the like it really hacks me off.

Anyway – the good news is that there are still plenty of users who make use of the application every single day. Users who provide constructive feedback and feature suggestions and, most importantly, appreciate that I do this with no expectation of reward.