为什么在安卓7上我会收到多个FCM通知

9

我正在尝试在我的项目中集成FCM通知。我的后端采用Cloud Function,应用在安卓上运行。 以下是用于发送通知的Cloud代码:

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

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

也许您的 onUpdate 事件会多次触发,因为您的状态已更改? - Arrabidas92
@Arrabidas92 不,它不会被触发多次。为了进行测试,我手动更新了“状态”属性一次(这样我就知道它只被触发了一次)。而且日志只显示一次console.log语句。另一个证据是,在通知消息中,我显示一个随机数,因此如果代码再次执行,则消息将不同。看起来像是某种通知重试策略。2、4、8、16、32分钟等。 - Jo Dar Gaya Woh Mar Gaya
不仅如此,数据通知也会显示多个通知。 - Jo Dar Gaya Woh Mar Gaya
2个回答

2

我已经通过更改应用程序包名称解决了问题,例如旧名称:com.xyz 更改为 com.xyz2。

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

但是很遗憾,我必须重命名应用程序包才能解决它。如果此应用程序在Google Play上发布,则无法重命名该应用程序,否则没有人可以获得此应用程序的进一步更新,并且它将成为一个新应用程序!

如果一些Firebase开发人员能够阐明正在发生什么,那将仍然很好。

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

理想情况下,我想知道正确的解决方法,并使用现有名称而不是在应用程序名称末尾添加2。


1
我刚刚遇到了与我的Ionic Android应用程序相同的问题。同样的通知在2、4和8分钟后重复出现。这似乎是客户端的问题,因为即使直接从Firebase控制台发送消息也会发生这种情况。
我尝试了几件事来解决它,似乎唯一能让它按预期工作的方法是创建一个新的Android项目和新的Firebase应用程序。

谢谢您的建议,但是我的Android和Firebase应用程序中有很多代码库,重新创建并复制粘贴代码会非常麻烦。我仍在寻找是什么原因导致了这个问题?您的解决方案表明这是由某个Firebase消息/通知库版本引起的。因此,进行清理/重建应该与重新创建新项目具有相同的效果。 - Jo Dar Gaya Woh Mar Gaya
@Gabbar Singh 你是在使用原生的Android还是Cordova? - Scott B
我有原生的安卓应用。 - Jo Dar Gaya Woh Mar Gaya
如果您遇到相同的问题,请给这个问题点赞和收藏。 - Jo Dar Gaya Woh Mar Gaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接