2

zu senden Ich verwende Ruby Version 1.8.7.Mit Ruby, um eine Benachrichtigung an Firebase

Ich verwende dieses FCM Juwel https://github.com/spacialdb/fcm und möchte eine Benachrichtigung an Android Client-App senden, aber es funktioniert nicht.

In Controller:

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

Klasse 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. Der Server-Schlüssel korrekt ist, weil ich Benachrichtigung erfolgreich von PHP-Code senden kann. { "message_id" => 8885803884270587181}

Könnte jemand bitte, was falsch mit dem Code hinweisen: wie unten

  • Die Antwortausgabe. Jede Hilfe würde sehr geschätzt werden.

  • +0

    tun 'params.to_json' –

    +0

    response = self.class.post ('/ send', params.merge (@client_options) .to_json) erzeugt Fehler Typeerror (nicht konvertieren String in Hash). – Jimy25

    +0

    Ihr Code funktioniert. Es gibt keine Fehlermeldung. Ich weiß nicht, was du fragst. –

    Antwort

    3

    Nach der Firebase API documentation die Antwort erhalten Sie die erwartete Antwort für eine erfolgreich eingereihte Nachricht.

    Die Tatsache, dass Sie eine message_id zurück hat folgende Bedeutung:

    Das Thema Message-ID, wenn FCM hat erfolgreich die Anfrage erhalten und werden an alle abonnierten Geräte zu liefern versuchen.

    Es sieht aus wie Ihr Code funktioniert, d.h. das Problem muss woanders sein.

    EDIT: Sie senden eine Daten Nachricht. (Weil keine notification Schlüssel, nur ein data Schlüssel) Vielleicht erwartet Ihr Client eine Benachrichtigung Nachricht stattdessen?

    Siehe die documentation für die Unterscheidung zwischen diesen beiden Nachrichtentypen.

    können Sie versuchen, und nur einen Benachrichtigung Schlüssel zur Anfrage hinzufügen:

    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

    Meine Android Client App kann erhalten Benachrichtigung, wenn von PHP-Code zu senden. Aber kann nicht mit über Ruby-Code. – Jimy25

    +0

    Great! Es funktioniert. Du hast meinen Tag gerettet. Vielen Dank. – Jimy25

    1

    Ich habe dieses Problem vor

    versuchen priority: "high" und notification: "your message"

    in Ihren FCM Klasse instatiation Optionen hinzufügen

    0

    Versuchen Sie diese

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