Class: FirebaseCloudMessenger::Client
- Inherits:
-
Object
- Object
- FirebaseCloudMessenger::Client
- Defined in:
- lib/firebase_cloud_messenger/client.rb
Instance Attribute Summary collapse
- #access_token ⇒ Object
- #access_token_info ⇒ Object readonly
-
#credentials_path ⇒ Object
Returns the value of attribute credentials_path.
- #max_retry_count ⇒ Object
- #project_id ⇒ Object
Instance Method Summary collapse
- #auth_client ⇒ Object
-
#initialize(credentials_path = nil, project_id = nil) ⇒ Client
constructor
A new instance of Client.
- #refresh_access_token_info ⇒ Object
- #request_body(message, validate_only) ⇒ Object
- #request_conn ⇒ Object
- #request_headers ⇒ Object
- #send(message, validate_only, conn) ⇒ Object
- #send_url ⇒ Object
Constructor Details
#initialize(credentials_path = nil, project_id = nil) ⇒ Client
Returns a new instance of Client.
8 9 10 11 12 13 14 15 |
# File 'lib/firebase_cloud_messenger/client.rb', line 8 def initialize(credentials_path = nil, project_id = nil) @credentials_path = credentials_path || ENV['GOOGLE_APPLICATION_CREDENTIALS'] @project_id = project_id if !(@credentials_path || @project_id) raise ArgumentError, "Either a project_id or a credentials_path must be supplied" end end |
Instance Attribute Details
#access_token ⇒ Object
54 55 56 |
# File 'lib/firebase_cloud_messenger/client.rb', line 54 def access_token @access_token ||= access_token_info["access_token"] end |
#access_token_info ⇒ Object
62 63 64 |
# File 'lib/firebase_cloud_messenger/client.rb', line 62 def access_token_info @access_token_info ||= auth_client.fetch_access_token_info end |
#credentials_path ⇒ Object
Returns the value of attribute credentials_path.
6 7 8 |
# File 'lib/firebase_cloud_messenger/client.rb', line 6 def credentials_path @credentials_path end |
#max_retry_count ⇒ Object
79 80 81 |
# File 'lib/firebase_cloud_messenger/client.rb', line 79 def max_retry_count @max_retry_count ||= 1 end |
#project_id ⇒ Object
71 72 73 |
# File 'lib/firebase_cloud_messenger/client.rb', line 71 def project_id @project_id ||= JSON.parse(File.read(credentials_path)).fetch("project_id") end |
Instance Method Details
#auth_client ⇒ Object
58 59 60 |
# File 'lib/firebase_cloud_messenger/client.rb', line 58 def auth_client @auth_client ||= AuthClient.new(credentials_path) end |
#refresh_access_token_info ⇒ Object
66 67 68 69 |
# File 'lib/firebase_cloud_messenger/client.rb', line 66 def refresh_access_token_info self.access_token = nil self.access_token_info = auth_client.fetch_access_token_info end |
#request_body(message, validate_only) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/firebase_cloud_messenger/client.rb', line 47 def request_body(, validate_only) { message: .to_h, validateOnly: validate_only }.to_json end |
#request_conn ⇒ Object
34 35 36 37 38 |
# File 'lib/firebase_cloud_messenger/client.rb', line 34 def request_conn conn = Net::HTTP.new(send_url.host, 443) conn.use_ssl = true conn end |
#request_headers ⇒ Object
40 41 42 43 44 45 |
# File 'lib/firebase_cloud_messenger/client.rb', line 40 def request_headers { "Content-Type" => "application/json", "Authorization" => "Bearer #{access_token}" } end |
#send(message, validate_only, conn) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/firebase_cloud_messenger/client.rb', line 17 def send(, validate_only, conn) retry_count = 0 loop do response = make_fcm_request(, validate_only, conn || request_conn) retry_count += 1 if response_successful?(response) || retry_count > max_retry_count return (response) elsif response.code == "401" refresh_access_token_info else raise Error.from_response(response) end end end |
#send_url ⇒ Object
75 76 77 |
# File 'lib/firebase_cloud_messenger/client.rb', line 75 def send_url URI "https://fcm.googleapis.com/v1/projects/#{project_id}/messages:send" end |