Migrating from Urban Airship to PushSharp

When Urban Airship (UA) announced back in June that they would be canceling their free tier for push notifications I started looking at other free & paid alternatives (e.g. Parse, Azure and others).  However, ultimately I decided to host the push notifications myself using PushSharp.

If you’re not familiar with PushSharp, it is a server side library for sending push notifications to various platforms.

The migration was really pretty easy and involved these steps:

  • Update server software that sends out push notifications to use the PushSharp libraries.
  • Update mobile apps (in my case this was just for the iOS and Android platforms)
  • Implement a mitigation strategy to handle users on old versions of the Android application

Updating Server Software

Urban Airship provides a REST API to send push notifications:

I replaced that code with something that looks like this:

If you look at the sample in the GitHub repository you’ll see there is some setup of the Push Broker that needs to be done prior to sending any messages.  If you are hosting your server code in a windows service you could put that in your main program.  In my case I’m hosting the Push Broker inside of IIS and thus have put all of that code into my Application_Startup method.

Note: you can update and deploy the server software prior to updating your apps.

A Note about Urban Airship notifications for Android

My sample code above includes a case for Urban Airship Android messages.  The reason for this is that the device token you get from their APIs is not actually a Google Cloud Messaging (GCM) device token but rather an Urban Airship generated token.  This is unfortunate as it means you’ll need to continue sending some push notifications via the Urban Airship REST API until all of your users are transitioned over to your new app.

Updating Mobile Applications

Updating my iOS application was pretty trivial as I just had to remove the code that registered my device with Urban Airship.  Nothing else needed to be changed as the device token you deal with is a standard APNS device token and not an Urban Airship token.  Additionally, as the messages that are sent by PushSharp on the server are identical to the messages sent via Urban Airship I didn’t have to change my code that parsed the notification.

Updating my Android app was a little more involved.

1.  Remove the Urban Airship binding library as well as any calls to Urban Airship.

2.  Add the GCM Client component to the project.

3. Edit the AndroidManifest.xml and remove all lines that deal with Urban Airship.

4.  Edit the startup application code (e.g. MainApplication.cs) and remove any calls to Urban Airship and replace with GCM.Client calls:

Old:

New:

 

4. Remove the BroadcastReceiver service and replace it with a service as shown in the GCM.Client sample.  Migrate any code from the OnReceive handler in the BroadcastReceiver class to the  OnMessage handler in GcmService.

One extra piece of work that I had to do was because I was using a Urban Airship specific class for displaying notifications (CustomPushNotificationBuilder). I replaced that with Notification.Builder.

Mitigation Strategy

To handle the fact that Urban Airship uses their own device tokens on Android, my approach was to treat device registrations using GCM.Client as a new device type on my backend (and thus leave in place Urban Airship GCM device registrations).  Thus until the end of the year my server software will continue to send push notifications to any users that are still on an older version of the Android app via the Urban Airship REST API.  Users that install the new application and subscribe for push notifications will receive their notifications via PushSharp.  I’ll continue to monitor how many devices are still on Urban Airship as I approach the year end and may choose to send a broadcast notification to those devices to tell them to upgrade.  After 12/31 I will update the server software to quit handling Urban Airship GCM tokens.

Final Thoughts

If you’re thinking about adding push notifications to your app but weren’t sure what to do take a look at PushSharp.  Jon Dick has done a great job with the software and continues to support and enhance it (he tells me he is working on a new and improved version that will be out before too long!)

Why the iPhone 6+?

Why

I’m writing this a week or so after the release of the iPhone 6/6+.  I hold in my hands the 6+.  Let me backup.

iPhone 6+

As the information came out on the new iPhones at the Apple press event on September 9th I wasn’t all that excited about either phone.  I’ve had larger phones, having used various Android phones as my second phone, most recently a Nexus 5.  So a larger iphone in and of itself isn’t something I’ve been waiting for.

However, coinciding with the announcment also came the GM release of iOS 8.  I updated my devices to the GM and downloaded the dev tools and started testing my apps on the simulator.  Up to this point I had been running my apps on the various iOS 8 betas but these were apps that had been built using the iOS 7 SDK.  With the apps built now for iOS 8 I started seeing more sizing bugs (due to changes in MainScreen.Bounds), etc.  That’s when I decided I should get a 6/6+.

I decided initially to get the 6+ and not the 6.  My reasoning was that the 6+ would be the harder device to design for since it supports landscape orientation, reachability, and larger layout changes.

