ProMotion-push 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +71 -1
- data/lib/ProMotion-push.rb +2 -0
- data/lib/ProMotion/delegate_notifications.rb +21 -3
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ff3b591979913a0c05081d23ea7e5b98fa35e15
|
4
|
+
data.tar.gz: 7f585fc3277e542157e61bd299153fff52232bf1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4fdd9d1f049db7b0259cabc1ec1d4df219b4bf4d5cfa0f23481ecc7a47acd256f717671f237ffc533cc9486b21197f88192dbdbc98c4c1798548d8435efe245c
|
7
|
+
data.tar.gz: 786ebf2514cf8fd1900c7831cda37d4d774893a1d3d3bbfdf074bfbdeac279a72c44c8736c856418b2b40005008ea5e45300825caf8fa1fc9842eb9dd515c060
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# ProMotion-push
|
2
2
|
|
3
3
|
ProMotion-push is push notification support, extracted from the
|
4
|
-
popular RubyMotion gem [ProMotion](https://github.com/clearsightstudio/ProMotion).
|
4
|
+
popular RubyMotion gem [ProMotion](https://github.com/clearsightstudio/ProMotion) and is maintained by [Infinite Red](http://infinite.red), a web and mobile development company based in Portland, OR and San Francisco, CA.
|
5
5
|
|
6
6
|
## Installation
|
7
7
|
|
@@ -104,6 +104,28 @@ def on_push_notification(notification, launched)
|
|
104
104
|
end
|
105
105
|
```
|
106
106
|
|
107
|
+
ProMotion-push automatically adds support for handling push notifications while your app is in the background. If your push notification payload includes `content-available: 1` then you may have an opportunity to pre-fetch data. The return value of the `on_push_notification` method should one of the following that best matches the result: `:new_data`, `:no_data`, `:failed`. The default is `:no_data`, so you don't need to return anything if you did not fetch any data. For example:
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
# Payload:
|
111
|
+
# {
|
112
|
+
# "aps": {
|
113
|
+
# "content-available": 1,
|
114
|
+
# "alert": "My test notification",
|
115
|
+
# "badge": 3,
|
116
|
+
# "sound": "default"
|
117
|
+
# },
|
118
|
+
# "type": "new_messages"
|
119
|
+
# }
|
120
|
+
|
121
|
+
def on_push_notification(notification, launched)
|
122
|
+
if notification.type == "new_messages"
|
123
|
+
MessagesScreen.load_data
|
124
|
+
return :new_data
|
125
|
+
end
|
126
|
+
end
|
127
|
+
```
|
128
|
+
|
107
129
|
#### registered_push_notifications
|
108
130
|
|
109
131
|
Returns the currently registered notifications as an array of symbols.
|
@@ -114,6 +136,54 @@ def some_method
|
|
114
136
|
end
|
115
137
|
```
|
116
138
|
|
139
|
+
### Actionable Notifications
|
140
|
+
As of IOS 8, notifications can include action buttons in the lock screen, notification banners and notification center. This is called the "Minimal" context and supports 2 actions. The "Default" context supports up to 4 Actions and applies when alerts are opened as popups.
|
141
|
+
|
142
|
+
To use these features with ProMotion-push you need to:
|
143
|
+
|
144
|
+
Define each action you plan to include in a notification for either context.
|
145
|
+
```ruby
|
146
|
+
approve_action = UIMutableUserNotificationAction.new.tap do | action |
|
147
|
+
action.identifier = "APPROVE_ACTION"
|
148
|
+
action.title = "Approve"
|
149
|
+
action.activationMode = UIUserNotificationActivationModeBackground
|
150
|
+
action.authenticationRequired = false
|
151
|
+
end
|
152
|
+
```
|
153
|
+
|
154
|
+
Register your actions by calling `register_push_notification_category` from your AppDelegate code prior to `register_for_push_notifications`, for each category of action you intend to use. Note that you must include a separate array for the actions to show in the minimal context.
|
155
|
+
```ruby
|
156
|
+
def on_load(app, options)
|
157
|
+
register_push_notification_category 'APPROVAL_ACTIONS', [approve_action, deny_action, self_destruct_action], minimal: [approve_action]
|
158
|
+
register_push_notification_category 'SECOND_CATEGORY_NAME', # ...
|
159
|
+
# ...
|
160
|
+
register_for_push_notifications :badge, :sound, :alert, :newsstand # or :all
|
161
|
+
# ...
|
162
|
+
end
|
163
|
+
```
|
164
|
+
|
165
|
+
Include one of the categories you just defined in your push payload
|
166
|
+
```json
|
167
|
+
{
|
168
|
+
"aps" : {
|
169
|
+
"alert" : "Do you approve?",
|
170
|
+
"category" : "APPROVAL_ACTIONS"
|
171
|
+
}
|
172
|
+
}
|
173
|
+
```
|
174
|
+
|
175
|
+
Implement `on_push_notification_action` in your AppDelegate to handle the selected action
|
176
|
+
```ruby
|
177
|
+
def on_push_notification_action(action, notification)
|
178
|
+
# handle the action
|
179
|
+
case action
|
180
|
+
when 'APPROVE_ACTION'
|
181
|
+
# approve
|
182
|
+
when 'DENY_ACTION'
|
183
|
+
# deny
|
184
|
+
end
|
185
|
+
end
|
186
|
+
```
|
117
187
|
|
118
188
|
### ProMotion::PushNotification
|
119
189
|
|
data/lib/ProMotion-push.rb
CHANGED
@@ -8,4 +8,6 @@ Motion::Project::App.setup do |app|
|
|
8
8
|
lib_dir_path = File.dirname(File.expand_path(__FILE__))
|
9
9
|
app.files << File.join(lib_dir_path, "ProMotion/push_notification.rb")
|
10
10
|
app.files << File.join(lib_dir_path, "ProMotion/delegate_notifications.rb")
|
11
|
+
app.info_plist['UIBackgroundModes'] ||= []
|
12
|
+
app.info_plist['UIBackgroundModes'] << "remote-notification"
|
11
13
|
end
|
@@ -81,18 +81,23 @@ module ProMotion
|
|
81
81
|
|
82
82
|
# CocoaTouch
|
83
83
|
|
84
|
-
def application(application, didRegisterForRemoteNotificationsWithDeviceToken:device_token)
|
84
|
+
def application(application, didRegisterForRemoteNotificationsWithDeviceToken: device_token)
|
85
85
|
on_push_registration(device_token, nil) if respond_to?(:on_push_registration)
|
86
86
|
end
|
87
87
|
|
88
|
-
def application(application, didFailToRegisterForRemoteNotificationsWithError:error)
|
88
|
+
def application(application, didFailToRegisterForRemoteNotificationsWithError: error)
|
89
89
|
on_push_registration(nil, error) if respond_to?(:on_push_registration)
|
90
90
|
end
|
91
91
|
|
92
|
-
def application(application, didReceiveRemoteNotification:notification)
|
92
|
+
def application(application, didReceiveRemoteNotification: notification)
|
93
93
|
received_push_notification(notification, application.applicationState != UIApplicationStateActive)
|
94
94
|
end
|
95
95
|
|
96
|
+
def application(application, didReceiveRemoteNotification: notification, fetchCompletionHandler: callback)
|
97
|
+
result = received_push_notification(notification, application.applicationState != UIApplicationStateActive)
|
98
|
+
callback.call(background_fetch_result(result))
|
99
|
+
end
|
100
|
+
|
96
101
|
def application(application, handleActionWithIdentifier: action_identifier, forRemoteNotification: notification, completionHandler: callback)
|
97
102
|
received_push_notification_with_action(notification, action_identifier)
|
98
103
|
callback.call
|
@@ -110,5 +115,18 @@ module ProMotion
|
|
110
115
|
}[symbol] || UIRemoteNotificationTypeNone
|
111
116
|
end
|
112
117
|
|
118
|
+
def background_fetch_result(result)
|
119
|
+
options = {
|
120
|
+
new_data: UIBackgroundFetchResultNewData,
|
121
|
+
no_data: UIBackgroundFetchResultNoData,
|
122
|
+
failed: UIBackgroundFetchResultFailed
|
123
|
+
}
|
124
|
+
return options[result] if options[result]
|
125
|
+
|
126
|
+
return result if options.values.include?(result)
|
127
|
+
|
128
|
+
UIBackgroundFetchResultNoData
|
129
|
+
end
|
130
|
+
|
113
131
|
end
|
114
132
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ProMotion-push
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamon Holmgren
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ProMotion
|
@@ -68,7 +68,7 @@ dependencies:
|
|
68
68
|
version: '0'
|
69
69
|
description: Adds push notification support to ProMotion.
|
70
70
|
email:
|
71
|
-
- jamon@
|
71
|
+
- jamon@infinite.red
|
72
72
|
executables: []
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
@@ -77,7 +77,7 @@ files:
|
|
77
77
|
- lib/ProMotion-push.rb
|
78
78
|
- lib/ProMotion/delegate_notifications.rb
|
79
79
|
- lib/ProMotion/push_notification.rb
|
80
|
-
homepage: https://github.com/
|
80
|
+
homepage: https://github.com/infinitered/ProMotion-push
|
81
81
|
licenses:
|
82
82
|
- MIT
|
83
83
|
metadata: {}
|
@@ -97,8 +97,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
97
|
version: '0'
|
98
98
|
requirements: []
|
99
99
|
rubyforge_project:
|
100
|
-
rubygems_version: 2.
|
100
|
+
rubygems_version: 2.5.1
|
101
101
|
signing_key:
|
102
102
|
specification_version: 4
|
103
|
-
summary: Adds push notification support to ProMotion.
|
103
|
+
summary: Adds push notification support to ProMotion.
|
104
104
|
test_files: []
|