Send Push notifications to Android/iOS devices using Parse
This tutorial will help you to send Push notifications to Android and iOS devices from Ruby on Rails application using Parse
Parse
What is Parse?
Parse can be used to increase user engagement with targeted push notifications to mobile devices having Android / iOS running. Push notifications can be sent across devices and platforms with ease. Head over to Parse to get started with Parse
Setting up Android Application
Follow the Android Push Notifications doc to set up your Android Application to use Parse for receiving Push Notifications
Setting up iOS Application
Follow the iOS Push Notifications doc to set up your iOS Application to use Parse for receiving Push Notifications
Rubygem - parse-ruby-client
Parse Ruby Client is Ruby Gem that can be used to Send Push notifications to Android/iOS devices from Ruby
Github: parse-ruby-client
Setup Steps:
1. Obtaining Application ID and API Key
To use Parse with Ruby, you will need application_id and api_key.
-
appliaction_id
This uniquely identifies your subscription and corresponding devices/configuration under your Application
-
api_key
This is the REST API key as shown in the image given below If you are Registered with Parse, you can find this under Parse App Keys section as given in the Screenshot given above
2. Install
parse-ruby-client can be installed by
gem install parse-ruby-client
If you are building Ruby on Rails application, then you need to add gem to the Gemfile as,
gem 'parse-ruby-client'
This will install and configure latest Stable version with your Rails Application
3. Initialize Parse
Initialize Parse by passing your applicationid and apikey as given below -
Parse.init application_id: APPLICATION_ID,
api_key: API_KEY,
quiet: false
application_id: is the application_id as given above
api_key: is the REST api key as given above
quiet: Logging Parameter if set equal to true - you will get Parse process logs
4. Send Push Notification
Channels
We can send notifications to Channels subscribed from Android/iOS devices using the code -
data = { alert: "This is a notification from Parse" }
push = Parse::Push.new(data, 'Organization')
push.type = 'android'
# Triggers push notification send
push.save
data - It is a hash that gets delivered to android/iOS device
Organization - This is the channel to which your application should be subscribed of push.type - This sets device type as android / ios as per the need
Individual Target (Advanced Targeting)
We can send notifications to Individuals subscribed from Android/iOS devices using the code -
data = { alert: "This is a notification from Parse" }
push = Parse::Push.new(data)
# push.type = "ios" # NOT NEEDED for Advanced Targeting
# you will find this one in Github parse-ruby-client doc
query = Parse::Query.new(Parse::Protocol::CLASS_INSTALLATION)
query.eq('injuryReports', true)
# here you need to set device type instead
query.eq('deviceType', 'android')
push.where = query.where
# Triggers push notification send
push.save
5. Ruby Implementation
which can be used as a Service or Library in your Ruby on Rails Applications
class ParseNotification
APPLICATION_ID = APP_CONFIG['parse']['application_id'].freeze
API_KEY = APP_CONFIG['parse']['api_key'].freeze
ORGANIZATION_CHANNEL = 'OrganizationName'.freeze
PUSH_TYPE_DEFAULT = 'android'.freeze
attr_accessor :username, :type, :data, :push
# Intialize Parse at the time of Class Load itself
Parse.init application_id: APPLICATION_ID,
api_key: API_KEY,
quiet: false
def initialize(params)
@username = params[:username]
@type = @username.present? ? 'individual' : 'channel'
@data = params[:data]
end
def send
# initialize push object
@push = if individual?
Parse::Push.new(@data)
else
Parse::Push.new(@data, ORGANIZATION_CHANNEL)
end
# setting device type if channel type notification
@push.type = PUSH_TYPE_DEFAULT if channel?
# adding where clause if notification type is individual
@push.where = query.where if individual?
response = @push.save
Rails.logger.info "ParseNotification:Response:#{response.inspect}"
response
end
private
def individual?
type == 'individual'
end
def channel?
type == 'channel'
end
def query
# initialize query object
@query = Parse::Query.new(Parse::Protocol::CLASS_INSTALLATION)
# set query where clause by some attribute
@query.eq('username', @username.to_s)
# setting deviceType in where clause
@query.eq('deviceType', 'android') if @type.individual?
@query
end
end
Above class can be used to Send Notifications to Individual users as well as Channel as given below
Send to Individual -
ParseNotification.new(username: '8793827397', data: {alert: 'This is individual alert from Parse'}).send
Send to Channel/Organization -
ParseNotification.new(data: {alert: 'This is individual alert from Parse'}).send
By using above two types of Push Notification sends you can send push notifications at any time to any device
Handling Response
After push.save, Parse will return response something like -
{"success" => true}
This indicates that your Push Notification is successfully enqueued for sending with Parse service.
Sometimes Push can also send protocol error if it finds some error in your request and returns Exception
Tracking Push Notifications
You can check the status of your Push notifications from Parse dashboard itself. Just visit the Push tab from your Parse account - https://www.parse.com/apps/organization-name/push_notifications
Subscribe to Ruby in Rails
Get the latest posts delivered right to your inbox
