我正在使用Ruby版本1.8.7。
我使用此FCM GEM https://github.com/spacialldb/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
- 服务器密钥是正确的,因为我可以通过PHP代码成功发送通知。
- 响应输出如下:{" Message_id" => 88885803884270587181}
任何人都可以指出代码有什么问题。任何帮助将不胜感激。
根据firebase API文档,您得到的响应是成功排队的消息的预期响应。
您获得message_id
的事实具有以下含义:
FCM成功收到请求时,主题消息ID并将尝试交付给所有订阅的设备。
看来您的代码在工作,即问题必须在其他地方。
编辑:您正在发送数据消息。(因为没有notification
密钥,只有data
密钥(也许您的客户端期望 Notification 消息?
请参阅文档以了解这两种消息类型之间的区别。
您可以尝试并在请求中添加一个通知键:
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)
我在
之前有这个问题尝试添加priority: "high"
和notification: "your message"
在您的FCM类Intatiation选项中
我不确定这是否是由于FCM本身的变化而引起的FCM的响应说通知必须是JSON对象(。
这对我有用:
fcm.send_to_topic(topic, notification: { body: "topic notification" })
不幸的是,FCM库不为Rubies&lt提供支持;2.0。根据项目开始时已经存在的存储库的GIT历史。
尝试此
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}" } )