firebase-admin-sdk 0.2.0 → 0.3.1
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/.gitignore +3 -0
- data/README.md +1 -1
- data/firebase-admin-sdk.gemspec +2 -1
- data/lib/firebase/admin/messaging/aps.rb +4 -4
- data/lib/firebase/admin/messaging/batch_response.rb +29 -0
- data/lib/firebase/admin/messaging/client.rb +37 -12
- data/lib/firebase/admin/messaging/message_encoder.rb +39 -37
- data/lib/firebase/admin/messaging/multicast_message.rb +17 -1
- data/lib/firebase/admin/messaging/send_response.rb +31 -0
- data/lib/firebase/admin/messaging/utils.rb +4 -5
- data/lib/firebase/admin/version.rb +1 -1
- data/lib/firebase-admin-sdk.rb +2 -0
- metadata +29 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 556dcbf8f7adfc48f4f7f84802316f33a501c0fa546ee94b10002ace197da612
|
4
|
+
data.tar.gz: a4b82ab80e3799d6d1ee49a9575a7b3808ebb21b98717b44aca2735980dd177a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: faf5476494b2286015ad38d6026b7bb112007fce730955d4c69d8cc71808f936e7c763620933c5215125e0d4fe1395bfbd2dcccbcc9ad454ebdd3b9a9c7e5f9c
|
7
|
+
data.tar.gz: 3d7eb689e309fc9b8aa939a666a84c1cbf0c43e0469964f8f9d95758a746fb6c7e286d22bf167cda448b71bb055863b760cb0cb616e91edbbe73eb125df386f8
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -6,7 +6,7 @@ in Ruby.
|
|
6
6
|
For more information, visit the
|
7
7
|
[Firebase Admin SDK setup guide](https://firebase.google.com/docs/admin/setup/).
|
8
8
|
|
9
|
-
This gem is
|
9
|
+
This gem is being used in production by https://cheddar.me
|
10
10
|
|
11
11
|
## Installation
|
12
12
|
|
data/firebase-admin-sdk.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_runtime_dependency "googleauth", "> 0.16", "< 2.0"
|
25
25
|
spec.add_runtime_dependency "faraday", "> 1", "< 3"
|
26
26
|
spec.add_runtime_dependency "jwt", ">= 1.5", "< 3.0"
|
27
|
+
spec.add_runtime_dependency "google-apis-fcm_v1", ">= 0.19.0", "< 1.0"
|
27
28
|
|
28
29
|
spec.add_development_dependency "rake"
|
29
30
|
spec.add_development_dependency "rspec"
|
@@ -31,5 +32,5 @@ Gem::Specification.new do |spec|
|
|
31
32
|
spec.add_development_dependency "fakefs"
|
32
33
|
spec.add_development_dependency "climate_control"
|
33
34
|
spec.add_development_dependency "standard"
|
34
|
-
spec.add_development_dependency "activesupport"
|
35
|
+
spec.add_development_dependency "activesupport", "~> 7.0.8"
|
35
36
|
end
|
@@ -3,7 +3,7 @@ module Firebase
|
|
3
3
|
module Messaging
|
4
4
|
# Aps dictionary to be included in an APNS payload.
|
5
5
|
class APS
|
6
|
-
# @return [APSAlert, String, nil]
|
6
|
+
# @return [Firebase::Admin::Messaging::APSAlert, String, nil]
|
7
7
|
# Alert to be included in the message.
|
8
8
|
attr_accessor :alert
|
9
9
|
|
@@ -12,7 +12,7 @@ module Firebase
|
|
12
12
|
# remain unchanged.
|
13
13
|
attr_accessor :badge
|
14
14
|
|
15
|
-
# @return [
|
15
|
+
# @return [Firebase::Admin::Messaging::CriticalSound, String, nil]
|
16
16
|
# Sound to be played with the message.
|
17
17
|
attr_accessor :sound
|
18
18
|
|
@@ -39,12 +39,12 @@ module Firebase
|
|
39
39
|
|
40
40
|
# Initializes an {APS}.
|
41
41
|
#
|
42
|
-
# @param [APSAlert, String, nil] alert
|
42
|
+
# @param [Firebase::Admin::Messaging::APSAlert, String, nil] alert
|
43
43
|
# Alert to be included in the message (optional).
|
44
44
|
# @param [Integer, nil] badge
|
45
45
|
# Badge to be displayed with the message (optional).
|
46
46
|
# Set to 0 to remove the badge. When not specified, the badge will remain unchanged.
|
47
|
-
# @param [
|
47
|
+
# @param [Firebase::Admin::Messaging::CriticalSound, String, nil] sound
|
48
48
|
# Sound to be played with the message (optional).
|
49
49
|
# @param [Boolean, nil] content_available
|
50
50
|
# Specifies whether to configure a background update notification (optional).
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Firebase
|
2
|
+
module Admin
|
3
|
+
module Messaging
|
4
|
+
# The response received from a batch request
|
5
|
+
class BatchResponse
|
6
|
+
# The list of responses (possibly empty).
|
7
|
+
# @return [Array<SendResponse>]
|
8
|
+
attr_reader :responses
|
9
|
+
|
10
|
+
# The number of successful messages.
|
11
|
+
# @return [Integer]
|
12
|
+
attr_reader :success_count
|
13
|
+
|
14
|
+
# The number of failed messages.
|
15
|
+
# @return [Integer]
|
16
|
+
attr_reader :failure_count
|
17
|
+
|
18
|
+
# A response received from a batch request.
|
19
|
+
#
|
20
|
+
# @param [Array<SendResponse>] responses
|
21
|
+
def initialize(responses:)
|
22
|
+
@responses = responses
|
23
|
+
@success_count = responses.count(:success?)
|
24
|
+
@failure_count = responses.count - @success_count
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "google-apis-fcm_v1"
|
2
|
+
|
1
3
|
module Firebase
|
2
4
|
module Admin
|
3
5
|
module Messaging
|
@@ -5,8 +7,11 @@ module Firebase
|
|
5
7
|
class Client
|
6
8
|
def initialize(app)
|
7
9
|
@project_id = app.project_id
|
8
|
-
@
|
10
|
+
@project_path = "projects/#{app.project_id}"
|
9
11
|
@message_encoder = MessageEncoder.new
|
12
|
+
@http_client = Firebase::Admin::Internal::HTTPClient.new(credentials: app.credentials)
|
13
|
+
@service = Google::Apis::FcmV1::FirebaseCloudMessagingService.new
|
14
|
+
@service.authorization = app.credentials
|
10
15
|
end
|
11
16
|
|
12
17
|
# Sends a message via Firebase Cloud Messaging (FCM).
|
@@ -19,13 +24,10 @@ module Firebase
|
|
19
24
|
#
|
20
25
|
# @return [String] A message id that uniquely identifies the message.
|
21
26
|
def send_one(message, dry_run: false)
|
22
|
-
body =
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
res = @http_client.post(send_url, body, FCM_HEADERS)
|
27
|
-
res.body["name"]
|
28
|
-
rescue Faraday::Error => e
|
27
|
+
body = encode_message(message, dry_run: dry_run)
|
28
|
+
res = @service.send_message(@project_path, body, options: {skip_serialization: true})
|
29
|
+
res.name
|
30
|
+
rescue Google::Apis::Error => e
|
29
31
|
raise parse_fcm_error(e)
|
30
32
|
end
|
31
33
|
|
@@ -39,7 +41,21 @@ module Firebase
|
|
39
41
|
#
|
40
42
|
# @return [BatchResponse] A batch response.
|
41
43
|
def send_all(messages, dry_run: false)
|
42
|
-
raise
|
44
|
+
raise "messages must be an Array" unless messages.is_a?(Array)
|
45
|
+
raise "messages must not contain more than 500 elements" unless messages.length < 500
|
46
|
+
|
47
|
+
responses = []
|
48
|
+
@service.batch do |service|
|
49
|
+
options = {skip_serialization: true}
|
50
|
+
messages.each do |message|
|
51
|
+
body = encode_message(message, dry_run: dry_run)
|
52
|
+
service.send_message(@project_path, body, options: options) do |res, err|
|
53
|
+
wrapped_err = parse_fcm_error(err) unless err.nil?
|
54
|
+
responses << SendResponse.new(message_id: res&.name, error: wrapped_err)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
BatchResponse.new(responses: responses)
|
43
59
|
end
|
44
60
|
|
45
61
|
# Sends the given multicast message to all tokens via Firebase Cloud Messaging (FCM).
|
@@ -124,9 +140,9 @@ module Firebase
|
|
124
140
|
TopicManagementResponse.new(res)
|
125
141
|
end
|
126
142
|
|
127
|
-
# @param [
|
143
|
+
# @param [Google::Apis::Error] err
|
128
144
|
def parse_fcm_error(err)
|
129
|
-
msg, info = parse_platform_error(err.
|
145
|
+
msg, info = parse_platform_error(err.status_code, err.body)
|
130
146
|
return err if info.empty?
|
131
147
|
|
132
148
|
details = info["details"] || []
|
@@ -153,10 +169,19 @@ module Firebase
|
|
153
169
|
[msg, details]
|
154
170
|
end
|
155
171
|
|
172
|
+
# Encodes a send message request.
|
173
|
+
def encode_message(message, dry_run:)
|
174
|
+
body = {
|
175
|
+
message: @message_encoder.encode(message),
|
176
|
+
validateOnly: dry_run
|
177
|
+
}
|
178
|
+
JSON.generate(body)
|
179
|
+
end
|
180
|
+
|
156
181
|
FCM_HOST = "https://fcm.googleapis.com"
|
157
182
|
FCM_HEADERS = {"X-GOOG-API-FORMAT-VERSION": "2"}
|
158
183
|
IID_HOST = "https://iid.googleapis.com"
|
159
|
-
IID_HEADERS = {
|
184
|
+
IID_HEADERS = {access_token_auth: "true"}
|
160
185
|
|
161
186
|
FCM_ERROR_TYPES = {
|
162
187
|
"APNS_AUTH_ERROR" => ThirdPartyAuthError,
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "json"
|
2
|
+
|
1
3
|
module Firebase
|
2
4
|
module Admin
|
3
5
|
module Messaging
|
@@ -6,7 +8,7 @@ module Firebase
|
|
6
8
|
#
|
7
9
|
# @param [Message] message
|
8
10
|
# The message to encode.
|
9
|
-
# @return [
|
11
|
+
# @return [String] A json encoded string.
|
10
12
|
def encode(message)
|
11
13
|
raise ArgumentError, "message must be a Message" unless message.is_a?(Message)
|
12
14
|
result = {
|
@@ -17,7 +19,7 @@ module Firebase
|
|
17
19
|
notification: encode_notification(message.notification),
|
18
20
|
token: check_string("Message.token", message.token, non_empty: true),
|
19
21
|
topic: check_string("Message.topic", message.topic, non_empty: true),
|
20
|
-
|
22
|
+
fcmOptions: encode_fcm_options(message.fcm_options)
|
21
23
|
}
|
22
24
|
result[:topic] = sanitize_topic_name(result[:topic])
|
23
25
|
result = remove_nil_values(result)
|
@@ -47,13 +49,13 @@ module Firebase
|
|
47
49
|
return nil unless v
|
48
50
|
raise ArgumentError, "Message.android must be an AndroidConfig." unless v.is_a?(AndroidConfig)
|
49
51
|
result = {
|
50
|
-
|
52
|
+
collapseKey: check_string("AndroidConfig.collapse_key", v.collapse_key),
|
51
53
|
data: check_string_hash("AndroidConfig.data", v.data),
|
52
54
|
notification: encode_android_notification(v.notification),
|
53
55
|
priority: check_string("AndroidConfig.priority", v.priority, non_empty: true),
|
54
|
-
|
56
|
+
restrictedPackageName: check_string("AndroidConfig.restricted_package_name", v.restricted_package_name),
|
55
57
|
ttl: encode_duration("AndroidConfig.ttl", v.ttl),
|
56
|
-
|
58
|
+
fcmOptions: encode_android_fcm_options(v.fcm_options)
|
57
59
|
}
|
58
60
|
result = remove_nil_values(result)
|
59
61
|
if result.key?(:priority) && !%w[normal high].include?(result[:priority])
|
@@ -71,49 +73,49 @@ module Firebase
|
|
71
73
|
|
72
74
|
result = {
|
73
75
|
body: check_string("AndroidNotification.body", v.body),
|
74
|
-
|
75
|
-
|
76
|
-
|
76
|
+
bodyLocKey: check_string("AndroidNotification.body_loc_key", v.body_loc_key),
|
77
|
+
bodyLocArgs: check_string_array("AndroidNotification.body_loc_args", v.body_loc_args),
|
78
|
+
clickAction: check_string("AndroidNotification.click_action", v.click_action),
|
77
79
|
color: check_color("AndroidNotification.color", v.color, allow_alpha: true, required: false),
|
78
80
|
icon: check_string("AndroidNotification.icon", v.icon),
|
79
81
|
sound: check_string("AndroidNotification.sound", v.sound),
|
80
82
|
tag: check_string("AndroidNotification.tag", v.tag),
|
81
83
|
title: check_string("AndroidNotification.title", v.title),
|
82
|
-
|
83
|
-
|
84
|
-
|
84
|
+
titleLocKey: check_string("AndroidNotification.title_loc_key", v.title_loc_key),
|
85
|
+
titleLocArgs: check_string_array("AndroidNotification.title_loc_args", v.title_loc_args),
|
86
|
+
channelId: check_string("AndroidNotification.channel_id", v.channel_id),
|
85
87
|
image: check_string("AndroidNotification.image", v.image),
|
86
88
|
ticker: check_string("AndroidNotification.ticker", v.ticker),
|
87
89
|
sticky: v.sticky,
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
90
|
+
eventTime: check_time("AndroidNotification.event_time", v.event_time),
|
91
|
+
localOnly: v.local_only,
|
92
|
+
notificationPriority: check_string("AndroidNotification.priority", v.priority, non_empty: true),
|
93
|
+
vibrateTimings: check_numeric_array("AndroidNotification.vibrate_timings", v.vibrate_timings),
|
94
|
+
defaultVibrateTimings: v.default_vibrate_timings,
|
95
|
+
defaultSound: v.default_sound,
|
96
|
+
defaultLightSettings: v.default_light_settings,
|
97
|
+
lightSettings: encode_light_settings(v.light_settings),
|
96
98
|
visibility: check_string("AndroidNotification.visibility", v.visibility, non_empty: true),
|
97
|
-
|
99
|
+
notificationCount: check_numeric("AndroidNotification.notification_count", v.notification_count)
|
98
100
|
}
|
99
101
|
result = remove_nil_values(result)
|
100
102
|
|
101
|
-
if result.key?(:
|
103
|
+
if result.key?(:bodyLocArgs) && !result.key?(:bodyLocKey)
|
102
104
|
raise ArgumentError, "AndroidNotification.body_loc_key is required when specifying body_loc_args"
|
103
|
-
elsif result.key?(:
|
105
|
+
elsif result.key?(:titleLocArgs) && !result.key?(:titleLocKey)
|
104
106
|
raise ArgumentError, "AndroidNotification.title_loc_key is required when specifying title_loc_args"
|
105
107
|
end
|
106
108
|
|
107
|
-
if (event_time = result[:
|
108
|
-
event_time = event_time.
|
109
|
-
result[:
|
109
|
+
if (event_time = result[:eventTime])
|
110
|
+
event_time = event_time.getutc unless event_time.utc?
|
111
|
+
result[:eventTime] = event_time.strftime("%Y-%m-%dT%H:%M:%S.%6NZ")
|
110
112
|
end
|
111
113
|
|
112
|
-
if (priority = result[:
|
114
|
+
if (priority = result[:notificationPriority])
|
113
115
|
unless %w[min low default high max].include?(priority)
|
114
116
|
raise ArgumentError, "AndroidNotification.priority must be 'default', 'min', 'low', 'high' or 'max'."
|
115
117
|
end
|
116
|
-
result[:
|
118
|
+
result[:notificationPriority] = "PRIORITY_#{priority.upcase}"
|
117
119
|
end
|
118
120
|
|
119
121
|
if (visibility = result[:visibility])
|
@@ -123,11 +125,11 @@ module Firebase
|
|
123
125
|
result[:visibility] = visibility.upcase
|
124
126
|
end
|
125
127
|
|
126
|
-
if (vibrate_timings = result[:
|
128
|
+
if (vibrate_timings = result[:vibrateTimings])
|
127
129
|
vibrate_timing_strings = vibrate_timings.map do |t|
|
128
130
|
encode_duration("AndroidNotification.vibrate_timings", t)
|
129
131
|
end
|
130
|
-
result[:
|
132
|
+
result[:vibrateTimings] = vibrate_timing_strings
|
131
133
|
end
|
132
134
|
|
133
135
|
result
|
@@ -140,7 +142,7 @@ module Firebase
|
|
140
142
|
raise ArgumentError, "AndroidConfig.fcm_options must be an AndroidFCMOptions"
|
141
143
|
end
|
142
144
|
result = {
|
143
|
-
|
145
|
+
analyticsLabel: check_analytics_label("AndroidFCMOptions.analytics_label", v.analytics_label)
|
144
146
|
}
|
145
147
|
remove_nil_values(result)
|
146
148
|
end
|
@@ -159,14 +161,14 @@ module Firebase
|
|
159
161
|
raise ArgumentError, "AndroidNotification.light_settings must be a LightSettings." unless v.is_a?(LightSettings)
|
160
162
|
result = {
|
161
163
|
color: encode_color("LightSettings.color", v.color, allow_alpha: true),
|
162
|
-
|
163
|
-
|
164
|
+
lightOnDuration: encode_duration("LightSettings.light_on_duration", v.light_on_duration),
|
165
|
+
lightOffDuration: encode_duration("LightSettings.light_off_duration", v.light_off_duration)
|
164
166
|
}
|
165
167
|
result = remove_nil_values(result)
|
166
|
-
unless result.key?(:
|
168
|
+
unless result.key?(:lightOnDuration)
|
167
169
|
raise ArgumentError, "LightSettings.light_on_duration is required"
|
168
170
|
end
|
169
|
-
unless result.key?(:
|
171
|
+
unless result.key?(:lightOffDuration)
|
170
172
|
raise ArgumentError, "LightSettings.light_off_duration is required"
|
171
173
|
end
|
172
174
|
result
|
@@ -190,7 +192,7 @@ module Firebase
|
|
190
192
|
result = {
|
191
193
|
headers: check_string_hash("APNSConfig.headers", apns.headers),
|
192
194
|
payload: encode_apns_payload(apns.payload),
|
193
|
-
|
195
|
+
fcmOptions: encode_apns_fcm_options(apns.fcm_options)
|
194
196
|
}
|
195
197
|
remove_nil_values(result)
|
196
198
|
end
|
@@ -213,7 +215,7 @@ module Firebase
|
|
213
215
|
return nil unless options
|
214
216
|
raise ArgumentError, "APNSConfig.fcm_options must be an APNSFCMOptions" unless options.is_a?(APNSFCMOptions)
|
215
217
|
result = {
|
216
|
-
|
218
|
+
analyticsLabel: check_analytics_label("APNSFCMOptions.analytics_label", options.analytics_label),
|
217
219
|
image: check_string("APNSFCMOptions.image", options.image)
|
218
220
|
}
|
219
221
|
remove_nil_values(result)
|
@@ -331,7 +333,7 @@ module Firebase
|
|
331
333
|
return nil unless options
|
332
334
|
raise ArgumentError, "Message.fcm_options must be a FCMOptions." unless options.is_a?(FCMOptions)
|
333
335
|
result = {
|
334
|
-
|
336
|
+
analyticsLabel: check_analytics_label("Message.fcm_options", options.analytics_label)
|
335
337
|
}
|
336
338
|
remove_nil_values(result)
|
337
339
|
end
|
@@ -30,6 +30,15 @@ module Firebase
|
|
30
30
|
# Registration token of the device to which the message should be sent (optional).
|
31
31
|
attr_accessor :tokens
|
32
32
|
|
33
|
+
# @return [String, nil]
|
34
|
+
# Name of the FCM topic to which the message should be sent (optional). Topic name may contain the `/topics/`
|
35
|
+
# prefix.
|
36
|
+
attr_accessor :topic
|
37
|
+
|
38
|
+
# @return [String, nil]
|
39
|
+
# The FCM condition to which the message should be sent (optional).
|
40
|
+
attr_accessor :condition
|
41
|
+
|
33
42
|
# Initializes a {Message}.
|
34
43
|
#
|
35
44
|
# @param [Hash<String, String>, nil] data
|
@@ -44,13 +53,20 @@ module Firebase
|
|
44
53
|
# An {FCMOptions} (optional).
|
45
54
|
# @param [Array<String>, nil] tokens
|
46
55
|
# A registration token of the device to send the message to (optional).
|
56
|
+
# @param [String, nil] topic
|
57
|
+
# The name of the FCM topic to send the message to (optional).
|
58
|
+
# The topic name may contain the `/topics/` prefix.
|
59
|
+
# @param [String, nil] condition
|
60
|
+
# The FCM condition to which the message should be sent (optional)
|
47
61
|
def initialize(
|
48
62
|
data: nil,
|
49
63
|
notification: nil,
|
50
64
|
android: nil,
|
51
65
|
apns: nil,
|
52
66
|
fcm_options: nil,
|
53
|
-
tokens: nil
|
67
|
+
tokens: nil,
|
68
|
+
topic: nil,
|
69
|
+
condition: nil
|
54
70
|
)
|
55
71
|
self.data = data
|
56
72
|
self.notification = notification
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Firebase
|
2
|
+
module Admin
|
3
|
+
module Messaging
|
4
|
+
# The response received from an individual batched request.
|
5
|
+
class SendResponse
|
6
|
+
# A message id string that uniquely identifies the message.
|
7
|
+
# @return [String]
|
8
|
+
attr_reader :message_id
|
9
|
+
|
10
|
+
# The error if one occurred while sending the message.
|
11
|
+
# @return [Error]
|
12
|
+
attr_reader :error
|
13
|
+
|
14
|
+
# A boolean indicating if the request was successful.
|
15
|
+
# @return [Boolean]
|
16
|
+
def success?
|
17
|
+
!!@message_id
|
18
|
+
end
|
19
|
+
|
20
|
+
# Initializes the object.
|
21
|
+
#
|
22
|
+
# @param [String, nil] message_id the id of the sent message
|
23
|
+
# @param [Error, nil] error the error that occurred
|
24
|
+
def initialize(message_id:, error:)
|
25
|
+
@message_id = message_id
|
26
|
+
@error = error
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -61,11 +61,10 @@ module Firebase
|
|
61
61
|
return nil unless value || required
|
62
62
|
raise ArgumentError, "#{label} is required" unless value
|
63
63
|
raise ArgumentError, "#{label} must be a string" unless value.is_a?(String)
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
value
|
64
|
+
return value if /\A#[0-9a-fA-F]{6}\Z/.match?(value)
|
65
|
+
return value if /\A#[0-9a-fA-F]{8}\Z/.match?(value) && allow_alpha
|
66
|
+
raise ArgumentError, "#{label} must be in the form #RRGGBB" unless allow_alpha
|
67
|
+
raise ArgumentError, "#{label} must be in the form #RRGGBB or #RRGGBBAA"
|
69
68
|
end
|
70
69
|
|
71
70
|
def to_seconds_string(seconds)
|
data/lib/firebase-admin-sdk.rb
CHANGED
@@ -34,4 +34,6 @@ require_relative "firebase/admin/messaging/message_encoder"
|
|
34
34
|
require_relative "firebase/admin/messaging/multicast_message"
|
35
35
|
require_relative "firebase/admin/messaging/error_info"
|
36
36
|
require_relative "firebase/admin/messaging/topic_management_response"
|
37
|
+
require_relative "firebase/admin/messaging/send_response"
|
38
|
+
require_relative "firebase/admin/messaging/batch_response"
|
37
39
|
require_relative "firebase/admin/messaging/client"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: firebase-admin-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tariq Zaid
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: googleauth
|
@@ -70,6 +70,26 @@ dependencies:
|
|
70
70
|
- - "<"
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: '3.0'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: google-apis-fcm_v1
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 0.19.0
|
80
|
+
- - "<"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.0'
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.19.0
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '1.0'
|
73
93
|
- !ruby/object:Gem::Dependency
|
74
94
|
name: rake
|
75
95
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,16 +178,16 @@ dependencies:
|
|
158
178
|
name: activesupport
|
159
179
|
requirement: !ruby/object:Gem::Requirement
|
160
180
|
requirements:
|
161
|
-
- - "
|
181
|
+
- - "~>"
|
162
182
|
- !ruby/object:Gem::Version
|
163
|
-
version:
|
183
|
+
version: 7.0.8
|
164
184
|
type: :development
|
165
185
|
prerelease: false
|
166
186
|
version_requirements: !ruby/object:Gem::Requirement
|
167
187
|
requirements:
|
168
|
-
- - "
|
188
|
+
- - "~>"
|
169
189
|
- !ruby/object:Gem::Version
|
170
|
-
version:
|
190
|
+
version: 7.0.8
|
171
191
|
description:
|
172
192
|
email:
|
173
193
|
- tariq@cheddar.me
|
@@ -208,6 +228,7 @@ files:
|
|
208
228
|
- lib/firebase/admin/messaging/apns_payload.rb
|
209
229
|
- lib/firebase/admin/messaging/aps.rb
|
210
230
|
- lib/firebase/admin/messaging/aps_alert.rb
|
231
|
+
- lib/firebase/admin/messaging/batch_response.rb
|
211
232
|
- lib/firebase/admin/messaging/client.rb
|
212
233
|
- lib/firebase/admin/messaging/critical_sound.rb
|
213
234
|
- lib/firebase/admin/messaging/error.rb
|
@@ -218,6 +239,7 @@ files:
|
|
218
239
|
- lib/firebase/admin/messaging/message_encoder.rb
|
219
240
|
- lib/firebase/admin/messaging/multicast_message.rb
|
220
241
|
- lib/firebase/admin/messaging/notification.rb
|
242
|
+
- lib/firebase/admin/messaging/send_response.rb
|
221
243
|
- lib/firebase/admin/messaging/topic_management_response.rb
|
222
244
|
- lib/firebase/admin/messaging/utils.rb
|
223
245
|
- lib/firebase/admin/middleware/request/credentials.rb
|
@@ -241,7 +263,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
241
263
|
- !ruby/object:Gem::Version
|
242
264
|
version: '0'
|
243
265
|
requirements: []
|
244
|
-
rubygems_version: 3.4.
|
266
|
+
rubygems_version: 3.4.21
|
245
267
|
signing_key:
|
246
268
|
specification_version: 4
|
247
269
|
summary: Firebase Admin SDK for Ruby
|