Reputation: 5879
What is the best way to send push notifications through Urban AirShip using a Rails 3 web app?
From Urban Airship documentation:
An HTTP POST to /api/push/broadcast/ sends the given notification to all registered device tokens for the application. The payload is in JSON with content-type application/json, with this structure:
{
"aps": {
"badge": 15,
"alert": "Hello from Urban Airship!",
"sound": "cat.caf"
},
"exclude_tokens": [
"device token you want to skip",
"another device token you want to skip"
]
}
I really don't know where to start!
Upvotes: 7
Views: 5502
Reputation: 1277
In Rails 4.2.x and Ruby 2.3.x, I'm using the 'urbanairship' gem, it is best to reference the most recent documentation found here.
Example of sending to ios:
def deliver_push_notification recipient_uuid, message
ua = Urbanairship
client = ua::Client.new(key: ENV["URBAN_AIRSHIP_APP_KEY"], secret: ENV["URBAN_AIRSHIP_MASTER_SECRET"])
p = client.create_push
p.audience = ua.ios_channel(recipient_uuid)
p.notification = ua.notification(ios: ua.ios(alert: message))
p.device_types = ua.device_types(["ios"])
p.send_push
end
Upvotes: 0
Reputation: 43959
Better way is to use UrbanAirship Groupon version. Their docs specify every thing very clearly and it will much neater code. Worked and tested in my application.
From the read me file, (with some more comments and all):-
Note: if you are using Ruby 1.8, you should also install the system_timer gem for more reliable timeout behaviour. See http://ph7spot.com/musings/system-timer for more information. Baically
gem install system_timer
Installation
gem install urbanairship
# or specify in your gem file
gem "urbanairship"
Configuration define all this in initializes directory and then make sure u restart your application.
Urbanairship.application_key = 'application-key'
Urbanairship.application_secret = 'application-secret'
Urbanairship.master_secret = 'master-secret'
Urbanairship.logger = Rails.logger
Urbanairship.request_timeout = 5 # default
Usage
Registering a device token
Urbanairship.register_device 'DEVICE-TOKEN' # => true
Unregistering a device token
Urbanairship.unregister_device 'DEVICE-TOKEN' # => true
Sending a push notification (for instant delivery remove schedule_for attribute)
notification = {
:schedule_for => 1.hour.from_now,
:device_tokens => ['DEVICE-TOKEN-ONE', 'DEVICE-TOKEN-TWO'],
:aps => {:alert => 'You have a new message!', :badge => 1}
}
Urbanairship.push notification # => true
Batching push notification sends (for instant delivery remove schedule_for attribute)
notifications = [
{
:schedule_for => 1.hour.from_now,
:device_tokens => ['DEVICE-TOKEN-ONE', 'DEVICE-TOKEN-TWO'],
:aps => {:alert => 'You have a new message!', :badge => 1}
},
{
:schedule_for => 3.hours.from_now,
:device_tokens => ['DEVICE-TOKEN-THREE'],
:aps => {:alert => 'You have a new message!', :badge => 1}
}
]
Urbanairship.batch_push notifications # => true
Sending broadcast notifications Urbanairship allows you to send a broadcast notification to all active registered device tokens for your app.(for instant delivery remove schedule_for attribute)
notification = {
:schedule_for => 1.hour.from_now,
:aps => {:alert => 'Important announcement!', :badge => 1}
}
Urbanairship.broadcast_push notification # => true
Upvotes: 23
Reputation: 5879
Ok, this is a simple way of sending a urban airship broadcast from ROR controller:
require 'net/http'
require 'net/https'
require 'open-uri'
app_key = 'JJqr...'
app_secret = 'lAu7...'
master_secret = 'K81P...'
payload ={
"aps" => {"badge" => "0", "alert" => "My own message", "sound" => ""}
}.to_json
full_path = 'https://go.urbanairship.com/api/push/broadcast/'
url = URI.parse(full_path)
req = Net::HTTP::Post.new(url.path, initheader = {'Content-Type' =>'application/json'})
req.body = payload
req.basic_auth app_key, master_secret
con = Net::HTTP.new(url.host, url.port)
con.use_ssl = true
r = con.start {|http| http.request(req)}
logger.info "\n\n##############\n\n " + "Resonse body: " + r.body + " \n\n##############\n\n"
Cheers!
Upvotes: 0
Reputation: 1719
Check out this example:
https://github.com/bhedana/urbanairship_on_rails
It was linked from the Urban Airship support site
Upvotes: 0