expo-server-sdk 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitattributes +1 -1
- data/Gemfile.lock +9 -9
- data/README.md +106 -3
- data/lib/expo/server/sdk/version.rb +1 -1
- data/lib/push/notification.rb +0 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0935c1dadd6d4a8be6e196c2b3dea8cbb76558a8cabe65e30225771101d2b894'
|
4
|
+
data.tar.gz: 9f739d6f73288893da490177165d08968de65124a0504d45149060e77674dcf2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c3a776c41bff8d2ccf2c839025778ce04d654be4b52c7e5a0dcf9d9b176ae2fd9fcb54e0f9ac722065052b6f5518b1d2abadc5aaefe46b11cb57bf202351e5a
|
7
|
+
data.tar.gz: 33af04057e1d2d4367df24bb554900e6364eec5201624ec90098fc846b7bac29eb3a1949dc9290678381547a2eac7720a7bfc1be1c881203172141abe1c1dedc
|
data/.gitattributes
CHANGED
@@ -1 +1 @@
|
|
1
|
-
* text=auto eol=lf
|
1
|
+
* text=auto eol=lf
|
data/Gemfile.lock
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
expo-server-sdk (0.1.
|
4
|
+
expo-server-sdk (0.1.5)
|
5
5
|
connection_pool (~> 2.2)
|
6
6
|
http (>= 4.0, < 6.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
addressable (2.8.
|
12
|
-
public_suffix (>= 2.0.2, <
|
11
|
+
addressable (2.8.2)
|
12
|
+
public_suffix (>= 2.0.2, < 6.0)
|
13
13
|
ast (2.4.2)
|
14
|
-
connection_pool (2.
|
14
|
+
connection_pool (2.4.0)
|
15
15
|
domain_name (0.5.20190701)
|
16
16
|
unf (>= 0.0.5, < 1.0.0)
|
17
|
-
ffi (1.15.
|
17
|
+
ffi (1.15.5-x64-mingw32)
|
18
18
|
ffi-compiler (1.0.1)
|
19
19
|
ffi (>= 1.0.0)
|
20
20
|
rake
|
21
|
-
http (5.
|
21
|
+
http (5.1.1)
|
22
22
|
addressable (~> 2.8)
|
23
23
|
http-cookie (~> 1.0)
|
24
24
|
http-form_data (~> 2.2)
|
25
25
|
llhttp-ffi (~> 0.4.0)
|
26
|
-
http-cookie (1.0.
|
26
|
+
http-cookie (1.0.5)
|
27
27
|
domain_name (~> 0.5)
|
28
28
|
http-form_data (2.3.0)
|
29
29
|
llhttp-ffi (0.4.0)
|
@@ -33,7 +33,7 @@ GEM
|
|
33
33
|
parallel (1.21.0)
|
34
34
|
parser (3.0.2.0)
|
35
35
|
ast (~> 2.4.1)
|
36
|
-
public_suffix (
|
36
|
+
public_suffix (5.0.1)
|
37
37
|
rainbow (3.0.0)
|
38
38
|
rake (13.0.6)
|
39
39
|
regexp_parser (2.1.1)
|
@@ -52,7 +52,7 @@ GEM
|
|
52
52
|
ruby-progressbar (1.11.0)
|
53
53
|
unf (0.1.4)
|
54
54
|
unf_ext
|
55
|
-
unf_ext (0.0.8-x64-mingw32)
|
55
|
+
unf_ext (0.0.8.2-x64-mingw32)
|
56
56
|
unicode-display_width (2.1.0)
|
57
57
|
|
58
58
|
PLATFORMS
|
data/README.md
CHANGED
@@ -29,11 +29,15 @@ gem install expo-server-sdk
|
|
29
29
|
## Usage
|
30
30
|
|
31
31
|
```ruby
|
32
|
-
require
|
32
|
+
# Not necessary in Rails. Zeitwerk will require this correctly for you.
|
33
|
+
require 'expo/server/sdk'
|
33
34
|
|
34
35
|
# Create a new Expo SDK client optionally providing an access token if you
|
35
36
|
# have enabled push security
|
36
|
-
client = Expo::Push::Client.new(
|
37
|
+
client = Expo::Push::Client.new(access_token: '<access-token>');
|
38
|
+
|
39
|
+
# If you do not have an access token, you can call it like this:
|
40
|
+
# client = Expo::Push::Client.new
|
37
41
|
|
38
42
|
# Create the messages that you want to send to clients
|
39
43
|
messages = [];
|
@@ -111,7 +115,7 @@ tickets.each_error do |error|
|
|
111
115
|
else
|
112
116
|
puts error.message
|
113
117
|
# => "This indicates the entire request had an error"
|
114
|
-
|
118
|
+
end
|
115
119
|
end
|
116
120
|
|
117
121
|
# Later, after the Expo push notification service has delivered the
|
@@ -231,6 +235,105 @@ client = Expo::Push::Client.new(
|
|
231
235
|
)
|
232
236
|
```
|
233
237
|
|
238
|
+
### Example of error handling
|
239
|
+
|
240
|
+
Here is an example of error handling when using Rails, given a Rails model called `PushNotificationToken`.
|
241
|
+
|
242
|
+
The most important thing is that you remove push tokens that are invalid, you fix push tokens that don't have the right experience ID and you stop sending push notifications if you're not allowed (e.g. the device is no longer registered).
|
243
|
+
|
244
|
+
```ruby
|
245
|
+
# Remove invalid push notification tokens, and remove tokens that failed
|
246
|
+
# and contain a token (DeviceNotRegistered)
|
247
|
+
tickets.each_error do |error|
|
248
|
+
|
249
|
+
if error.is_a?(Expo::Push::PushTokenInvalid)
|
250
|
+
# Destroy the tokens that match because they are not valid
|
251
|
+
PushNotificationToken.where(push_token: error.token).destroy_all
|
252
|
+
|
253
|
+
elsif error.is_a?(Expo::Push::TicketsWithErrors)
|
254
|
+
retryable = true
|
255
|
+
|
256
|
+
error.errors.each do |error_data|
|
257
|
+
|
258
|
+
# This block tries to fix the token experiences, and then reschedules
|
259
|
+
# the job. When it fixes tokens, it notifies bugsnag, so we know that
|
260
|
+
# this happened. If it keeps happening, there is a bug in the query
|
261
|
+
# or registration code.
|
262
|
+
if error_data['code'] == "PUSH_TOO_MANY_EXPERIENCE_IDS"
|
263
|
+
|
264
|
+
# Go through all the details
|
265
|
+
error_data['details'].each do |correct_experience, tokens|
|
266
|
+
|
267
|
+
# Find the incorrect instances
|
268
|
+
instances = PushNotificationToken
|
269
|
+
.where.not(experience_id: correct_experience)
|
270
|
+
.where(push_token: tokens)
|
271
|
+
|
272
|
+
next if instances.blank?
|
273
|
+
next unless instances.update_all(experience_id: correct_experience)
|
274
|
+
|
275
|
+
instances.each do |instance|
|
276
|
+
Bugsnag.notify(
|
277
|
+
StandardError.new(
|
278
|
+
format(
|
279
|
+
'When trying to push, a push token (token: %s) had the wrong experience id (old: %s). ' \
|
280
|
+
'It has been updated (%s).',
|
281
|
+
instance.push_token,
|
282
|
+
instance.experience_id_was,
|
283
|
+
instance.experience_id
|
284
|
+
)
|
285
|
+
)
|
286
|
+
)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
# If there is a different error, report to our error tracker
|
291
|
+
else
|
292
|
+
retryable = false
|
293
|
+
# Otherwise, notify as actual error.
|
294
|
+
Bugsnag.notify(error_data)
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
if retries > 10
|
299
|
+
return Bugsnag.notify(
|
300
|
+
StandardError.new(
|
301
|
+
'Not sending push notification because it was retried > 10 times.'
|
302
|
+
)
|
303
|
+
)
|
304
|
+
end
|
305
|
+
|
306
|
+
# If the error is not a fatal one, the push can be retried. This helps
|
307
|
+
# with making sure you always send the push notification(s) even when
|
308
|
+
# the service intermittendly fails.
|
309
|
+
if retryable
|
310
|
+
ScheduledPushNotificationJob
|
311
|
+
.set(wait: 1.minute * (retries + 1))
|
312
|
+
.perform_later(
|
313
|
+
notification: notification,
|
314
|
+
event: event,
|
315
|
+
updated_at: updated_at,
|
316
|
+
retries: retries + 1
|
317
|
+
)
|
318
|
+
end
|
319
|
+
|
320
|
+
# Otherwise it's an explanable error
|
321
|
+
elsif error.respond_to?(:explain)
|
322
|
+
|
323
|
+
# If the error contains a token it always needs to be removed
|
324
|
+
original_token = error.original_push_token
|
325
|
+
next unless original_token
|
326
|
+
|
327
|
+
PushNotificationToken.where(push_token: original_token).destroy_all
|
328
|
+
else
|
329
|
+
|
330
|
+
# Notify us of any other type of error
|
331
|
+
Bugsnag.notify(error)
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
```
|
336
|
+
|
234
337
|
## Development
|
235
338
|
|
236
339
|
After checking out the repo, run `bin/setup` to install dependencies.
|
data/lib/push/notification.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: expo-server-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derk-Jan Karrenbeld
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: connection_pool
|