Skip to content
A gem for creating Safari push notification push packages.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
lib
spec
.gitignore
.travis.yml
Gemfile
LICENSE.txt initial commit Oct 29, 2013
README.md
Rakefile
push_package.gemspec

README.md

Push Package

Build Status: Build Status

Purpose

This gem provides a Ruby library and command line tool for creating a push package to be used for Safari Push Notifications.

Features

  • Validates push package contents
  • Generates manifest.json
  • Signs package with required signature
  • Creates pushPackage.zip

Installation

gem install push_package

Notes:

You must obtain a Website Push certificate from apple which requires a iOS developer license or a Mac developer license

Starting February 2016, you will also need a copy of the Apple intermediate cert (WWDR Certificate, expiring 02/07/23)

require 'push_package'

website_params = {
  websiteName: "Bay Airlines",
  websitePushID: "web.com.example.domain",
  allowedDomains: ["http://domain.example.com"],
  urlFormatString: "http://domain.example.com/%@/?flight=%@",
  authenticationToken: "19f8d7a6e9fb8a7f6d9330dabe",
  webServiceURL: "https://example.com/push"
}

iconset_path = 'path/to/iconset'
certificate = 'path/to/certificate.p12' # or certificate_string
intermediate_cert = 'path/to/AppleWWDRCA.cer'
package = PushPackage.new(website_params, iconset_path, certificate, 'optional cert password', intermediate_cert)
package.save('path/to/save')
$> push_package --website-json=./website.json --iconset-path=/path/to/project/iconset --output-dir=./ --certificate=./Certificate.p12
   wrote: ./pushPackage.zip

Development/Test Certificates

# verify the localhost.crt
openssl verify spec/fixtures/localhost.crt

# verify the localhost.csr
openssl req -text -noout -verify -in spec/fixtures/localhost.csr

# verify the localhost.key
openssl rsa -in spec/fixtures/localhost.key -check -noout

# print information about the certificate to STDOUT
openssl x509 -in spec/fixtures/localhost.crt -text -noout

# generate a new rsa key
openssl genrsa -out spec/fixtures/localhost.key 2048

# generate a new csr from using an existing key
openssl req -new -sha256 -key spec/fixtures/localhost.key -out spec/fixtures/localhost.csr

# generate a new certificate using an existing csr and private key
openssl x509 -req -days 3650 -in spec/fixtures/localhost.csr -signkey spec/fixtures/localhost.key -out spec/fixtures/localhost.crt

# export the certificate as a p12
# make sure to set the passphrase to 'testing' because the specs depend on it
openssl pkcs12 -export -out spec/fixtures/self-signed.p12 -inkey spec/fixtures/localhost.key -in spec/fixtures/localhost.crt

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Write tests for your feature
  4. Commit your changes (git commit -am 'Add some feature')
  5. Push to the branch (git push origin my-new-feature)
  6. Create new Pull Request
You can’t perform that action at this time.