So, after crying over to have a proper Android / IOS push service and reading all the posts at this topic, I think I found a solution to our pains 
I found Netmera and tried their REST API to register, send push notification to an Android device. Although I didn’t try the IOS part of thier service, but I’m guessing that that part would work.
The good thing about Netmera is their free plan has 1M push messages per month and you can access their REST API, meaning you can run your backend service and use Netmera to send notifications to both platforms. (they’re using GCM)
Also they have quite good list of extra services, in case you’d like to grow your membership.
Here is the working code, which I just editied the Urban Airship code I found somewhere
Also here’s the link for their REST API documentation for push
[lua]
local json = require(“json”)
– Here is the implementation of Push Notification in Corona SDK
local launchArgs = …
local APIKEY = “xxxxxxNetmera APIKeyxxxxxxxxx”
if launchArgs and launchArgs.notification then
– The code below will only trigger if your app is dead and not active at all
– *********************************************************************************
native.showAlert( “launchArgs”, json.Encode( launchArgs.notification ), { “OK” } )
--[[ notification table contains:
launchArgs.notification.type - “remote”
launchArgs.notification.name - “notification”
launchArgs.notification.sound - “sound file or ‘default’”
launchArgs.notification.alert - “message specified during push”
launchArgs.notification.badge - “5” – badge value that was sent
launchArgs.notification.applicationstate - “inactive” --]]
native.showAlert( “Yep notification received”, launchArgs.notification.alert, { “OK” } )
end
– Function to handle Network Traffic Response from Urban Airship
local function netmeraNetworkListener( event )
if ( event.isError ) then
native.showAlert( “Network error!”, “Error has occured from Netmera”, {“OK”})
else
native.showAlert( “Netmera”, event.response, {“OK”})
end
end
– Function to register device for Netmera Services
local function registerDevice(deviceToken)
local headers = {}
headers[“X-netmera-api-key”] = APIKEY
headers[“Content-Type”] = “application/json”
commands_json =
{
[“registrationId”] = deviceToken,
[“platform”] = “ANDROID”,
[“tags”] = {“tag1”, “tag2”},
}
postData = json.encode(commands_json)
print("postData: " … postData)
data = “”
local params = {}
params.headers = headers
params.body = postData
network.request( “http://api.netmera.com/push/1.1/registration” ,“POST”, netmeraNetworkListener, params)
end
– notification listener
local function onNotification( event )
if event.type == “remoteRegistration” then
registerDevice(event.token)
elseif event.type == “remote” then
– The code below will only trigger if your app is alive and kicking
– *********************************************************************************
native.showAlert( “remote”, json.encode( event ), { “OK” } )
--[[ notification table contains:
launchArgs.notification.type - “remote”
launchArgs.notification.name - “notification”
launchArgs.notification.sound - “sound file or ‘default’”
launchArgs.notification.alert - “message specified during push”
launchArgs.notification.badge - “5” – badge value that was sent
launchArgs.notification.applicationstate - “inactive” --]]
native.showAlert( “Yep notification received”, event.alert , { “OK” } )
end
end
Runtime:addEventListener( “notification”, onNotification )
[/lua]