pushmeup 0.0.3 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +33 -1
- data/lib/pushmeup/apns/core.rb +31 -40
- data/lib/pushmeup/gcm/core.rb +7 -3
- data/lib/pushmeup/gcm/notification.rb +2 -1
- data/lib/pushmeup/version.rb +1 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -38,7 +38,7 @@ and install it with
|
|
38
38
|
|
39
39
|
$ openssl pkcs12 -in cert.p12 -out cert.pem -nodes -clcerts
|
40
40
|
|
41
|
-
3. After you have created your ``pem`` file. Set
|
41
|
+
3. After you have created your ``pem`` file. Set the host, port and certificate file location on the APNS class. You just need to set this once:
|
42
42
|
|
43
43
|
APNS.host = 'gateway.push.apple.com'
|
44
44
|
# gateway.sandbox.push.apple.com is default
|
@@ -153,6 +153,38 @@ for more information on parameters check documentation: [GCM | Android Developer
|
|
153
153
|
|
154
154
|
Check this link [GCM: Getting Started](http://developer.android.com/guide/google/gcm/gs.html)
|
155
155
|
|
156
|
+
### (Optional) You can add multiple keys for GCM
|
157
|
+
|
158
|
+
You can use multiple keys to send notifications, to do it just do this changes in the code
|
159
|
+
|
160
|
+
#### Configure
|
161
|
+
|
162
|
+
GCM.key = { :key1 => "123abc456def", :key2 => "456def123abc" }
|
163
|
+
# the ``:key1`` and the ``:key2`` can be any object, they can be the projectID, the date, the version, doesn't matter.
|
164
|
+
# The only restrain is: they need to be valid keys for a hash.
|
165
|
+
|
166
|
+
#### Usage
|
167
|
+
|
168
|
+
# For single notification
|
169
|
+
GCM.send_notification( destination, :identity => :key1 )
|
170
|
+
# Empty notification
|
171
|
+
|
172
|
+
GCM.send_notification( destination, data, :identity => :key1 )
|
173
|
+
# Notification with custom information
|
174
|
+
|
175
|
+
GCM.send_notification( destination, data, :collapse_key => "placar_score_global", :time_to_live => 3600, :delay_while_idle => false, :identity => :key1 )
|
176
|
+
# Notification with custom information and parameters
|
177
|
+
|
178
|
+
# For multiple notifications
|
179
|
+
options1 = {}
|
180
|
+
options2 = {..., :identity => :key2}
|
181
|
+
n1 = GCM::Notification.new(destination1, data1, options1.merge({:identity => :key2}))
|
182
|
+
n2 = GCM::Notification.new(destination2, data2, :identity => :key1)
|
183
|
+
n3 = GCM::Notification.new(destination3, data3, options2)
|
184
|
+
|
185
|
+
GCM.send_notifications( [n1, n2, n3] )
|
186
|
+
# In this case, every notification has his own parameters, options and key
|
187
|
+
|
156
188
|
## Build Status [](http://travis-ci.org/NicosKaralis/pushmeup) [](https://codeclimate.com/github/NicosKaralis/pushmeup)
|
157
189
|
|
158
190
|
## Dependency Status [](https://gemnasium.com/NicosKaralis/pushmeup)
|
data/lib/pushmeup/apns/core.rb
CHANGED
@@ -32,19 +32,20 @@ module APNS
|
|
32
32
|
|
33
33
|
def self.feedback
|
34
34
|
raise "Not implemented yet"
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
35
|
+
sock, ssl = self.feedback_connection
|
36
|
+
|
37
|
+
apns_feedback = []
|
38
|
+
|
39
|
+
while line = sock.gets # Read lines from the socket
|
40
|
+
line.strip!
|
41
|
+
f = line.unpack('N1n1H140')
|
42
|
+
apns_feedback << [Time.at(f[0]), f[2]]
|
43
|
+
end
|
44
|
+
|
45
|
+
ssl.close
|
46
|
+
sock.close
|
47
|
+
|
48
|
+
return apns_feedback
|
48
49
|
end
|
49
50
|
|
50
51
|
protected
|
@@ -64,32 +65,22 @@ module APNS
|
|
64
65
|
return sock, ssl
|
65
66
|
end
|
66
67
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
# ssl.connect
|
85
|
-
#
|
86
|
-
# ssl.puts("GET / HTTP/1.0")
|
87
|
-
# ssl.puts("")
|
88
|
-
# while line = ssl.gets
|
89
|
-
# puts line
|
90
|
-
# end
|
91
|
-
#
|
92
|
-
# return sock, ssl
|
93
|
-
# end
|
68
|
+
def self.feedback_connection
|
69
|
+
raise "The path to your pem file is not set. (APNS.pem = /path/to/cert.pem)" unless self.pem
|
70
|
+
raise "The path to your pem file does not exist!" unless File.exist?(self.pem)
|
71
|
+
|
72
|
+
context = OpenSSL::SSL::SSLContext.new
|
73
|
+
context.cert = OpenSSL::X509::Certificate.new(File.read(self.pem))
|
74
|
+
context.key = OpenSSL::PKey::RSA.new(File.read(self.pem), self.pass)
|
75
|
+
|
76
|
+
fhost = self.host.gsub('gateway','feedback')
|
77
|
+
puts fhost
|
78
|
+
|
79
|
+
sock = TCPSocket.new(fhost, 2196)
|
80
|
+
ssl = OpenSSL::SSL::SSLSocket.new(sock,context)
|
81
|
+
ssl.connect
|
82
|
+
|
83
|
+
return sock, ssl
|
84
|
+
end
|
94
85
|
|
95
86
|
end
|
data/lib/pushmeup/gcm/core.rb
CHANGED
@@ -35,6 +35,9 @@ module GCM
|
|
35
35
|
if !n.collapse_key.nil? && n.time_to_live.nil?
|
36
36
|
raise %q{If you are defining a "colapse key" you need a "time to live"}
|
37
37
|
end
|
38
|
+
if self.key.is_a?(Hash) && n.identity.nil?
|
39
|
+
raise %{If your key is a hash of keys you'l need to pass a identifier to the notification!}
|
40
|
+
end
|
38
41
|
|
39
42
|
if self.format == :json
|
40
43
|
self.send_push_as_json(n)
|
@@ -47,7 +50,7 @@ module GCM
|
|
47
50
|
|
48
51
|
def self.send_push_as_json(n)
|
49
52
|
headers = {
|
50
|
-
'Authorization' => "key=#{self.key}",
|
53
|
+
'Authorization' => "key=#{ self.key.is_a?(Hash) ? self.key[n.identity] : self.key }",
|
51
54
|
'Content-Type' => 'application/json',
|
52
55
|
}
|
53
56
|
body = {
|
@@ -63,7 +66,8 @@ module GCM
|
|
63
66
|
def self.send_push_as_plain_text(n)
|
64
67
|
raise "Still has to be done: http://developer.android.com/guide/google/gcm/gcm.html"
|
65
68
|
headers = {
|
66
|
-
|
69
|
+
# TODO: Aceitar key ser um hash
|
70
|
+
'Authorization' => "key=#{ self.key.is_a?(Hash) ? self.key[n.identity] : self.key }",
|
67
71
|
'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8',
|
68
72
|
}
|
69
73
|
return self.send_to_server(headers, body)
|
@@ -78,7 +82,7 @@ module GCM
|
|
78
82
|
def self.build_response(response)
|
79
83
|
case response.code
|
80
84
|
when 200
|
81
|
-
{:response => 'success', :body => response.body, :headers => response.headers, :status_code => response.code}
|
85
|
+
{:response => 'success', :body => JSON.parse(response.body), :headers => response.headers, :status_code => response.code}
|
82
86
|
when 400
|
83
87
|
{:response => 'Only applies for JSON requests. Indicates that the request could not be parsed as JSON, or it contained invalid fields.', :status_code => response.code}
|
84
88
|
when 401
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module GCM
|
2
2
|
class Notification
|
3
|
-
attr_accessor :device_tokens, :data, :collapse_key, :time_to_live, :delay_while_idle
|
3
|
+
attr_accessor :device_tokens, :data, :collapse_key, :time_to_live, :delay_while_idle, :identity
|
4
4
|
|
5
5
|
def initialize(tokens, data, options = {})
|
6
6
|
self.device_tokens = tokens
|
@@ -9,6 +9,7 @@ module GCM
|
|
9
9
|
@collapse_key = options[:collapse_key]
|
10
10
|
@time_to_live = options[:time_to_live]
|
11
11
|
@delay_while_idle = options[:delay_while_idle]
|
12
|
+
@identity = options[:identity]
|
12
13
|
end
|
13
14
|
|
14
15
|
def device_tokens=(tokens)
|
data/lib/pushmeup/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pushmeup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -120,7 +120,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
120
|
version: '0'
|
121
121
|
segments:
|
122
122
|
- 0
|
123
|
-
hash:
|
123
|
+
hash: -2576380722783718588
|
124
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
125
|
none: false
|
126
126
|
requirements:
|
@@ -129,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
129
|
version: '0'
|
130
130
|
segments:
|
131
131
|
- 0
|
132
|
-
hash:
|
132
|
+
hash: -2576380722783718588
|
133
133
|
requirements: []
|
134
134
|
rubyforge_project: pushmeup
|
135
135
|
rubygems_version: 1.8.24
|