Firebase 消息 - 无法接收来自订阅的通知

Posted

技术标签:

【中文标题】Firebase 消息 - 无法接收来自订阅的通知【英文标题】:Firebase Messaging - Can't receive notifications from subscriptions 【发布时间】:2017-11-14 10:28:38 【问题描述】:

情况如下:我有一个 firebase 云函数,它在每次写入某个数据库集合(称为“jamrooms”)时运行。 NodeJS脚本如下:

const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.newJamroom = functions.database.ref('/jamrooms/jamroomId').onWrite(event => 

        // Grab the current value of what was written to the Realtime Database.
        var jamroomId = event.params.jamroomId;

        var topic = "new-jamroom";
        var payload = 
            data: 
                title: "New jamroom available !",
                body: String("Jamroom id = ").concat(jamroomId)
            
        ;

        // Send a message to devices subscribed to the provided topic.
        return admin.messaging().sendToTopic(topic, payload)
            .then(function (response) 
                // See the MessagingTopicResponse reference documentation for the
                // contents of response.
                console.log("Successfully sent message:", response);
            )
            .catch(function (error) 
                console.log("Error sending message:", error);
            );
);

在客户端(android)上,我订阅了“new-jamroom”主题:

FirebaseMessaging.getInstance().subscribeToTopic("new-jamroom");

每次向集合中添加新的键值对时,脚本都会成功执行:

但客户端永远不会在后台或前台收到通知。

我不知道从哪里看才能了解哪里出了问题。

更新

即使从控制台发送通知(使用控制台中存在的主题“new-jamroom”)也不会将其发送到客户端(发送了 Firebase 记录 0)。

【问题讨论】:

【参考方案1】:

由于您的负载包含 data 键,因此您发送的是仅数据消息,而不是通知:

    var payload = 
        data: 
            title: "New jamroom available !",
            body: String("Jamroom id = ").concat(jamroomId)
        

数据消息和通知消息由接收方handled differently。纯数据消息导致在接收器中调用onMessageReceived()。要生成通知,请使用 notification 键构建您的有效负载:

    var payload = 
        notification:   // <= CHANGED
            title: "New jamroom available !",
            body: String("Jamroom id = ").concat(jamroomId)
        

【讨论】:

正确,我今天下午注意到了。所以,改变它使它工作但不适用于我的模拟器,也就是说,一个共同开发者收到了通知,但不是我。我认为这是一个配置问题,但我还不知道是哪一个。 @ArthurDeschamps:检查你的 logcat 是否有 W/GooglePlayServicesUtil: Google Play services out of date。您的模拟器可能有旧版本的 Google Play 服务。 其实我也试过我的实体安卓手机,也没有通知。无论哪种情况,logcat 中都没有这样的消息。 @ArthurDeschamps;如果故障设备是 API 26,则可能是通知通道的问题。 我刚刚收到通知.. 但现在两次。这真是一团糟,但现在总体上似乎可以正常工作。感谢您的帮助!

以上是关于Firebase 消息 - 无法接收来自订阅的通知的主要内容,如果未能解决你的问题,请参考以下文章

无法在 React.js 中接收来自 Firebase 的消息

在 iOS 上接收来自 firebase 的通知的奇怪行为

收到来自 Firebase 的通知时触发警报

应用关闭时,Firebase消息传递无法接收通知(React Native)

接收来自 Firebase 的消息

Win32/64 应用程序是不是可以从 Firebase 接收推送通知消息?