调试环境中的Firebase通知将发送到生产Android客户端

时间:2018-03-24 18:32:24

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

我头疼得很厉害 我在使用Ubuntu 14.04的Google Compute Engine虚拟机上的生产托管中运行了'web-app',写了 Rails4 ,其中我使用 Rpush gem / Firebase 来通知 Android应用'我的应用'

本地我使用类似的配置进行开发:环境 rvm具有相同的Rails版本。 同时,使用AndroidStudio,我正在开发'my-app' Android应用程序 在Ubuntu 16.04上。

当Rails / Rpush发送通知时,我会在'my-app'上收到通知 所以我控制通知过程的两个方面(除了Firebase作为中间层) 大。

直到几天前一切正常。

生产环境继续良好运作 本地,正在开发中,当'web-app'发送通知时(通过RPush / Firebase)我没有收到任何类型的消息,但是我收到了它在生产中,在'my-app'的'release-version'上!!!!

通常情况下,在本地工作,当'本地''网络应用'发送通知时,'本地''我的应用'会收到它;
在制作中,当'主持''we-app'发送通知时,'my-app'的'release-version'会收到它。

好几天就像在Firebase中,在中间层,通过'my-app'的'release-version'广播每个通知,也来自'本地'调试环境 !!

两个环境的相同版本。
它在几天前运作良好 当然,我已经触及了一些事情......这个项目正在进行中。

我已经进行了很多调试,我已经多次控制配置(本地,主机和Firebase)读取许多没有结果的日志。
一切似乎都运作良好!!

  

有人知道一些方法可以告诉我如何调试/理解这种神秘的(对我而言)行为吗?

在Rails 中,当保存邮件时,会触发推送通知的方法,如 GitHub by RPush存储库中所述。

在Android 中,在“MyFirebaseMessagingService扩展FirebaseMessagingService”类中,在重写方法'onMessageReceived(RemoteMessage remoteMessage)上'我收到消息(通知或数据) - 跟随'quickstart-android / messaging '示例。

在Firebase中我有一个项目,我将'服务器密钥''google-services.json'

我的头痛越来越多了 欢迎任何建议。

更新20180326

我使用在发送消息,配置和rpush日志摘录(Rails服务器端 - 本地和托管)时执行的代码升级我的问题。

保存'消息'后触发的Rails方法

def notify_gcm(data)
  if Rpush::Gcm::App.find_by_name(<firebase_app>).nil?
    app = Rpush::Gcm::App.new
    app.name = <firebase_app>
    app.auth_key = <firebase-server_key>
    app.connections = 1
    app.save!
  end
  n = Rpush::Gcm::Notification.new
  n.app = Rpush::Gcm::App.find_by_name(<firebase_app>)
  n.delay_while_idle = true
  n.registration_ids = [<device_token>, ...]
  n.priority = 'high'
  n.content_available = true
  # notification type: DATA MESSAGE
  n.data = { data: { message: data[:message]["content"] }, notificationdata: { body: ..., title: ..., icon: ... }
  }
  n.save!
  Rpush.push
end

配置/初始化/ RPUSH

Rpush.configure do |config|
  config.client = :active_record
  config.push_poll = 5
  config.batch_size = 100
  config.pid_file = 'tmp/rpush.pid'
  config.log_file = 'log/rpush.log'
  config.log_level = (defined?(Rails) && Rails.logger) ? Rails.logger.level : ::Logger::Severity::ERROR
end

Rpush log

BEGIN
  INSERT INTO `rpush_notifications` (`type`, `app_id`, `delay_while_idle`, `registration_ids`, `priority`, `content_available`, `data`, `created_at`, `updated_at`) VALUES (...)
COMMIT
SELECT `rpush_apps`.* FROM `rpush_apps`[<firebase_app>] Starting 1 dispatcher... 
SELECT COUNT(*) FROM `rpush_notifications` WHERE (processing = 0 AND delivered = 0 AND failed = 0 AND (deliver_after IS NULL OR deliver_after < '2018-03-25 10:27:22.719515'))
BEGIN
  SELECT `rpush_notifications`.* FROM `rpush_notifications` WHERE (processing = 0 AND delivered = 0 AND failed = 0 AND (deliver_after IS NULL OR deliver_after < '2018-03-25 10:27:22.720521'))  ORDER BY created_at ASC LIMIT 100 FOR UPDATE
  UPDATE `rpush_notifications` SET processing = 1 WHERE  rpush_notifications`.`id` = 210 
COMMIT
SELECT COUNT(*) FROM `rpush_notifications` WHERE (processing = 0 AND delivered = 0 AND failed = 0 AND (deliver_after IS NULL OR deliver_after < '2018-03-25 10:27:22.774452'))
SELECT  `rpush_apps`.* FROM `rpush_apps` WHERE `rpush_apps`.`id` = 1 LIMIT 1

[<firebase_app>] 210 sent to ... <proper registration_ids>

Rpush由命令行启动为守护程序:

  

rpush start -e production

1 个答案:

答案 0 :(得分:0)

<强>解决

<强>的Gemfile

  

删除了gem'trail_12factor',group:production

此前它已被移除到托管(生产):(