acts_as_pushable 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/README.md +11 -2
- data/lib/acts_as_pushable.rb +1 -0
- data/lib/acts_as_pushable/apn/notification.rb +28 -26
- data/lib/acts_as_pushable/gcm/notification.rb +20 -19
- data/lib/acts_as_pushable/notification.rb +43 -0
- data/lib/acts_as_pushable/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f6ba8a11226b1b0d7acde10cbaee82fbf763f07
|
4
|
+
data.tar.gz: b1fb5b1eea5225015c4d41557882537d5429e206
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e84af18153948d8d53a498405e5801d84ff2a95ad16568899b592ec926e4c11e12e0cae42160889585fe7ab5b8b0815019e91ec353dde4559ed5004115569634
|
7
|
+
data.tar.gz: 55dd800796c96b4f361c28e23d35a3557d4e401e9cc4669d9dff1932b4051792f54335acd45e088fd7dde0402831a78213e5348aedc3140a192c0fc17a518a2c
|
data/README.md
CHANGED
@@ -105,14 +105,23 @@ Sending a push notification to a user will send the message to all of their vali
|
|
105
105
|
case device.platform
|
106
106
|
when "ios"
|
107
107
|
# iOS does not support titles
|
108
|
-
|
108
|
+
device.send_push_notification(message: 'this is a test', options)
|
109
109
|
when "android"
|
110
|
-
|
110
|
+
device.send_push_notification(message: 'this is a test', { title: 'My App' })
|
111
111
|
end
|
112
112
|
```
|
113
113
|
|
114
114
|
> You might want to consider doing this inside a worker.
|
115
115
|
|
116
|
+
## Sending silent push notifications to iOS Devices
|
117
|
+
|
118
|
+
You can send silent push notifications with no message to iOS devices. This is useful when you just want to update the badge count on the home screen.
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
user = User.find(id)
|
122
|
+
user.send_push_notification(title: false, message: false, content_available: false, count: 2)
|
123
|
+
```
|
124
|
+
|
116
125
|
## Apple Feedback Service
|
117
126
|
|
118
127
|
Occasionally you'll want to cleanup old tokens that have been invalidated for various reasons. You can do this by running -
|
data/lib/acts_as_pushable.rb
CHANGED
@@ -2,36 +2,38 @@ require 'houston'
|
|
2
2
|
|
3
3
|
module ActsAsPushable
|
4
4
|
module APN
|
5
|
-
class Notification
|
6
|
-
def
|
7
|
-
|
8
|
-
|
5
|
+
class Notification < ActsAsPushable::Notification
|
6
|
+
def perform
|
7
|
+
client.push(notification)
|
8
|
+
end
|
9
9
|
|
10
|
-
|
11
|
-
production_apn.certificate = ActsAsPushable.configuration.apn_production_certificate_file
|
10
|
+
private
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
popup_ok_button_text: options.fetch('popup_ok_button_text', 'Ok'),
|
19
|
-
popup_cancel_button_text: options.fetch('popup_cancel_button_text', 'Cancel'),
|
20
|
-
navigate_to_view: options.fetch('navigate_to_view', nil),
|
21
|
-
navigate_to_view_as_modal: options.fetch('navigate_to_view_as_modal', true),
|
22
|
-
navigate_to_view_parameters: options.fetch('navigate_to_view_parameters', {}),
|
23
|
-
}
|
12
|
+
def client
|
13
|
+
client = Houston::Client.send(environment)
|
14
|
+
client.certificate = certificate
|
15
|
+
client
|
16
|
+
end
|
24
17
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
notification.custom_data = payload
|
18
|
+
def certificate
|
19
|
+
ActsAsPushable.configuration.send("apn_#{environment}_certificate_file")
|
20
|
+
end
|
29
21
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
22
|
+
def content_available
|
23
|
+
options.delete(:content_available) || true
|
24
|
+
end
|
25
|
+
|
26
|
+
def count
|
27
|
+
options.delete(:count)
|
28
|
+
end
|
29
|
+
|
30
|
+
def notification
|
31
|
+
notification = Houston::Notification.new(device: device.token)
|
32
|
+
notification.alert = message
|
33
|
+
notification.badge = count
|
34
|
+
notification.content_available = content_available
|
35
|
+
notification.custom_data = payload
|
36
|
+
notification
|
35
37
|
end
|
36
38
|
end
|
37
39
|
end
|
@@ -2,33 +2,34 @@ require 'gcm'
|
|
2
2
|
|
3
3
|
module ActsAsPushable
|
4
4
|
module GCM
|
5
|
-
class Notification
|
6
|
-
def
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
navigate_to_view_as_modal: options.fetch("navigate_to_view_as_modal", true),
|
16
|
-
navigate_to_view_parameters: options.fetch("navigate_to_view_parameters", {}),
|
17
|
-
}
|
5
|
+
class Notification < ActsAsPushable::Notification
|
6
|
+
def perform
|
7
|
+
response = client.send([device.token], gcm_options)
|
8
|
+
if response[:not_registered_ids].include? device.token
|
9
|
+
device.update_attribute 'invalidated_at', Time.now
|
10
|
+
end
|
11
|
+
response
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
18
15
|
|
19
|
-
|
16
|
+
attr_accessor :title
|
20
17
|
|
21
|
-
|
18
|
+
def client
|
19
|
+
::GCM.new(ActsAsPushable.configuration.gcm_key)
|
20
|
+
end
|
21
|
+
|
22
|
+
def gcm_options
|
23
|
+
{
|
22
24
|
data: {
|
23
25
|
title: title,
|
24
26
|
message: message,
|
25
27
|
}.merge(payload)
|
26
28
|
}
|
29
|
+
end
|
27
30
|
|
28
|
-
|
29
|
-
|
30
|
-
device.update_attribute 'invalidated_at', Time.now
|
31
|
-
end
|
31
|
+
def title
|
32
|
+
options.delete(:title)
|
32
33
|
end
|
33
34
|
end
|
34
35
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module ActsAsPushable
|
2
|
+
class Notification
|
3
|
+
def initialize(device:, message:, **options)
|
4
|
+
@device = device
|
5
|
+
@message = message
|
6
|
+
@options = options
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.send(device:, message:, **options)
|
10
|
+
self.new(device: device, message: message, **options).perform
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
attr_accessor :device, :message, :options
|
16
|
+
|
17
|
+
def default_payload
|
18
|
+
{
|
19
|
+
popup: true,
|
20
|
+
popup_title: nil,
|
21
|
+
popup_body: nil,
|
22
|
+
popup_type: 'alert',
|
23
|
+
popup_ok_button_text: 'Ok',
|
24
|
+
popup_cancel_button_text: 'Cancel',
|
25
|
+
navigate_to_view: nil,
|
26
|
+
navigate_to_view_as_modal: true,
|
27
|
+
navigate_to_view_parameters: {},
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def environment
|
32
|
+
device.push_environment
|
33
|
+
end
|
34
|
+
|
35
|
+
def payload
|
36
|
+
payload = default_payload.keys.map do |key|
|
37
|
+
[key, options.delete(key) || default_payload[key]]
|
38
|
+
end.to_h
|
39
|
+
|
40
|
+
payload.merge(options)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_pushable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Butler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 4.0.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '5.1'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 4.0.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '5.1'
|
@@ -159,6 +159,7 @@ files:
|
|
159
159
|
- lib/acts_as_pushable/apn/notification.rb
|
160
160
|
- lib/acts_as_pushable/configuration.rb
|
161
161
|
- lib/acts_as_pushable/gcm/notification.rb
|
162
|
+
- lib/acts_as_pushable/notification.rb
|
162
163
|
- lib/acts_as_pushable/pushable.rb
|
163
164
|
- lib/acts_as_pushable/version.rb
|
164
165
|
- lib/generators/acts_as_pushable/install_generator.rb
|