How

So I got up at 3AM CST on Friday the 12th (yes, I overslept my alarm by an hour :( ).  I logged into my AT&T business account only to find out that AT&T hadn’t enabled the option for purchasing phones (event though a person at the AT&T store had told me the day before that it would be available).  I wasted about 30 minutes trying various things until I realized it wasn’t going to happen and went back to bed.

The next day my twitter timeline was filled with reports of failures for the most part–Apple store down, timeouts, etc.  I also saw that order times for the 6+ were already into October.  I knew then that my only option would be to go stand in line at an AT&T store if I hoped to get one on launch day.

On 9/19 I got up at 5am, showered and headed to a nearby AT&T store.  I went to the same one I had gone to last year for the 5s as they didn’t have a big line and I was hoping the same this year.  I got there at 5:45am and was rewarded with being around 9th in line.

At 7:45AM AT&T employees came out and started taking down who wanted what.  When they got to me I told them I wanted the 6+ Space Gray 64GB.  They told me that was the last one available.  I heard later that they only got in a total of 6 iPhone 6+s.  At 8AM AT&T let us into the store and I rolled out of there by 8:15 with my new iPhone 6+.

Impressions

I’ve now had the 6+ for 9 days and have been pleasantly surprised.  First off, the battery life is nothing short of amazing.  For years we all have been upgrading our phones and getting basically the same old battery life.  Not so this year.  I can now use my phone from 6AM to late into the evening on a typical day (almost midnight on some days) without recharging. In comparison to my 5s for the same usage I would often need to be charging my phone by 5pm (or earlier).  With my 5s (or 5, or 4s, etc.) I always had to make sure that I had my phone charged sufficiently before going to any event.  Woe to you if you got in your car without a car charger!

The second major upgrade that I’ve enjoyed is the camera.  The pictures I’ve taken have been noticeably better than my 5s or Nexus 5.  The picture below compares the 6+, 5, and Nexus 5.  The pictures were done very quickly and there were no retakes, etc. and that is perhaps why the iPhone 5 picture is poorly focused.

iPhone 6+, 5, and Nexus 5 Left to Right
iPhone 6+, 5, and Nexus 5 Left to Right

Developer Thoughts

There is no substitute for having an actual device so you can test usability (reach) as well as readability, etc.  From a developer’s perspective, one benefit of having the 6/6+ is that they support display zoom.  With Display Zoom turned on, my 6+ behaves like an iPhone 6, with a rendered width of 375 points.   See this article by PaintCode for more information: http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions

When my app runs on the 6+ with Display Zoom turned on it will exercise the iPhone 6 sized assets in my app.  This was an unexpected benefit that I’m quite happy about–it’s almost like having 2 phones (but not).

However, as I said before there is still no substitute for having a device to determine usability and readability of your application. I may still need to get an iPhone 6 for designing for the 4.7″ screen.  But for now the 6+ was a great choice.

 

 

Cross-platform Progress / HUD for Android and iOS with Xamarin

If you develop native mobile apps using Xamarin you quite likely have used BTProgressHUD for iOS or AndHUD for Android.  These are great components for displaying work-in-progress dialogs or toast messages.

While the components have similar APIs nevertheless they are different and in different namespaces and thus create an issue if you”re trying to code share between the two platforms.  I hit up Nic and Jon on twitter this week and Jon suggested writing a class that wraps both.

I wrote XHUD.HUD as a result.  It”s quite simple as it mimics the underlying APIs and unifies the slight differences between the 2 APIs.  However, I didn”t map every variation of the APIs and thus it will need to be extended.

An example usage is shown below:

 

Both Nic and Jon have added XHUD to their github repositories here: https://github.com/redth/andhud and https://github.com/nicwise/BTProgressHUD

Longer Term

Longer term it would be nice to see Xamarin.Mobile encompass more things like this.  Having said that it doesn”t seem like it is actively being developed.  So for now we have XHUD.HUD but I”m not crazy about the namespace XHUD as it seems redundant and too narrowly focused.  Perhaps XPlat as the namespace and it contains HUD, AlertDialog, etc? We”ll see.

Why the iPhone 5s?

A year ago I wrote “Getting up at 2AM for the iPhone 5″.  With Apple only offering the 5c for pre-order this year I”m passing on the 2AM CST shift.

I”ve decided to wait for the 5s.  This may mean old-school standing in line somewhere or perhaps risking walkup at a retail store on the 20th.

Why the 5s?  I haven”t done a lot of analysis on this but for own personal use I typically buy the fastest (5s) and midrange storage (32GB) . Since I spend the majority of my time developing mobile apps for iOS and Android I pretty much buy the latest and greatest from Apple each year.  With the fingerprint scanner and the camera enhancements I figure the 5s will have more of a potential developer impact vs the 5c.  Perhaps I”m wrong?

Craig Hockenberry makes a case for the 5c:

Today my customers are a mix of enterprise customers and mom/pop soccer parents–a mix of both 5s and 5c but more 5s I think.

If you”re developing apps for iOS and can only buy one which one are you getting?  For me?  I”m going to bed–5s it is.

– Gerry

You Are What You Actually Do

To borrow from and paraphrase Merlin Mann hopefully accurately, you are what you actually do, not what you think or wish that you did. So far, in 2013, I’m really a writer and podcaster and, to an embarrassing degree, a Twitter user with a programming hobby.

via A Programming Hobby – Marco.org.

In the past year I”ve run into many people who are doing “A” but want to do “B” (e.g. web developers who are “native mobile developer wannabes”).

Read Marco”s article.  Also read Matt”s essay that Marco mentions: http://mattgemmell.com/2013/06/06/legacy/

If you”re not doing what you want to do take a second and stop and ask yourself “why?”.

Using Surface RT as a Media Center replacement

I’ve been a long time Windows Media Center user, going back to the days when Charlie Kindel was working in that group (before his time as a Windows Phone PM).  I was also one of the early beta testers of Media Center and was actually seeded hardware from the group at MSFT.

Although in the past I’ve used the full monte of features that Media Center provides, in recent years I’ve found that my main use of the Media Center has been for streaming videos and other content from sporting websites or Youtube, etc.  Last year the media center PC I had died due to a hard drive issue and so I’ve done without a media center pc since then.

Fast forward to 2013 when I blogged in March about deciding to sell my Surface RT (primarily due to getting a Surface Pro).  After putting it up for sale I had a situation where I wanted to watch a sporting event that was only available via streaming.  I decided what the heck, why not try the RT to do this.  So I went out to the Microsoft Store and picked up an adapter to connect the RT to the home theater system.

I”ve listed the cost breakdown below:

Surface RT ($500)

micro-USB to HDMI adapter: $10 (I bought the $40 from the MSFT store but since found you can buy others much more cheaply)

Logitech Easy Switch Bluetooth Keyboard: $60 (this wasn”t really an added cost since I was already using the keyboard hooked to an Apple TV)

http://www.amazon.com/Logitech-Bluetooth-Illuminated-Keyboard-Smartphones/dp/B0099SMFVQ/ref=sr_1_1?s=electronics&ie=UTF8&qid=1373133520&sr=1-1&keywords=logitech k810

Microsoft Bluetooth Notebook Mouse 5000 (Free, as I had it in a drawer)

Total outlay is around $600.

The Surface RT is hooked into a relatively cheap Home theater receiver (Pioneer VSX-820) via one of the HDMI ports.  One HDMI output then goes to a Sharp 52″ TV that is mounted on the wall above the fireplace.

Front View - 52" Sharp
Front View – 52″ Sharp

The TV can be pulled out from the wall as shown below.  You can see the mess of wires, etc.  The Surface RT is sitting in there but hard to see since the display is not turned on since it is running on the TV.

TV pulled out from wall
TV pulled out from wall

I use a Harmony One remote to control everything.  I created an activity called “Surface PC” which just switches the HTMI input on the receiver to the Surface RT.  It also controls the volume via the Pioneer receiver.

Showing activity "Surface PC"
Showing activity “Surface PC”

The keyboard I use is a Logitech Easy Switch Bluetooth keyboard.  The thing I like about this keyboard is that I can pair it up to 3 bluetooth devices.    I have an Apple TV paired to F1 and the Surface is on F2.

Logitech K810 & Microsoft Notebook Mouse 5000
Logitech K810 & Microsoft Notebook Mouse 5000

The mouse is nothing special as it was laying around the house.  However, it is bluetooth which is nice (no extra adapters) and it also has an on/off switch (as does the keyboard).

I”ve been using this setup now for 3  months now and like it quite a bit.  I primarily use it when there is some event on that I want to stream from the browser.  I”ve used it a lot to stream MLS soccer games via a MLS Live subscription.  I”ve also used it with vdio.com (e.g. rdio.com video cousin) and youtube.

While I”ve played around a little bit with using some of the Windows “metro” applications so far I haven”t found what I”d call great 10″ UI apps.  If you have some great 10″ UI apps please let me know.

–Gerry High

Selling my Surface RT

0e71b2ea-4b12-42dd-a5bd-75417b21cd3dAs mentioned in my 2012 Post I bought a Surface RT back in November when they launched.  While I like the device I haven”t had much time to use the device as I”ve been heads down doing iOS development and so it hasn”t gotten a lot of usage.

In January/February of this year I started doing Windows Phone 8 development on my MacBook Pro via a VM.  When the Surface Pro came out in February I picked one up the week after they came out–the Microsoft store sold out but put me on a wait list and then got a call about a week later.  The biggest thing about the Surface Pro over the RT is the ability to run Visual Studio (and thus do Windows Phone development).  As an added bonus I”ve really liked using the stylus with OneNote for note taking in meetings.

Thus my Surface RT is going up for sale.  I will be posting it for sale in the forums over at Surface Geeks (http://surfacegeeks.net).  The unit comes with 32GB, a touch cover, and a brand new Incipio Surface sleeve ($40 retail).

Ping me if you”re interested.

Thanks, Gerry

2012

First off let me say that I don”t like to make new year”s resolutions.  I also don”t usually look back and analyze or review.  However, this year I”m capturing some of the past partly because my memory seems to gets worse each year.  By putting this down on paper I have something to remember this year by as well as to compare to next year.

I”ve listed some things I did, worked with, saw, used, etc. (not necessarily in order of importance)

Devices Galore

Given the nature of the work that I do, I end up buying devices as they come out, if I feel that I will need or want them.  Only after making a list do I realize how many significant devices launched this past year and how many I used or felt were important.

  • iPad 3 Verzion LTE (Mar)
  • Retina MBP (Jul)
  • Nexus 7 8GB (Jul)
  • iPhone 5 AT&T LTE (Sept)
  • Mac Mini (for blog, Sept)
  • iPad Mini Verizon LTE (Nov)
  • Surface RT (Nov)
  • Nokia Lumia 920 AT&T (Dec)
  • Apple TV – Gen 3, (Dec)

Of these devices I used the retina MBP tons every day.  I used the iPad 3 a lot from Mar-June but then as I shifted focus to iPhone app development I used it very little.  Once the iPad Mini came out in November I found myself very rarely using the iPad 3 (perhaps I should sell it?).

The Surface RT is a great device but suffers from a lack of good apps.  The Nokia Lumia 920 replaced an android phone (Samsung Galaxy S2 Skyrocket) and really is a beautiful phone on a nice OS/UI.  In 2013 I expect to be doing some x-plat development for Android and so I expect that the Nexus 7 will see quite a bit of use.

Sharpening The Saw

2012 was the year I decided to focus on “sharpening the saw” by attending a few events.

I had never attended either event.  Both are quite a bit different in scope although both were Apple centric.  I hope to go back to both in 2013.

Besides these events I also subscribed to Tekpub, an online developer focused video education site.

Work Projects

Mobile application development consumed the majority of the software development I did in 2012.  Some of the projects/Apps I worked on included:

2012 was a great year for me in many ways.  I am wishing you a blessed and prosperous 2013!

Getting up at 2AM for the iPhone 5

In retrospect I”m glad I did since the iPhone 5 sold out in about an hour by all reports.  I actually ordered 2 iPhones–one for myself and one for my daughter.

My daugher”s Android phone”s poor battery life is to blame as the main reason for her getting a new phone.  That and the fact that all Android phones have large (4.5″ or larger) screens and she wanted something smaller.

My order was complicated by the fact that I am not eligible for the full subsidy since I got the 4S last October.  AT&T wanted to charge me $299 $250 = $549.  I wound up just ordering a phone using my wife”s upgrade for $299.  I talked to AT&T today and they told me that I”d just need to activate the phone on my phone #.

Just back from 2012 360|iDev

This was my first time going to http://360idev.com and can say that I thoroughly enjoyed it.  It was much different than WWDC (which I went to in June).

I just saw this post covering the conference:

http://leafhut.com/blog/2012/09/360idev-conference-2012/

Of the sessions the blogger mentions I also went to the session on iOS Security by Jay Freeman and can attest that it was excellent.  I also wanted to attend the session by Gustavo Ambrozio but was in a Core Bluetooth session at the same time.