notify_user =========== Install: ``` gem 'notify_user' rails g notify_user:install ``` Getting started: ``` rails g notify_user:notification NewMyProperty ``` Edit views/notify_user/new_my_property/action_mailer/notification.html.erb, e.g. ```

We added <%= @notification.params[:listing_address] %> to your My Properties.

``` Then send: ``` NotifyUser.send_notification('new_my_property').to(user).with("listing_address" => "123 Main St").notify ``` Dynamic email titles use %{tags} that correspond to your params hash (Will throw an exception if key is missing) ``` channel :action_mailer, subject: "%{name} sent you a message", aggregate: { subject: "%{name} sent you %{count} messages" } ``` To enable APNS add this line to your app/notification/notification_type.rb ``` channel :apns, aggregate_per: false ``` To run the tests: ``` BUNDLE_GEMFILE=gemfiles/rails40.gemfile bundle install BUNDLE_GEMFILE=gemfiles/rails40.gemfile bundle exec rspec spec ``` To run the tests like Travis: ``` gem install wwtd wwtd ``` ## APNS providers By default, we use [Houston](https://github.com/nomad/houston/) to deliver push notifications via APNS from the server. You also need to provide exported versions of your push notification certificate and key as .pem files, these instructions come from the [APN on Rails](https://github.com/PRX/apn_on_rails) project on how to do that: Once you have the certificate from Apple for your application, export your key and the apple certificate as p12 files. Here is a quick walkthrough on how to do this: 1. Click the disclosure arrow next to your certificate in Keychain Access and select the certificate and the key. 2. Right click and choose `Export 2 items…`. 3. Choose the p12 format from the drop down and name it `cert.p12`. Now covert the p12 file to a pem file: $ openssl pkcs12 -in cert.p12 -out apple_push_notification.pem -nodes -clcerts `notify_user` will look for your pem files within `"#{Rails.root}/config/keys/`, named `development_push.pem` and `production_push`, for the development and production APNS gateways respectively. ## The Device model When delivering via Houston, we also need access to a model which has access to device tokens that is related to your notification target. i.e. Assuming your notification target is a User: ``` class User < ActiveRecord::Base has_many :devices end class Device < ActiveRecord::Base belongs_to :user validates :token, presence:true # A string representation of your device's token, the only thing need to delivery push notifications. end ``` A gem that provides such a model is [dre](https://github.com/Papercloud/dre), a mountable Rails engine that lets you flag a model (e.g. `User`) as a device owner and provides a number of routes to allow device registration. By default, we assume the relation is named `:devices`, but this can be passed through when enabling APNS for a notification if you want to use something else: ``` channel :apns, aggregate_per: false, device_method: :some_other_method ``` ##Web interface Display a list of notifications for a logged in user ``` visit /notify_user/notifications ``` Clicking on a notification gets marked as read and taken to the redirect_logic action (notifications_controller.rb) ``` def redirect_logic(notification) class = notification.params[:type].capitalize.constantize object = class.find(@notification.params[:id]) redirect_to property_url(object) end ``` Add line to environment.rb file to configure host url for mail notifications ``` config.action_mailer.default_url_options = { :host => "http://example.com" } ``` ##Subscriptions Unsubscribing from a notification type, first add it to the notify_user.rb initilizer ``` # Override the default notification type config.unsubscribable_notifications = ['NewPostNotification','NewSale'] ``` Users can manage their subscription statuses through the web interface ``` visit notify_user/notifications/unsubscribe ``` Unsubscribe link helper - add this to your views/notify_user/layouts/action_mailer.html.erb ``` <% if is_unsubscribeable? @notification %>

<%= unsubscribe_link(@notification, "Unsubscribe") %>

<% end %> ``` ##Unsubscribing/Subscribing to a specific group_id or resource Unsubscribing from a specific `group_id` eg. specific resource. `put /notify_user/notifications/unsubscribe_from_object.json` expects ``` subscription: {type: "NotificationType", group_id: 1, unsubscribe: true|false} ``` returns `response_code 201` ##Upgrade v0.1.4 to v0.2 Run aggregate_interval generator which generates the migrations to add a sent_time field to notifications ``` rails generate notify_user:aggr_interval rake db:migrate ``` ##Upgrading to JSON params data type Run json_update generator which generates the migrations to change the params datatype to json as well as convert the current data to json ``` rails generate notify_user:json_update rake db:migrate ``` ##Changes Notification description and aggregates has changed syntax slighly from ``` @@description = "please override this type description" @@aggregate_per = 10.minutes ``` to ``` self.description = "please override this type description" self.aggregate_per = 10.minutes ```