Project

gravel

0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
Unified Push Notifications
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.11
~> 10.0
~> 3.0
~> 0.9.8

Runtime

~> 1.5
~> 0.14.1
 Project Readme

Gravel

Unified Push Notifications

Installation

You can install Gravel using the following command:

$ gem install gravel

Usage

Currently, Gravel only supports APNS (but FCM support is on the list).

APNS

Gravel uses the new APNS token based authentication so if you don't have an APNS token, you'll need to generate one using the Apple Developer portal.

You'll also need the ID for that key, your team's ID and the bundle identifier of your application (which should be passed as the 'topic' value - see below).

The APNS class provides the connection to APNS, you can create an instance like this:

apns = Gravel::APNS.new(
  key: Gravel::APNS.key_from_file('/path/to/APNsAuthKey_XXXXXXXXXX.p8'),
  key_id: 'XXXXXXXXXX',
  team_id: 'XXXXXXXXXX',
  topic: 'com.example.app'
)

There are also a few other parameters you can specify, you can check the documentation for the full list but a couple that you might need are:

:environment

This can be set to either :production or :development.

The default value is :development.

:concurrency

This tells Gravel how many connections it should open to APNS.

One notification can be sent at a time through a connection, so opening multiple connections will improve the speed at which you can crunch through a notification task.

The default value is 1.


Next, you'll want to send a notification. You can create a notification like this:

notification = Gravel::APNS::Notification.new
notification.title = 'Hello, World!'
notification.body = 'How are you today?'
notification.sound = :default
notification.device_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Finally, you can send the notification:

apns.send(notification) do |success, response|
  puts "Success: #{success}, Response: #{response}"
end

The requests are all asynchronous, so if you need to wait for them to finish you can call the wait method:

apns.wait

This will block the thread until all requests have completed.


If you're sending notifications to lots of devices, there's a helper method that allows you to quickly generate the same notification for each device token:

tokens = [
  'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
  'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
]

notifications = notification.for_device_tokens(*tokens)

Then you can just loop over each notification and deliver it:

notifications.each do |notification|
  apns.send(notification) do |success, result|
    puts "Success: #{success}, Response: #{response}"
  end
end

You should keep the APNS instance in memory for as long a possible, this keeps the connection(s) to APNS open.

See Communicating with APNs - Best Practices for Managing Connections for more info on this.

Development

After checking out the repo, run rake spec to run the tests.

To install this gem onto your local machine, run bundle exec rake install.