Giter Site home page Giter Site logo

miyataka / fcmpush Goto Github PK

View Code? Open in Web Editor NEW
67.0 2.0 18.0 101 KB

Firebase Cloud Messaging API wrapper for Ruby, suppot HTTP v1 API including access_token auto refresh feature.

License: MIT License

Ruby 99.45% Shell 0.55%
ruby firebase-cloud-messaging fcm gem push push-notifications rubygems notifications fcm-notifications firebase

fcmpush's Issues

Server Key Deprecation

I recently received a notice from FCM indicating that the Server Key feature will be deprecated on June 20, 2024.

CleanShot 2023-12-25 at 09 21 13

However, I'm not sure if he meant the auth method that would affect subscribe/unsubscribe or if the entire API would be affected. Google developer documentation is so hard to read.

CleanShot 2023-12-25 at 09 24 08

configuring json_key_io as StringIO breaks Fcmpush config if google reponds with 403

I've noticed when setting up fcmpush that it would break if getting a 403 from push call.

I noticed it since I have multiple projects and tried to send to a device token generated by the other project.

I got the following response:

Fcmpush::Forbidden: Receieved an error response 403 Forbidden: {
  "error": {
    "code": 403,
    "message": "SenderId mismatch",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
        "errorCode": "SENDER_ID_MISMATCH"
      }
    ]
  }
}

subsequent calls to Fcmpush.new(project_id) would throw this error: MultiJson::ParseError: compile error

This is because I guess it was trying to re-auth against google and thus calling .read on json_key_io.
However reading the same StringIO multiple times would just return empty string on subsequent calls.

2.4.10 :005 > sio = StringIO.new("test")
 => #<StringIO:0x00007fc49d683670>
2.4.10 :006 > sio.read
 => "test"
2.4.10 :007 > sio.read
 => ""

There might be some other edgecases when specifying json_key_io as an instance of StringIO

Is there some other ruby-class that would provide the same interface as IO but keeping string buffer upon read?

My ugly hack as of now was just to wrap the string in a struct with an accessor for the attribute read

config.json_key_io = Struct.new(:read).new credentials

Raise custom error if missing configuration

This is an improvement suggestion.

How?

  • #push method is called
  • config.json_key_io is nil
  • Some Google's env var is nil

Reference: https://github.com/miyataka/fcmpush#usage

What?

The following error is raised:

NoMethodError:
 undefined method `gsub' for nil:NilClass

Suggestion

Rescue the NoMethodError and raises a custom error with information regarding the missing configuration


Thanks for your time and for the good work.

Using fcmpush behind a proxy

I i use fcmpush behind a proxy, the http_proxy or https_proxy environment variable is not considered, so the push will run into timeout:

A network error occurred: Net::OpenTimeout (Failed to open TCP connection to fcm.googleapis.com:443 (execution expired))

It would be nice, if i can set a proxy server in the fcmpush configuration, which is used for the requests, like this:

Fcmpush.configure do |config|
  config.json_key_io = "#{Rails.root}/path/to/service_account_credentials.json"
  config.server_key = 'your firebase server key'
  config.proxy_server = 'http://myproxyserver:3128'
end

Otherwise if the environment variables http_proxy / https_proxy / HTTP_PROXY / HTTPS_PROXY would be used if set, might be another approach.

Sender id mismatch

Always getting this error
Please make clear overview which steps to take with fcm
I think but don’t understand why the android app is using something different as the fcm credentials

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.