I really like ZeroPush. They have a nice API, they have implemented API fixes and updates very quickly on request for me in the past, and I’ve never experienced any technical issues. They are also not expensive.
The only downside with them is that they don’t do Android. (We ended up using UrbanAirship on my company’s app recently solely for that reason.) Some friends of mine who are doing a Rails app that pushes to Android and iOS have been using Amazon Simple Notification Service (SNS), which is really cheap, but definitely more complicated to initially implement than Urban Airship.
UA is removing their free tier. I share your worries about their pricing. I’ve also found their reporting is fairly awful.
I would NOT under any circumstances try to do this yourself. The Rails libraries like Houston, APNS on Rails, etc. are all vulnerable to Apple’s annoying socket-termination behavior, which makes it very difficult to know what messages in a batch got properly delivered. If you do go ahead with a service like ZeroPush or UA, make sure you build out your push mechanism with a layer of abstraction so that you can swap in another service in the future.
Curious what experiences other folks have had with other services, particularly with Amazon if anyone’s used it.