2

我正在使用Ruby版本1.8.7。使用Ruby將通知發送到Firebase

我使用此FCM寶石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}

任何人都可以請指出有什麼不好的代碼。 任何幫助將不勝感激。

+0

do'params.to_json' –

+0

response = self.class.post('/ send',params.merge(@client_options).to_json)產生錯誤TypeError(無法將String轉換爲散列)。 – Jimy25

+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) 
+0

我的Android客戶端應用程序可以接收通過PHP代碼發送時的通知。但不能用上面的Ruby代碼。 – Jimy25

+0

太棒了!它工作。你拯救了我的一天。謝謝。 – Jimy25

1

我有這個問題之前

嘗試添加priority: "high"notification: "your message"

在FCM類instatiation選項

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}" })