为什么我在android 7上收到多个FCM通知

时间:2017-11-22 07:36:45

标签: android firebase firebase-cloud-messaging firebase-notifications

我正在尝试在我的项目中集成FCM通知。我有云功能后端,应用程序在Android上运行。 以下是发送通知的云代码:

exports.notificationTest =  functions.database.ref(`/test/childA/childB/status`).onUpdate(event => {

    const status = event.data.val();
    console.info("Processing notificationTest cloud function")
    console.info(`status : ${status}`)
    const token = "EnterYourNotificationTokenHere"

    const randomNum = Math.floor(Math.random() * 100)
    var message = { 
        notification: { title : "My App", body : `Notification Test ${randomNum}`}
    }   
    console.info(`Sending message on notification token`)  
    return admin.messaging().sendToDevice(token, message)
    .then((response) => {
        console.info("Successfully sent notification")
    }).catch(function(error) {
        console.warn("Error sending notification " , error)
    })
})

在原生Android应用上,我会多次收到通知,间隔为几分钟。 在这里,我看到了这样的通知:

Notification Test 30

然后在上一个通知时间的2,4,8,16,32分钟后,我再次得到消息

Notification Test 30

我认为我不需要在此处粘贴日志,因为代码肯定只执行一次(因为通知中的随机数保持不变)。

那么,为什么会发生这种情况以及如何解决它?

以下是我的环境:

Native Android App
Using Android 7
Latest Android Studio Stable
Android Gradle Plugin - 3.1.1
Gradle - 4.1
Firebase-Ui - 3.1.0
Play Services - 11.4.2

请尝试在上述环境中重现。

2 个答案:

答案 0 :(得分:1)

我的Ionic Android应用程序出现了同样的问题。在2分钟,4分钟和8分钟后重复相同的通知。这似乎是客户端的问题,因为它甚至直接从Firebase控制台发送消息时发生。

我尝试了几个方法来修复它,似乎我能够按预期工作的唯一方法是创建一个新的Android项目和新的Firebase应用程序。

答案 1 :(得分:1)

我已通过重命名应用程序包名称解决了该问题 例如旧名:com.xyz到com.xyz2

使用新名称我将此(新)Android应用程序添加到firebase项目(它生成了新的应用程序ID)。并且通知开始按预期工作(无重试)。

但遗憾的是我必须重命名app包来解决它。如果此应用程序是在谷歌播放中发布的,那么我无法重命名该应用程序,否则没有人可以获得此应用程序的进一步更新,它将成为一个新的应用程序!

如果一些firebase开发人员可以了解正在发生的事情,那将会很棒。

当应用名称/顶级包名称相同时,重新创建firebase项目并重新创建android项目没有帮助。在现有的android项目中更改应用程序名称和相关名称空间现在已修复它。

理想情况下,我想知道对此的正确修复并使用现有名称,而不是在应用名称末尾添加2。