modulofcm 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -1
- data/README.md +16 -6
- data/lib/modulofcm/client.rb +42 -13
- data/lib/modulofcm/configurator.rb +2 -2
- data/lib/modulofcm/file_i_o.rb +18 -0
- data/lib/modulofcm/response.rb +1 -1
- data/lib/modulofcm/version.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aec5f5c510d0c910403e80a2950b6281eafa1c00785683795b0a4d386407f2e6
|
4
|
+
data.tar.gz: 93f82faf62804139c3f839c7c0fe531c9ccda102038e6ce4007e9dfcddb1b529
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34fe6c17bd43d09f8bd9407a525f260ae48e020e4e6d0238fac6815505d71b5249b81c04a4117df71d335ebca8afea08723f83113cbf3e76747abab296d68e2b
|
7
|
+
data.tar.gz: 90efe6b85984cb2d8b0eca03695322a9e56b0ccc3d144911d757e636bca9fdb5537821c8c411250f9c7add832315de9d4b5eed7b45d26bb1f7550a9267605c32
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.0.0] - 2024-05-22
|
4
|
+
|
5
|
+
- Implement API v1
|
6
|
+
- Fix Modulofcm::Configurator#validate_client for APIv1 clients
|
7
|
+
- Fix typo for Modulofcm::Response#success?
|
8
|
+
|
3
9
|
## [0.1.0] - 2024-04-24
|
4
10
|
|
5
11
|
- Initial release
|
6
|
-
- Send Legacy push notifications.
|
12
|
+
- Send Legacy push notifications.
|
data/README.md
CHANGED
@@ -20,9 +20,14 @@ Modulofcm.configure do |config|
|
|
20
20
|
client.api_key = 'My Legacy HTTP API key - will cease to function after June 2024.'
|
21
21
|
end
|
22
22
|
|
23
|
-
config.client(:
|
24
|
-
client.
|
25
|
-
client.
|
23
|
+
config.client(:api_v1_client) do |client|
|
24
|
+
client.firebase_project_id = 'Firebase Project id'
|
25
|
+
client.google_application_credentials = '{"type": "service_account", "project_id": "...", ...}'
|
26
|
+
end
|
27
|
+
|
28
|
+
config.client(:another_api_v1_client) do |client|
|
29
|
+
client.firebase_project_id = 'Firebase Project id'
|
30
|
+
client.google_application_credentials_path = 'config/google_application_credentials.json'
|
26
31
|
end
|
27
32
|
end
|
28
33
|
|
@@ -30,7 +35,11 @@ end
|
|
30
35
|
data = {
|
31
36
|
id: 232_342,
|
32
37
|
key: 'asd9adfiu6bn',
|
33
|
-
mission_id: 234_323
|
38
|
+
mission_id: 234_323,
|
39
|
+
data: {
|
40
|
+
user_id: 15_123,
|
41
|
+
company_id: 23_341
|
42
|
+
}
|
34
43
|
}
|
35
44
|
|
36
45
|
# All keyword arguments are optional and references a field in Firebase documentation:
|
@@ -54,8 +63,9 @@ data = {
|
|
54
63
|
# data: Arbitrary key/value payload, which must be UTF-8 encoded. The key should not be a reserved word ("from", "message_type", or any word starting with "google" or "gcm").
|
55
64
|
# Legacy: `data`
|
56
65
|
# APIv1: `message.data`
|
57
|
-
Modulofcm.client(:legacy_client).push('
|
58
|
-
Modulofcm.client(:
|
66
|
+
Modulofcm.client(:legacy_client).push('Registration token', data: data, title: 'My title', body: 'The body', sound: 'notif.caf', content_available: true)
|
67
|
+
Modulofcm.client(:api_v1_client).push('Registration token', data: data, title: 'My title', body: 'The body', sound: 'notif.caf', content_available: true)
|
68
|
+
Modulofcm.client(:another_api_v1_client).push('Registration token', data: data, title: 'My title', body: 'The body', sound: 'notif.caf', content_available: true)
|
59
69
|
```
|
60
70
|
|
61
71
|
## Development
|
data/lib/modulofcm/client.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'file_i_o'
|
3
4
|
require_relative 'response'
|
4
5
|
|
5
6
|
# rubocop:disable Metrics/ParameterLists
|
@@ -7,14 +8,15 @@ module Modulofcm
|
|
7
8
|
|
8
9
|
class Client
|
9
10
|
|
10
|
-
attr_reader :name, :api_key, :
|
11
|
+
attr_reader :name, :api_key, :google_application_credentials, :firebase_project_id, :mode
|
11
12
|
|
12
|
-
def initialize(name:, api_key: nil,
|
13
|
+
def initialize(name:, api_key: nil,
|
14
|
+
google_application_credentials_path: nil, google_application_credentials: nil,
|
13
15
|
firebase_project_id: nil)
|
14
16
|
@name = name.to_sym
|
15
17
|
@api_key = api_key
|
16
|
-
@api_token = api_token
|
17
18
|
@google_application_credentials_path = google_application_credentials_path
|
19
|
+
@google_application_credentials = google_application_credentials
|
18
20
|
@firebase_project_id = firebase_project_id
|
19
21
|
@mode = :api_v1
|
20
22
|
end
|
@@ -49,12 +51,13 @@ module Modulofcm
|
|
49
51
|
when :legacy
|
50
52
|
push_legacy(token, data: data, title: title, body: body, sound: sound, content_available: content_available)
|
51
53
|
else
|
52
|
-
|
53
|
-
# push_v1(token, data: data, title: title, body: body, sound: sound, content_available: content_available)
|
54
|
+
push_v1(token, data: data, title: title, body: body, sound: sound, content_available: content_available)
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
57
|
-
%w[
|
58
|
+
%w[
|
59
|
+
api_key firebase_project_id google_application_credentials_path google_application_credentials
|
60
|
+
].each do |attribute|
|
58
61
|
define_method("#{attribute}=") do |value|
|
59
62
|
instance_variable_set(:"@#{attribute}", value)
|
60
63
|
|
@@ -62,10 +65,24 @@ module Modulofcm
|
|
62
65
|
end
|
63
66
|
end
|
64
67
|
|
68
|
+
def google_application_credentials_path
|
69
|
+
if @google_application_credentials_path.present? || @google_application_credentials.blank?
|
70
|
+
return @google_application_credentials_path
|
71
|
+
end
|
72
|
+
|
73
|
+
@google_application_credentials_path = if @google_application_credentials.is_a?(String)
|
74
|
+
FileIO.new(@google_application_credentials, 'creds.json')
|
75
|
+
elsif @google_application_credentials.respond_to?(:to_json)
|
76
|
+
FileIO.new(@google_application_credentials.to_json, 'creds.json')
|
77
|
+
else
|
78
|
+
@google_application_credentials
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
65
82
|
private
|
66
83
|
|
67
84
|
def update_mode
|
68
|
-
api_v1_fields_all_present = [
|
85
|
+
api_v1_fields_all_present = [google_application_credentials_path, firebase_project_id].all?(&:present?)
|
69
86
|
api_key_blank = api_key.blank?
|
70
87
|
|
71
88
|
@mode = if api_v1_fields_all_present || api_key_blank
|
@@ -78,7 +95,7 @@ module Modulofcm
|
|
78
95
|
when :legacy
|
79
96
|
FCM.new(api_key)
|
80
97
|
else
|
81
|
-
FCM.new(
|
98
|
+
FCM.new('', google_application_credentials_path, firebase_project_id)
|
82
99
|
end
|
83
100
|
end
|
84
101
|
|
@@ -98,6 +115,16 @@ module Modulofcm
|
|
98
115
|
handle_data(payload, data)
|
99
116
|
handle_notification(payload, body, sound, title)
|
100
117
|
|
118
|
+
# According to Firebase documentation, all values must be strings. So all hashes/arrays are JSON-ified and other
|
119
|
+
# fields (including numbers) are converted to strings.
|
120
|
+
payload[:data].transform_values! do |value|
|
121
|
+
if value.is_a?(Hash) || value.is_a?(Array)
|
122
|
+
value.to_json
|
123
|
+
else
|
124
|
+
value.to_s
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
101
128
|
make_v1_response(@client.send_v1(payload))
|
102
129
|
end
|
103
130
|
|
@@ -110,9 +137,11 @@ module Modulofcm
|
|
110
137
|
else
|
111
138
|
{
|
112
139
|
android: {},
|
113
|
-
apns:
|
114
|
-
|
115
|
-
|
140
|
+
apns: {
|
141
|
+
payload: {
|
142
|
+
aps: {
|
143
|
+
'content-available' => content_available ? 1 : 0
|
144
|
+
}
|
116
145
|
}
|
117
146
|
}
|
118
147
|
}
|
@@ -143,7 +172,7 @@ module Modulofcm
|
|
143
172
|
when :legacy
|
144
173
|
payload[:notification][:sound] = value
|
145
174
|
else
|
146
|
-
payload[:apns][:aps][:sound] = value
|
175
|
+
payload[:apns][:payload][:aps][:sound] = value
|
147
176
|
payload[:android][:sound] = value
|
148
177
|
end
|
149
178
|
end
|
@@ -155,7 +184,7 @@ module Modulofcm
|
|
155
184
|
def make_v1_response(response)
|
156
185
|
response_body = JSON.parse(response[:body])
|
157
186
|
|
158
|
-
Response.new(success:
|
187
|
+
Response.new(success: response[:response] == 'success',
|
159
188
|
status: response[:status_code], body: response_body)
|
160
189
|
end
|
161
190
|
|
@@ -38,14 +38,14 @@ module Modulofcm
|
|
38
38
|
|
39
39
|
@errors << 'Required field: name' if client.name.blank?
|
40
40
|
|
41
|
-
if [client.google_application_credentials_path, client.
|
41
|
+
if [client.google_application_credentials_path, client.firebase_project_id].all?(&:present?)
|
42
42
|
return [@errors.empty?, @errors]
|
43
43
|
end
|
44
44
|
|
45
45
|
return [@errors.empty?, @errors] if client.api_key.present?
|
46
46
|
|
47
47
|
# rubocop:disable Layout/LineLength
|
48
|
-
@errors << 'Either an API key for Legacy API (deprecated) either the
|
48
|
+
@errors << 'Either an API key for Legacy API (deprecated) either the Google application credentials and the Firebase project id are required'
|
49
49
|
# rubocop:enable Layout/LineLength
|
50
50
|
|
51
51
|
[false, @errors]
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class FileIO < StringIO
|
2
|
+
|
3
|
+
attr_reader :original_filename
|
4
|
+
attr_reader :identifier
|
5
|
+
|
6
|
+
def initialize(stream, filename)
|
7
|
+
super(stream.to_s)
|
8
|
+
@original_filename = filename
|
9
|
+
@filename = filename
|
10
|
+
end
|
11
|
+
|
12
|
+
def read(...)
|
13
|
+
rewind
|
14
|
+
|
15
|
+
super(...)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/lib/modulofcm/response.rb
CHANGED
data/lib/modulofcm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: modulofcm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthieu Ciappara
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- lib/modulofcm/client.rb
|
62
62
|
- lib/modulofcm/configurator.rb
|
63
63
|
- lib/modulofcm/errors.rb
|
64
|
+
- lib/modulofcm/file_i_o.rb
|
64
65
|
- lib/modulofcm/response.rb
|
65
66
|
- lib/modulofcm/version.rb
|
66
67
|
- modulofcm.gemspec
|
@@ -73,7 +74,7 @@ metadata:
|
|
73
74
|
source_code_uri: https://github.com/moduloTech/modulofcm
|
74
75
|
changelog_uri: https://github.com/moduloTech/modulofcm/blob/master/CHANGELOG.md
|
75
76
|
rubygems_mfa_required: 'true'
|
76
|
-
post_install_message:
|
77
|
+
post_install_message:
|
77
78
|
rdoc_options: []
|
78
79
|
require_paths:
|
79
80
|
- lib
|
@@ -88,8 +89,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
89
|
- !ruby/object:Gem::Version
|
89
90
|
version: '0'
|
90
91
|
requirements: []
|
91
|
-
rubygems_version: 3.
|
92
|
-
signing_key:
|
92
|
+
rubygems_version: 3.3.7
|
93
|
+
signing_key:
|
93
94
|
specification_version: 4
|
94
95
|
summary: Firebase Cloud Messaging client library
|
95
96
|
test_files: []
|