now | writings | rss | github | twitter | contact

An Update on Pushover

posted to writings on sep 23rd, 2012 with tags android, ios, iphone, nerd, pushover, and superblock

It's been a little over 6 months since I released Pushover, the notification service with Android and iOS apps. I've been asked to post an update on how things have been going since then.

New Client and Website Features

Shortly after the initial release, I received some great feedback from Chad Etzel, one of the creators of Notifo, the notification service that I used until it was shut down (which prompted me to create Pushover in the first place). Chad asked for Pushover to support sending messages with URLs that can open external apps, and Pushover soon gained supplementary URL support which required changes in the API and on both Android and iOS apps.

A few months later I implemented quiet hours support, which allows users to set periods of time in each day when notifications do not generate sounds but are still viewable in the Pushover device clients. Due to the way iOS handles notifications, this required a server-side interface for editing quiet hours as well as updates to both platform clients.

E-Mail Gateway

In June, I got fed up with the cluster of USB drives for the Mac Mini that is connected to my TV at home, and upgraded to a Synology Diskstation NAS device. It has a neat web interface for administration, but the only way it could send notifications for things like failed backups was through e-mail. With that, I created an E-mail to Pushover gateway, allowing all Pushover users to receive notifications by e-mailing (their-user-token)@api.pushover.net. Now the Synology device is able to send me notifications to Pushover through e-mail.

To my surprise, a lot of users are using the e-mail gateway as their primary means of sending Pushover messages. Traffic to the e-mail gateway service has grown quite a bit which required rewriting the service that interfaces with Postfix to deliver messages into the queue.

SSL Certificate Issues

StartCom, the free SSL provider that I used for Pushover's certificates, experienced a DDoS attack on their OCSP servers in July. This made some web browsers have a noticeable delay when trying to visit any sites using StartCom certificates, including Pushover's. Since StartCom has also been trying to push commerical users towards its non-free certificates, I decided to actually spend $20 to buy a 2-year SSL certificate from a more well-established provider.

Unfortunately, that change made some ancient Android devices unable to connect to the Pushover server, since the new SSL certificate issuer was not in the list of root certificates shipped on those old devices (StartCom's wasn't either, but it never came up before this point). This required changing the Android client to use its own SSL root list that I would have to bundle with it, falling back on the system's root list. Adding insult to injury, this all happened just as a huge influx of users were signing up because of IFTTT.

The IFTTT Announcement

During the first couple of months, I received a few feature requests from Pushover users asking for integration with IFTTT, a free web service that allows one to connect other web services together with simple rules. I setup a Pushover application for IFTTT with their icon and unlimited usage, and then e-mailed them the details on how to use the API. I never heard back from them until July when John Sheehan, their lead API guy, reached out about getting the Pushover channel added. IFTTT already supported Boxcar for notifications but Boxcar was having an extended outage. Over the next few days, John and I hammered out the details of a cross-promotion deal where I would lower the price of the Pushover Android and iOS apps to 99 cents for a week, and they would promote it on their weblog and Twitter.

The response was overwhelmingly positive, with a lot of Pushover recipes being created and discussed on Twitter and elsewhere. While it would have been nice to gain those extra users without having to reduce the app price to 99 cents (or about half that after Google's and Apple's cut), the increased visibility was a net positive. A lot more users have started integrating Pushover into their own services and writing plugins for things like WordPress. Zapier, a sort of IFTTT-for-businesses, also announced Pushover integration.

Lifehacker wrote a piece about Pushover last month which had a big increase in sales (and without the 99 cent price drop), although the article had a strange emphasis on replacing a phone's notification system which prompted some support e-mails from confused new users.

User Growth and Scaling

Pushover passed the 10,000 user mark last month, with 58% of users on iOS and 42% on Android. According to the Google Play stats, 41% of Pushover Android users are on Android 4.0, 39% on Android 4.1, and the rest on Android 2.2-2.3. I've been a bit surprised at how many users are on 4.0 or 4.1 given all of the hype about manufacturers being so slow to release device updates.

On the server side, Pushover is still on a single dedicated OpenBSD server with MySQL, although I've switched from Apache 2 and Mongrel to nginx and Unicorn. I've had to make some minor changes to the notification sending daemon that sends queued messages to Google and Apple notification servers, and the e-mail gateway was rewritten to be faster and more tolerant of improperly encoded e-mails.

In July, Pushover gained realtime API statistics so users can see how many notifications their apps are sending out. This was built out of my need for monitoring app usage and eventually enabling enforcement of the 5,000 message monthly limit for free apps. Last month I increased the limit to 7,500 messages for free apps, although high-traffic public apps like Adium and IFTTT are allowed unlimited notifications.

I may switch to an app-to-user limit, so that apps can send to a wide number of users, but only a certain number of notifications per user, per month. This will allow popular services to integrate Pushover and not worry about the number of users they can send to, while hopefully still preventing private companies from (ab)using Pushover to send a large number of messages to a small number of users every day. I've had about a dozen requests from companies asking about Pushover's pricing of notifications beyond the free limit, although none have signed on. I think for many of them, creating a custom app with something like Urban Airship or Parse is a better idea anyway.

On the competition front, I have not heard anything from the startup that popped up on Hacker News right after I released Pushover (I honestly don't even remember their name). Notify My Android, my primary competition on Android, finally caught up with a few of the features that Pushover has after lying dormant for a year. They just recently dropped their app pricing to free, although it only allows for 5 notifications per day and costs $3.99 (the same cost as Pushover) to get unlimited notifications. Boxcar, my primary competitor on iOS, had an extended outage a few months ago that caused a lot of complaints from their users and rumors of the free service going under, but then somehow they got acquired just a few weeks later.

User reviews in the app stores have been largely positive. On Google Play, the app has 182 reviews with 145 of them being 5-star. On the Apple App Store, the app only has 41 reviews despite having a larger install base than Android, with 28 of them being 5-star. Most of the 1-star reviews have been from people that complain about not receiving notifications, which is frustrating since those are user- or device-specific problems that I can't do anything about unless those users contact me directly and I can't reply to app reviews. A previous update to the Android and iOS apps put dedicated support links in the menus to try to reduce the number of bad reviews.

Looking Forward

A common feature request from iOS users is the ability to choose a different notification sound, since iOS doesn't support changing it like on Android. Unfortunately, supporting this means that I have to license and bundle a bunch of different sounds with the app to let the user choose from and they still won't be able to use custom sounds that are installed on their phones. I currently have my friend that created the initial Pushover tone making a bunch of alternate tones that I'll be able to bundle with a future release. These will also be included on Android and the API will be updated to allow users to choose per-notification sounds on both platforms.

I was just recently able to identify and fix an annoying bug in the iOS client that has plagued me for many frustrating debugging sessions. A race condition between inserting messages with Core Data and displaying them in the UITableView controller was causing corrupted display of certain message cells with no way of forcing a refresh without switching to the Settings screen and back. In addition to that fix, I've updated the app with iOS 6/iPhone 5 support (with yet another splash screen size - now totaling 7) which is currently undergoing beta testing by some Pushover users (using the nifty TestFlight service) and will be released soon.

I am in the process of developing a Mac client for Pushover that will integrate with Mountain Lion's Notification Center. Since there is no Apple notification server to use, I will have to come up with a scalable way of doing long-polling on the server side that will work with the Mac app. Once that is released, I should be able to offer a client API so users can write Pushover clients for other operating systems. I'd also like to integrate with the Pebble watch, although they've sold out of their developer kits so I'll have to wait until their formal release to start working on it.

Comments? Contact me via Twitter or e-mail.