使用Ruby向Firebase发送通知

时间:2017-05-30 09:33:36

标签: android ruby-on-rails ruby firebase firebase-cloud-messaging

我使用的是Ruby版本1.8.7。

我使用此FCM gem https://github.com/spacialdb/fcm并希望向Android客户端应用发送通知消息,但它不起作用。

在控制器中:

fcm = FCM.new(FIREBASE_API_KEY, :timeout => 30)
 options = {:data => {:message => "This is a FCM Topic Message!"}}
 response = fcm.send_to_topic('global', options)

班级FCM:

require 'httparty'
require 'cgi'
require 'json'

class FCM
  include HTTParty
  base_uri 'https://fcm.googleapis.com/fcm'
  default_timeout 30
  format :json

  attr_accessor :timeout, :api_key

  def initialize(api_key, client_options = {})
    @api_key = api_key
    @client_options = client_options
  end

  def send_with_notification_key(notification_key, options = {})
    body = { :to => notification_key }.merge(options)

    params = {
        :body => body.to_json,
        :headers => {
        'Authorization' => "key=#{@api_key}",
        'Content-Type' => 'application/json'
    }
  }

  response = self.class.post('/send', params.merge(@client_options))
  response.parsed_response
  end

  def send_to_topic(topic, options = {})
    if topic =~ /[a-zA-Z0-9\-_.~%]+/
        send_with_notification_key('/topics/' + topic, options)
    end
  end
end
  1. 服务器密钥正确,因为我可以通过PHP代码成功发送通知。
  2. 响应输出如下: { “MESSAGE_ID”=> 8885803884270587181}
  3. 有人可以指出代码有什么问题。 任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:3)

根据Firebase API documentation,您获得的响应是​​成功排队的消息的预期响应。

你回来message_id的事实有这个含义:

  

FCM成功收到请求后的主题消息ID,并将尝试传递给所有订阅的设备。

看起来您的代码正在运行,即问题必须在其他地方。

修改 您正在发送数据消息。 (因为没有notification密钥,只需data密钥)也许您的客户希望收到通知消息?

有关这两种消息类型之间的区别,请参阅documentation

您可以尝试在通知中添加通知密钥:

fcm = FCM.new(FIREBASE_API_KEY, :timeout => 30)
options = {:notification => "Test notification", 
           :data => {:message => "This is a FCM Topic Message!"}}
response = fcm.send_to_topic('global', options)

答案 1 :(得分:1)

我之前有这个问题

尝试添加priority: "high"notification: "your message"

在您的FCM类实例选项中

答案 2 :(得分:0)

试试这个

 request = HTTParty.post('http://fcm.googleapis.com/fcm/send', :body => { "to" => "#{token}", "priority" => "high", "data" => { "title" =>title,"body"=>message,'massage_type'=>'text'}}.to_json, :headers => { 'Content-Type' => 'application/json', 'Authorization' => "key=#{server_token}" } )

答案 3 :(得分:0)

我不确定这是否是由于FCM本身的变化,但是使用gem的文档中的语法或使用Daniel的答案格式对我不起作用(Daniel的版本给出了FCM的错误回复,说通知必须是一个JSON对象)。

这对我有用:

fcm.send_to_topic(topic, notification: { body: "topic notification" })

答案 4 :(得分:0)

不幸的是,fcm库不支持<2.0的红宝石。根据存储库的git历史记录,项目start的情况就是如此。