Matthias Wessendorf
WWDC 2015: Apple Push goes HTTP2 for APNs
Last week was WWDC 2015 and one session got my attention: What’s New in Notifications!
The session is a two part session, focusing on iOS notifications (local/remote) and new features, like text-apply, but the most interesting part for me was the second half, which announced some coming APNs changes!
The big news is, Apple will have HTTP/2 API to send notification requests to APNs.
YAY!
Here is a little summary of more details:
- request/reponse (aka stream) for every sent (more reliable (e.g. JSON reason for a ‘bad request’ or 410 if the token is invalid))
- allows ‘instant’ feedback (no separate feedback service!), since details are on the HTTP/2 response
- multiplexing: multiple requests (to APNs) on a single connection
- binary
- simpler certificate handling: Just a single cert! (no separate for dev/prod, VOIP etc)
- 4KB size of payload (for all versions of iOS/OSX), but just on the new HTTP/2 API
The new HTTP/2 API for APNs will be available in “Summer 2015” for the development environment and will be made available for production “later this year”. No exact dates were given.
I really like this move, and this means for our AeroGear UnifiedPush Server, we will be busy implementing this new Apple APIs!
AeroGear Germany tour 2015
Over the last three days Sébastien Blanc and I have been touring through Germany to visit a few JUGs.
The talksWe had the same setup for every evening: First, Sebi was talking about JBoss Tools and Forge and showed how to quickly create a Java EE based backend. Afterwards the audience saw the how to create a good looking Apache Cordova mobile app, that he also generated using Forge! At the end the solution was also protected using Keycloak. Afterwards I had a talk about Push Notifications in general. During the talk I had various demos, like our AeroDoc server and iOS client to demonstrate a rich push interaction, between different clients and servers, using geolocation and user segementation. I was also happy that I could demo some hot new stuff on our UI by showing stuff off code from different pull requests.
The citiesWe had three different cities on the agenda and the start of the tour was Berlin. However, unfortunately I forgot my powerplug at home… But, arriving in Berlin I could borrow one fromSimon Willnauer. THANKS DUDE!
BerlinThe event took place at the VOTUM GmbH and it was a good start of our tour. We had a packed room and lot’s of questions during both talks, so we ended up talking a bit longer. Afterwards there was time to socialize with a drink or two. Here are some impressions from the evening.
DortmundAfter arrving in Dortmund Hendrik Ebbers we giving us a ride to the BVB training center. It was funny, that one guy thought that Sebi looks like the coach (Juergen Klopp) However, the real Juergen was a few hundred meters away, watching the team doing their training. Before the event started we did some preparation at Hendrik’s awesome home-office. Here is a picture of me talking about the push server, showing the latest greatest of a pending pull-request from Lukáš Fryč. The talks went well and while we enjoyed some Pizza we had a some good conversations with the attendees!
StuttgartOn our way to the JUG Stuttgart we got effected by the strike, which turned out to be a very positive thing. We got an almost empty ICE train This time the talks took place in the Stuttgart Red Hat Office and Heiko was already awaiting us at the S-Bahn station. After a little introduction by Heiko it was again Sebi’s part before I took over talking about push.
SummaryIt was a great tour and lot’s of questions during and after the talks showed we had the right content for the different events. I am already looking forward to see some of the attendees getting in touch with our AeroGear community for more debats! On the last evening Heiko, Sebi and I went for a few in Stuttgart. Traveling back home, I had another interaction with the strike, which was again very positive. They had to change the train and all seats were opened up, so I ended up sitting on a nice and comfortable seat in the first class for free
Push Notifications and the Internet of Things
Today on Facebook’s F8 conference they announced Parse for IoT. This a cool, but not unexpected move, especially since there is demand to have connected objects being part of an (enterprise) cloud systems. We will see more of that happening soon, and our lesson learned on traditional mobile, will be applied to IoT devices or “connected objects” in general.
AeroGear and IoTIn the AeroGear project we have done similar experiments, bringing functionality of our UnifiedPush Server to the IoT space. My colleage Sébastien Blanc did two short screencasts on his work in this area:
- Sending Push Notifications to Raspberry Pi
- Sending Push Notifications to a Lego Mindstorms EV3 Robot
The above examples basically leverage our support for SimplePush, which is a WebSocket based protocol used on Firefox OS for Push Notification. Due to the fact Firefox OS uses such an open protocol, we are able to extend this mechanism of Push Notifications delivery to other platforms, not just Firefox OS devices.
Bringing Push Notifications to the IoT sector is a logical move, to integrate connected objects and mobile cloud services!
Fabric8 Gateway for the Unified Push Server
If you want to run the Unified Push Server behind a firewall, you still need to expose those RESTful endpoints that are accessed from the mobile apps running on the different devices:
With the help of the Fabric8 Gateway Servlet this is a fairly simple task!
I have created such a gateway that only exposes the above URLs, nothing else. Checkout therepository on github!
Have fun!
Apache Mesos and Marathon for UnifiedPush Server and WildFly
After reading a bit about Apache Mesos I wanted to play a bit with it. If you don’t know what Mesos is, it’s a cluster manager that provides efficient resource isolation and sharing across distributed applications, or frameworks.
During reading up on Apache Mesos I ran into the Marathon framework, developed by the folks atMesosphere. Marathon is a nice tool to manage tasks on Apache Mesos. The Github repo says:
Marathon is an Apache Mesos framework for long-running applications. Given that you have Mesos running as the kernel for your datacenter, Marathon is the init
or upstart
daemon.
The folks at Mesosphere did a great job writing up different installation guides. As a Mac user, I did follow this installation. The guide helps on installing the required components of the setup:
- Apache Zookeeper
- Apache Mesos
- Mesosphere’s Marathon
Once the above setup is done and your Apache Mesos system is running, it’s pretty simple to launch a WildFly server and deploy the UnifiedPush Server to it.
Download the following bundles and place them somewhere into your hosted infrastructure:
Now you need to save this JSON:
to a file and submit it to the Marathon server, using curl
:
curl -i -H 'Content-Type: application/json' -d @unifiedpush-server.json localhost:8080/v2/apps
After Apache Mesos is done with downloading the artifacts from the uris
section, it performs the steps chained in the cmd
section. This is basically a set of shell commands that copy the UnfiedPush Server and its database file to a WildFly, which uses a PORT provided by the custer manager, instead of the default 8080
http port.
You are done – that’s all you need. On the Marathon UI you now see the URL and the PORT of the WildFly, containing the UnifiedPush Server:
Have fun with WildFly and the UnifiedPushServer on Apache Mesos!
UnifiedPush Server: Docker, WildFly and another Beta release!
Today we are announcing the second beta release of our 1.0.0 version. This release contains several improvements
- WildFly 8.x support
- PostgreSQL fix
- Scheduler component for deleting analytics older than 30 days
- Improvements on the AdminUI
- Documentation
The complete list of included items are avialble on our JIRA instance
With the release of the server we also released new versions of the senders for Java and Node.js!
DockerThe team is extremely excited about the work that Docktor Bruno Oliveira did on our new Docker images:
Check them out!
DocumentationAs mentioned above, the documentation for the UnifiedPush Server has been reorganized, including an all new guide on how to use the UnifiedPush Server.
DemosTo get easily started using the UnifiedPush Server we have a bunch of demos, supporting various client platforms:
- Android
- Apache Cordova (with jQuery and Angular/Ionic)
- iOS
The simple HelloWorld examples are located here. Some more advanced examples, including a Picketlink secured JAX-RS application, as well as a Fabric8 based Proxy, are available here.
DockerBruno Oliveira did Docker images for the Quickstart as well:
FeedbackWe hope you enjoy the bits and we do appreciate your feedback! Swing by on our mailing list! We are looking forward to hear from you!
NOTE: the Openshift online offering will be updated w/in the next day or two
Enjoy!
Beta1 of the UnifiedPush Server 1.0.0 released
Today we are announcing the first beta release of our 1.0.0 version. After the big overhaul, including a brand new AdminUI with the last release this release contains several enhancements:
- iOS8 interactive notification support
- increased APNs payload (2k)
- Pagination for analytics
- improved callback for details on actual push delivery
- optimisations and improvements
The complete list of included items are avialble on our JIRA instance.
iOS8 interactive notificationsBesides the work on the server, we have updated our Java and Node.js sender libraries to support the new iOS8 interactive notification message format.
If you curious about iOS8 notifications, Corinne Krych has a detailed blog post on it and how to use it with the AeroGear UnifiedPush Server.
Swift support for iOSOn the iOS client side Corinne Krych and Christos Vasilakis were also busy starting some Swift work: our iOS registration SDK supports swift on this branch. To give you an idea how it looks, here is some code:
func application(application: UIApplication!, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData!) {
// setup registration
let registration =
AGDeviceRegistration(serverURL: NSURL(string: "<# URL of the running AeroGear UnifiedPush Server #>"))
// attemp to register
registration.registerWithClientInfo({ (clientInfo: AGClientDeviceInformation!) in
// setup configuration
clientInfo.deviceToken = deviceToken
clientInfo.variantID = "<# Variant Id #>"
clientInfo.variantSecret = "<# Variant Secret #>"
// apply the token, to identify THIS device
let currentDevice = UIDevice()
// --optional config--
// set some 'useful' hardware information params
clientInfo.operatingSystem = currentDevice.systemName
clientInfo.osVersion = currentDevice.systemVersion
clientInfo.deviceType = currentDevice.model
},
success: {
println("UnifiedPush Server registration succeeded")
},
failure: {(error: NSError!) in
println("failed to register, error: \(error.description)")
})
}
To get easily started using the UnifiedPush Server we have a bunch of demos, supporting various client platforms:
- Android
- Apache Cordova (with jQuery and Angular/Ionic)
- iOS
The simple HelloWorld examples are located here. Some more advanced examples, including a Picketlink secured JAX-RS application, as well as a Fabric8 based Proxy, are available here.
For those of you who that are into Swift, there Swift branches for these demos as well:
- https://github.com/aerogear/aerogear-push-helloworld/tree/swift/ios-swift
- https://github.com/cvasilak/aerogear-push-quickstarts/tree/swift
We hope you enjoy the bits and we do appreciate your feedback! Swing by on our mailing list! We are looking forward to hear from you!
UnifiedPush Server 0.11 is out!
Today we are extremely happy to announce an all new AeroGear UnifiedPush Server!
The UnifiedPush Server comes with a completely rewritten Angular.js based UI and is now powered by Keycloak! Thanks to the Keycloak team for the great work they delivered helping the AeroGear team to make the Keycloak integration happen.
Getting started
Getting started w/ the new server is still very simple:
- Setup a database (here is an example for the H2 Database engine. Copy into $JBOSS/standalone/deployments)
- Download the two WAR files (core and auth) and copy into $JBOSS/standalone/deployments
- Start the JBoss server
The 0.11.0 release contains a lot of new features, here is a more detailed list:
- Keycloak Integration for user management
- Angular.js based AdminUI
- Metrics and Dashboard for some Analytics around Push Messages
- Code snippet UI now supports Swift
- and a lot of fixes and other improvements! See JIRA for all the items
Besides the improvements on the server, we also have some Quickstarts to help you get going with the Push Server
- Push HelloWorld for Android, Apache Cordova and iOS (ObjC and Swift)
- Push-enabled Mobile Contacts Database
Hello World
The HelloWorld is a set of simple clients that show how to register a device with the UnifiedPush Server. On the Admin UI of the server you can use the “Send Push” menu to send a message to the different applications, running on your phone.
Mobile Contacts Quickstart
The Mobile Contacts Quickstart is a Push-enabled CRUD example, containing several client applications (Android, Apache Corodva and iOS) and a JavaEE-based backend. The backend app is a secured (Picketlink) JAX-RS application which sends out push messages when a new contact has been created. Sometimes the backend (for a mobile application) has to run behind the firewall. For that the quickstart contains a Fabric8 based Proxy server as well.
Thanks again to the Keycloak team for their assistance.
Now, get your hands dirty and send some push messages! We hope you like the new server!
Next ?
We are now polishing the server for the 1.0.0 push release this summer. See the roadmap for details.
AeroGear Push Releases
Today we are releasing two libraries around our Push offerings!
- UnifiedPush Server 0.10.4
- Java Sender client 0.7.0
Both releases are containing bug fixes and small improvements. This will be the last release of the 0.10.4 series, the next release (0.11) will contain an all new UI (powered by Angular.js), an integration with Keycloak and other new features such as analytics around push messages.
Both releases are available on Maven Central. The UnifiedPush Server on our OpenShift cartridge was also update to contain 0.10.4 for our PaaS offerings.
Last but not least: This summer we will be release the AeroGear MobilePush 1.0.0 to the community!
Stay tuned for more
UnifiedPush Server 0.10.3 released
The AeroGear UnifiedPush Server 0.10.3 was released to bintray and OpenShift online!
The release contains a few improvements:
- Improved exception handling for Google Cloud Messaging
- Generated Code Snippets match the simplified API of our Apache Cordova Push Plugin (0.5.0)
- Generated Code Snippets for SimplePush match our JavaScript 1.5 release
For feedback, please join our mailing list! We are happy to help
Have fun!