With traffic on recent bug-fixes quiet, new contributions received, and all else otherwise stable, I'm getting ready to bump Deacon to version 1.0.0. I've pushed a new tag to the Deacon repository on GitHub, and made quite a few updates to the codebase to better-accommodate anticipated downstream changes. I've decided to do this version bump because Deacon's development pace lately has been slow; my time to work on it is limited, and development is largely being driven by bug reports and contributed features. So I'm going to let features drive the minor release numbers, and bug reports drive the incremental numbers.
New in this release:
- Deacon is refactored to use a generic PushReceiver class to handle all top-level controls and configurations (i.e. start, stop, timeouts, etc.). This is sub-classed by server- or transport-specific client implementations for particular push mechanisms.
- All Meteor-specific client code has been pulled out into MeteorPushReceiver.
- The Android-specific "Deacon" class has become "AndroidPushSupervisor", which is instantiated by a hosting Android application in parallel with its chosen PushReceiver. The application registers the PushReceiver with the AndroidPushSupervisor, which will then call stop() and start() methods based on received BroadcastIntents containing network connectivity information.
- The methods in the DeaconObserver interface and DeaconObservable class have been updated, and some of the high-specificity methods have been deprecated. Those deprecated methods will still work (and, in the case of DeaconObserver, still be required in application code) but will be removed before the final 1.0.0 release.
- Important! Deacon no longer handles Android inter-thread communication using Handler and Message. This was a Demo-oriented hack to get around Android's requirement that UI object accesses only take place from the associated Activity's thread. This inter-thread communication is really the responsibility of the service that hosts Deacon (and instantiates whatever PushReceiver is required).
- Incorporate Cyrille Colin's SSL- and authentication-capable Meteor client as a subclass of MeteorPushReceiver.
- Refactor the unit test to decouple access to the PushReceiver and MeteorPushReceiver classes, and test them separately.
- Remove extraneous System.out.println() and Log.d() calls, and other general code clean-up.
For quite a while (read: since October) I've been meaning to spend some time improving the Deacon demonstration application. What we had before was OK - it connected to the Deacon test server, showed some messages coming in, and generally indicated that something was happening behind the curtain. But I wanted to add more configurability, and more visibility into Deacon's state. Most importantly, I wanted to switch to running Deacon in a service, rather than within the app's user interface activity.
With the 1.0 release of the Deacon Demo app, you can choose the channel to subscribe to on the Deacon project's test server, as well as stop and re-start the Deacon instance. Icons and text indicate whether the Deacon instance itself is running, as well as whether the device has a network connection. If you navigate away from the Deacon Demo app's UI, the corresponding service will create a notification if any push messages are received that contain a prime number payload - clicking the notification in the pull-down list will bring you back to the Deacon Demo activity.
You can download this app directly from GitHub using the QR Code below. Make sure you have the "Unknown sources" checkbox ticked in your device's Application Settings!
The Deacon team is proud to annouce the release of the Beta version of the Deacon push notifications library for Android!
If the Deacon Project blog's hit stats are any indication, weekends on the web are pretty quiet when it comes to Android Push Notifications. But this weekend has been a busy one around Deacon HQ... After plenty of third-party testing over the last month, as well as some code updates and experimentation, this weekend marks the entry of the Deacon push library for Android and Java to "Beta" status.
In addition to all the functionality included in Deacon's Alpha Release, Beta includes updated design information, the beginnings of an automated test suite, and several bug fixes. Contrary to previous indications on this blog, the Beta release does not include compatibility with Google's C2DM framework. While this was an exciting potential feature, the Deacon developers received precisely zero interest in it from the developer community. Unless robust demand for C2DM compatibility appears in the comments section, or on the Deacon Project mailing list, further development in this area will not be pursued.
In the run-up to this Beta release, several developers contacted me to express an interest in Deacon. Were it not for their enthusiasm, and their constructive feedback on Deacon's operation, I would likely have shelved the project entirely. Special thanks to Lee J. (@britishturbo, developer of Tweetissimo) and Kasper Holtze for their encouragement and interest.
At this point in Deacon's evolution, the library should be sufficiently robust to permit development of push-based Android and Java applications with a reasonable expectation of performance and stability. While Deacon has not (to my knowledge) been tested in large-scale deployments or production environments, the real-world tests to which it has been subjected indicate that it is robust to changing network conditions, consumes network bandwidth efficiently, and minimally impacts handset battery life. It is my hope that this Beta release will encourage more developers to actively test Deacon in their push-based Android applications, and that they will report on their experiences on Deacon's mailing list and bug tracker.
Following this Beta release, I plan to move to a largely reactive and contribution-based model for Deacon development. I will gladly follow up on reported issues, respond to mailing list inquiries and make any code changes needed. Further, I will welcome submitted patches and pull-requests in order to incorporate code changes from the community. However, barring changes resulting from my own Android app development activities, I do not plan to aggressively add features or enhancements. Deacon, like most Open-Source projects, belongs to its community, and community involvement will be the key driver in its ongoing evolution. In short: Ask and ye shall receive. Code and ye may contribute. But sit thee not silent.
[Image: Wikimedia Commons (public domain)]
According to the Deacon project roadmap, tomorrow is supposed to be the day we release our Beta edition. The library, at least, is feature-complete for Beta at this point - mostly because we identified very few new features between Alpha and Beta releases, choosing instead to focus on increasing the robustness and eliminating (sometimes preemptively) bugs.
What's missing is testing. We haven't got much expertise in the realm of testing Android applications - in particular, because there are a lot of different conditions that Deacon needs to be subjected to in order to test out its error-handling capacity, we'd really like to automate this testing. F8'ing the emulator over and over gets old very quickly! In particular, we'd like to be able to write tests that automatically toggle the emulator's (or a real device's) network connection off and on, and switch between 3G and WiFi connections. So, we turn to you, the dev community - can anyone recommend a clean way to do this without resorting to hacking around with airplane mode?
If you can help, please leave a comment on this post, check out the corresponding open question at Stack Overflow, or hit us up on the Deacon project mailing list! We'd offer you a free copy of Deacon, but since that's already open-source, the best we can offer is to buy you a beer if we should ever meet (say, at Google IO 2011?)...
As for that Beta release - well, there aren't any giant nagging to-dos holding it back, but by the same token little has changed since Alpha. It would certainly make a nice 30th birthday present for me, but I feel it should offer a bit more value. Hanging out the "Beta" flag might encourage more developers to test out Deacon, which would hopefully garner some feedback and even more opportunities for us to improve the library. For tonight, I think I'll sleep on it...
Want to try out the Deacon Alpha release? Here's how - a simple video introduction to "Deaconizing" your app and receiving push notifications.
Assuming that you actually want to see what's happening, and not just hear me yap about it, I'd recommend using the full-screen button!
The Deacon team is proud to annouce the release of the Alpha version of the Deacon push notifications library for Android!
This release implements all of the Alpha functionality listed on Deacon's Project Roadmap: connect to a single Meteor server, receive push notifications from multiple channels using the long-polling technique, and automatically manage server connections in response to changes in the state of a device's network connection. Additionally, we pulled "notification catch-ups" ahead from our Beta release into Alpha; this feature of Deacon provides automatic retrieval of push notifications that might be missed due to network interruptions.
There are two ways to try out Deacon's Alpha release: download the source code (tagged 0.1.0_alpha) at GitHub, or grab the Deacon alpha jar file from the repository downloads area. Either can be added to your Java or Android project's build path, and their use is described over at the API Reference.
Of course, to test out Deacon you'll need a Meteor server that's configured to "speak Deacon" and format its push notifications the way Deacon expects. If you want to set up your own (following the server installation instructions on the Meteor web site), the source code includes a meteord.conf file that's ready to go out of the box. While setting up a Meteor server is fantastically-easy, you might just want to try out Deacon by itself. In this case, you can use our test server:
|Channel name||Channel description||Data payload|
|2sec||Sends a push notification every 2 seconds||Random integer|
|10sec||Sends a push notification every 10 seconds||Random integer|
|1min||Sends a push notification every 1 minute||Random integer|
|10min||Sends a push notification every 10 minutes||Random integer|
We hope you'll give Deacon a try! It's probably a bit rough around the edges, but the more developers test it out, the better it will become. You can leave feedback here in the comments, use the Deacon Issue Tracker at GitHub, or join the deacon-talk mailing list for a direct line to the dev team. To all those who download and try Deacon, we thank you for being part of what makes Open Source Software so great!
If you read our recent post about battery life, you might have asked "where can I get my hands on that app?" ... Or, maybe you thinking that is just wishful thinking on our part! Either way, the code for DeaconTest has now been posted to its own repository over at GitHub:
Over the next few weeks, we expect to transform the test app from a mundane, text-spewing utility to a full-on demonstration of Deacon's capabilities. Deacon-Test will continue as our internal testbed for the Android-specific portions of Deacon, as well.