我非常头疼。
我有一个正在运行的"web-app">,写了Rails4,在生产中托管在带有Ubuntu 14.04的Google Compute Engine虚拟机上,在那里我使用Rpush gem/Firebase通知Android应用程序"my-app"。
在本地,我使用类似的配置进行开发:具有相同 Rails 版本的环境 rvm。 同时,在AndroidStudio上,我正在开发"my-app">的android应用程序.on Ubuntu 16.04
。
当 Rails/Rpush 发送通知时,我会在"my-app"上收到通知。
所以我控制通知过程的双方(除了 Firebase 作为中间层)。
伟大。
直到几天前它才工作正常。
生产环境继续运作良好。
在本地,在开发中,当"web-app"发送通知(通过RPush/Firebase)时,我没有收到任何类型的消息,但我在生产中收到它,在"我的应用程序"的"发布版本"!!
通常,在本地工作,当"本地"网络应用程序"发送通知时,"本地"我的应用程序"会收到它;
在生产环境中,当"主机"自应用"发送通知时,"我的应用"的"发布版本"会收到通知。
几天就像在 Firebase 的中间层中,每个通知都通过"我的应用"的"发布版本"广播,如果来自"本地"调试环境!
两个环境的版本相同。
直到几天前,它一直运作良好。
我肯定碰过一些东西...该项目正在推进中。
我已经进行了大量调试,我控制了很多次配置(本地,主机和Firebase)读取许多日志而没有结果。
一切似乎都运作良好!
有人知道一些方法可以向我展示如何调试/理解这种神秘的(对我来说)行为?
在 Rails 中,当保存消息时,会触发一种推送通知的方法,如GitHub by RPush 存储库中所述。
在Android中,在"MyFirebaseMessagingService扩展FirebaseMessagingService"类中,在覆盖的方法"onMessageReceived(RemoteMessage remoteMessage)"上,我收到消息(通知或数据) -遵循"quickstart-android/messaging">示例。
在Firebase中,我有一个项目,我采用了"Server Key">和"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 日志
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 生产
已解决
宝石文件
移除宝石"rails_12factor",组:p生产
这之前已被删除到托管(生产):(