apns 0.0.4 → 0.9.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.
@@ -4,14 +4,22 @@ a gem for the Apple Push Notification Service.
4
4
 
5
5
  h2. Install
6
6
 
7
- gem sources -a http://gems.github.com
8
-
9
- sudo gem install jpoz-apns
10
-
7
+ sudo gem install apns
11
8
 
12
9
  h2. Setup:
13
10
 
14
- Set what host, port, pem file and password on the APNS class:
11
+ Convert your certificate
12
+
13
+ In Keychain access export your certificate as a p12. Then run the following command to convert it to a .pem
14
+
15
+
16
+ <pre>
17
+ <code>
18
+ openssl pkcs12 -in cert.p12 -out cert.pem -nodes -clcerts
19
+ </code>
20
+ </pre>
21
+
22
+ After you have your .pem file. Set what host, port, certificate file location on the APNS class:
15
23
 
16
24
  <pre>
17
25
  <code>
@@ -19,15 +27,14 @@ Set what host, port, pem file and password on the APNS class:
19
27
  # gateway.sandbox.push.apple.com is default
20
28
 
21
29
  APNS.pem = '/path/to/pem/file'
22
- APNS.pass = 'secret'
23
- # openssl pkcs12 -in cert.p12 -out cert.pem -nodes -clcerts
30
+ # this is the file you just created
24
31
 
25
32
  APNS.port = 2195
26
33
  # this is also the default. Shouldn't ever have to set this, but just in case Apple goes crazy, you can.
27
34
  </code>
28
35
  </pre>
29
36
 
30
- h2. Example:
37
+ h2. Example (Single notification):
31
38
 
32
39
  Then to send a push notification you can either just send a string as the alert or give it a hash for the alert, badge and sound.
33
40
 
@@ -41,6 +48,23 @@ Then to send a push notification you can either just send a string as the alert
41
48
  </code>
42
49
  </pre>
43
50
 
51
+ h2. Example (Multiple notifications):
52
+
53
+ You can also send multiple notifications using the same connection to Apple:
54
+
55
+ <pre>
56
+ <code>
57
+ device_token = '123abc456def'
58
+
59
+ n1 = APNS::Notification.new(device_token, 'Hello iPhone!' )
60
+
61
+ n2 = APNS::Notification.new(device_token, :alert => 'Hello iPhone!', :badge => 1, :sound => 'default')
62
+
63
+ APNS.send_notifications([n1, n2])
64
+ </code>
65
+ </pre>
66
+
67
+
44
68
  h2. Send other info along with aps
45
69
 
46
70
  You can send other application specific information as well.
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'spec/rake/spectask'
6
6
 
7
7
  GEM = 'apns'
8
8
  GEM_NAME = 'apns'
9
- GEM_VERSION = '0.0.4'
9
+ GEM_VERSION = '0.9.0'
10
10
  AUTHORS = ['James Pozdena']
11
11
  EMAIL = "jpoz@jpoz.net"
12
12
  HOMEPAGE = "http://github.com/jpoz/apns"
@@ -1 +1,2 @@
1
1
  require 'apns/core'
2
+ require 'apns/notification'
@@ -21,6 +21,17 @@ module APNS
21
21
  sock.close
22
22
  end
23
23
 
24
+ def self.send_notifications(notifications)
25
+ sock, ssl = self.open_connection
26
+
27
+ notifications.each do |n|
28
+ ssl.write(n.packaged_notification)
29
+ end
30
+
31
+ ssl.close
32
+ sock.close
33
+ end
34
+
24
35
  protected
25
36
 
26
37
  def self.packaged_notification(device_token, message)
@@ -2,8 +2,38 @@ module APNS
2
2
  class Notification
3
3
  attr_accessor :device_token, :alert, :badge, :sound, :other
4
4
 
5
- def send_notification
6
- APNS.send_notification(self.device_token, )
5
+ def initialize(device_token, message)
6
+ self.device_token = device_token
7
+ if message.is_a?(Hash)
8
+ self.alert = message[:alert]
9
+ self.badge = message[:badge]
10
+ self.sound = message[:sound]
11
+ self.other = message[:other]
12
+ elsif message.is_a?(String)
13
+ self.alert = message
14
+ else
15
+ raise "Notification needs to have either a hash or string"
16
+ end
7
17
  end
18
+
19
+ def packaged_notification
20
+ pt = self.packaged_token
21
+ pm = self.packaged_message
22
+ [0, 0, 32, pt, 0, pm.size, pm].pack("ccca*cca*")
23
+ end
24
+
25
+ def packaged_token
26
+ [device_token.gsub(/[\s|<|>]/,'')].pack('H*')
27
+ end
28
+
29
+ def packaged_message
30
+ aps = {'aps'=> {} }
31
+ aps['aps']['alert'] = self.alert if self.alert
32
+ aps['aps']['badge'] = self.badge if self.badge
33
+ aps['aps']['sound'] = self.sound if self.sound
34
+ aps.merge!(self.other) if self.other
35
+ aps.to_json
36
+ end
37
+
8
38
  end
9
39
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Pozdena
@@ -9,7 +9,7 @@ autorequire: apns
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-18 00:00:00 -08:00
12
+ date: 2010-03-22 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15