pntfr 0.5.3 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +7 -7
- data/README.md +25 -2
- data/lib/pntfr.rb +1 -0
- data/lib/pntfr/apns_configurator.rb +15 -0
- data/lib/pntfr/base_service.rb +28 -0
- data/lib/pntfr/feedback.rb +32 -0
- data/lib/pntfr/notifier.rb +3 -12
- data/lib/pntfr/session/ios.rb +3 -11
- data/lib/pntfr/version.rb +5 -1
- data/pntfr.gemspec +1 -0
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ea2c676227f8cb47624247e7b17c1b23ca4f807
|
4
|
+
data.tar.gz: b959760dd664b66b8e7fac4cc2047fd0d160964e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8be443994f430f303904e47b2b10b537923470b59b1a0a4be8b9c877c7afa7646c8b9b5406397f9bacb1ecca94f95d680cb45348609c2ee9f248504982849dca
|
7
|
+
data.tar.gz: 4a0fbc47b6eed0cdb7c6f14092e2008da382a8301f65e757fed60a6ec80d3e5e59545adf5a88491a4ea2bf24e8a08d499ed3134e851b1a45c235356d1749596a
|
data/Gemfile.lock
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
pntfr (0.
|
5
|
-
|
4
|
+
pntfr (0.5.3)
|
5
|
+
apns2 (~> 0.0, >= 0.0.1)
|
6
6
|
gcm (~> 0.0, >= 0.0.9)
|
7
7
|
json (~> 1.8, >= 1.8.1)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
|
12
|
+
apns2 (0.0.1)
|
13
13
|
gcm (0.1.0)
|
14
14
|
httparty
|
15
15
|
json
|
16
|
-
httparty (0.13.
|
16
|
+
httparty (0.13.7)
|
17
17
|
json (~> 1.8)
|
18
18
|
multi_xml (>= 0.5.2)
|
19
|
-
json (1.8.
|
20
|
-
minitest (5.
|
19
|
+
json (1.8.3)
|
20
|
+
minitest (5.8.3)
|
21
21
|
multi_xml (0.5.5)
|
22
22
|
rake (10.4.2)
|
23
23
|
|
@@ -26,6 +26,6 @@ PLATFORMS
|
|
26
26
|
|
27
27
|
DEPENDENCIES
|
28
28
|
bundler (~> 1.6)
|
29
|
-
minitest (~> 5.
|
29
|
+
minitest (~> 5.8, >= 5.8.3)
|
30
30
|
pntfr!
|
31
31
|
rake
|
data/README.md
CHANGED
@@ -116,7 +116,7 @@ msg[:custom]= {
|
|
116
116
|
:'last-extra' => {lastkey: 'last value'}
|
117
117
|
}
|
118
118
|
|
119
|
-
# SETTING ANPS AND
|
119
|
+
# SETTING ANPS AND GCM CREDENTIALS ON EACH NOTIFICATION
|
120
120
|
# using different configuration on each call
|
121
121
|
credentials= {
|
122
122
|
# for ios you select what you override, in this case host and port will be
|
@@ -132,6 +132,30 @@ notifier= Pntfr::Notifier.new( credentials )
|
|
132
132
|
notifier.update_devices(device).msg({:title => 'Title', :description => 'Description'}).notify
|
133
133
|
# of course the device's push_id and credentials should belong to the same application.
|
134
134
|
```
|
135
|
+
## Apns Feedback
|
136
|
+
This is specific of the Apple Push Notification Service.
|
137
|
+
To clean the database from bad devices that will slow down batch notification sendings,
|
138
|
+
one must check which devices caused error on the past and remove them from the database.
|
139
|
+
|
140
|
+
The process is easy, simply ask the Apns service for the list of bad devices,
|
141
|
+
and then do the cleaning.
|
142
|
+
|
143
|
+
```ruby
|
144
|
+
feedback= Pntfr::Feedback.new
|
145
|
+
bad_devices= feedback.bad_devices
|
146
|
+
|
147
|
+
# do the cleaning of your database, for example
|
148
|
+
bad_devices.each do |bad_device|
|
149
|
+
d= Device.find_by_platform_and_push_id(Pntfr::Platforms.IOS, bad_device.push_id)
|
150
|
+
d.destroy
|
151
|
+
end
|
152
|
+
```
|
153
|
+
|
154
|
+
+bad_devices+ is an Array of Pntfr::BadDevice objects with the two attributes returned
|
155
|
+
by the apns feedback service: timestamp and push_id.
|
156
|
+
|
157
|
+
It is recommended to do a feedback cleaning once a day.
|
158
|
+
|
135
159
|
# Testing
|
136
160
|
For testing, one can check the messages sent to each device the same way
|
137
161
|
that Rails ActiveMailer works: messages are stacked into `Pntfr.deliveries[push_id]`,
|
@@ -141,7 +165,6 @@ notifications are not sent, only stored in the stack.
|
|
141
165
|
|
142
166
|
# Further development (roadmap)
|
143
167
|
- Update cannonical push id when required for gcm.
|
144
|
-
- Retrieve feedback on sent messages for apns.
|
145
168
|
|
146
169
|
# Resources
|
147
170
|
- Depends on APNS gem: https://rubygems.org/gems/apns
|
data/lib/pntfr.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Pntfr
|
2
|
+
module ApnsConfigurator
|
3
|
+
def configure_apns config_override
|
4
|
+
config= Pntfr.config.apns
|
5
|
+
unless config_override.nil?
|
6
|
+
config= config.clone.merge(config_override)
|
7
|
+
end
|
8
|
+
APNS.host = config[:host]
|
9
|
+
APNS.pem = config[:pem]
|
10
|
+
APNS.port = config[:port]
|
11
|
+
APNS.pass = config[:pass]
|
12
|
+
@apns= APNS
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Pntfr
|
2
|
+
class BaseService
|
3
|
+
def initialize credentials
|
4
|
+
validate_credentials(credentials)
|
5
|
+
@credentials= credentials || {}
|
6
|
+
end
|
7
|
+
|
8
|
+
#--------------------------------------------
|
9
|
+
private
|
10
|
+
#--------------------------------------------
|
11
|
+
def andr_session
|
12
|
+
@andr_session||= Pntfr::Session::Android.new(@credentials[:andr])
|
13
|
+
end
|
14
|
+
def ios_session
|
15
|
+
@ios_session||= Pntfr::Session::Ios.new(@credentials[:ios])
|
16
|
+
end
|
17
|
+
def validate_credentials(credentials)
|
18
|
+
return if credentials.nil?
|
19
|
+
if !credentials.is_a?(Hash)
|
20
|
+
raise ArgumentError.new('Credentials should be a Hash with either :andr or :ios keys!')
|
21
|
+
end
|
22
|
+
if !(credentials.has_key?(:andr) or credentials.has_key?(:ios))
|
23
|
+
raise ArgumentError.new('Either :andr or :ios service credentials should have been provided!')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/base_service'
|
2
|
+
require 'apns'
|
3
|
+
require 'pntfr/apns_configurator'
|
4
|
+
|
5
|
+
module Pntfr
|
6
|
+
class Feedback < BaseService
|
7
|
+
include Pntfr::ApnsConfigurator
|
8
|
+
|
9
|
+
def initialize credentials=nil
|
10
|
+
super
|
11
|
+
configure_apns(credentials[:ios])
|
12
|
+
end
|
13
|
+
|
14
|
+
def bad_devices
|
15
|
+
feedback= ::APNS.feedback
|
16
|
+
feedback.collect do |rs|
|
17
|
+
bd= BadDevice.new(rs.last)
|
18
|
+
bd.timestamp= rs.first
|
19
|
+
bd
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
class BadDevice
|
26
|
+
attr_accessor :timestamp
|
27
|
+
attr_accessor :push_id
|
28
|
+
def initialize(push_id)
|
29
|
+
@push_id= push_id
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/pntfr/notifier.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/base_service'
|
1
2
|
require File.dirname(__FILE__) + '/session/base'
|
2
3
|
require File.dirname(__FILE__) + '/notification'
|
3
4
|
|
4
5
|
module Pntfr
|
5
6
|
|
6
|
-
class Notifier
|
7
|
+
class Notifier < BaseService
|
7
8
|
def self.to devices, credentials=nil
|
8
9
|
notif= Notifier.new(credentials)
|
9
10
|
notif.update_devices(devices)
|
@@ -25,8 +26,7 @@ module Pntfr
|
|
25
26
|
# }
|
26
27
|
#
|
27
28
|
def initialize credentials=nil
|
28
|
-
|
29
|
-
@credentials= credentials || {}
|
29
|
+
super
|
30
30
|
|
31
31
|
@andr_responses=[]
|
32
32
|
@ios_responses= []
|
@@ -79,15 +79,6 @@ module Pntfr
|
|
79
79
|
def ios_session
|
80
80
|
@ios_session||= Pntfr::Session::Ios.new(@credentials[:ios])
|
81
81
|
end
|
82
|
-
def validate_credentials(credentials)
|
83
|
-
return if credentials.nil?
|
84
|
-
if !credentials.is_a?(Hash)
|
85
|
-
raise ArgumentError.new('Credentials should be a Hash with either :andr or :ios keys!')
|
86
|
-
end
|
87
|
-
if !(credentials.has_key?(:andr) or credentials.has_key?(:ios))
|
88
|
-
raise ArgumentError.new('Either :andr or :ios service credentials should have been provided!')
|
89
|
-
end
|
90
|
-
end
|
91
82
|
|
92
83
|
end
|
93
84
|
|
data/lib/pntfr/session/ios.rb
CHANGED
@@ -2,9 +2,12 @@
|
|
2
2
|
# Session implementation for iOS
|
3
3
|
#
|
4
4
|
require 'apns'
|
5
|
+
require 'pntfr/apns_configurator'
|
6
|
+
|
5
7
|
module Pntfr
|
6
8
|
module Session
|
7
9
|
class Ios < Pntfr::Session::Base
|
10
|
+
include Pntfr::ApnsConfigurator
|
8
11
|
|
9
12
|
attr_reader :apns
|
10
13
|
|
@@ -47,17 +50,6 @@ module Pntfr
|
|
47
50
|
device.methods.include?(:num_notifs)
|
48
51
|
end
|
49
52
|
|
50
|
-
def configure_apns config_override
|
51
|
-
config= Pntfr.config.apns
|
52
|
-
unless config_override.nil?
|
53
|
-
config= config.clone.merge(config_override)
|
54
|
-
end
|
55
|
-
APNS.host = config[:host]
|
56
|
-
APNS.pem = config[:pem]
|
57
|
-
APNS.port = config[:port]
|
58
|
-
APNS.pass = config[:pass]
|
59
|
-
@apns= APNS
|
60
|
-
end
|
61
53
|
end
|
62
54
|
end
|
63
55
|
end
|
data/lib/pntfr/version.rb
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
# Let's follow Semantic Versioning: http://semver.org/
|
3
3
|
#
|
4
4
|
module Pntfr
|
5
|
+
#
|
6
|
+
# PATCH v0.6.0
|
7
|
+
# - [FEATURE] Retrieve feedback on bad devices for apns.
|
8
|
+
# - Depend on minitest for development.
|
5
9
|
#
|
6
10
|
# PATCH v0.5.3
|
7
11
|
# - [FIX] Depend on apns2 gem to be connection failure tolerant during big batches.
|
@@ -28,5 +32,5 @@ module Pntfr
|
|
28
32
|
# - Allow overriding general configuration credentials when instantiating each
|
29
33
|
# Notifier (on both platforms).
|
30
34
|
# - Internal refactoring.
|
31
|
-
VERSION = '0.
|
35
|
+
VERSION = '0.6.0'
|
32
36
|
end
|
data/pntfr.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pntfr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- oliver
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: apns2
|
@@ -98,6 +98,26 @@ dependencies:
|
|
98
98
|
- - ">="
|
99
99
|
- !ruby/object:Gem::Version
|
100
100
|
version: '0'
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: minitest
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - "~>"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '5.8'
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 5.8.3
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '5.8'
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 5.8.3
|
101
121
|
description: One single API to send push notifications to Android and iOS devices.
|
102
122
|
email:
|
103
123
|
- oliver.hv@coditramuntana.com
|
@@ -113,6 +133,9 @@ files:
|
|
113
133
|
- README.md
|
114
134
|
- Rakefile
|
115
135
|
- lib/pntfr.rb
|
136
|
+
- lib/pntfr/apns_configurator.rb
|
137
|
+
- lib/pntfr/base_service.rb
|
138
|
+
- lib/pntfr/feedback.rb
|
116
139
|
- lib/pntfr/notification.rb
|
117
140
|
- lib/pntfr/notifier.rb
|
118
141
|
- lib/pntfr/platforms.rb
|