我通过Firebase通知控制台向用户的Android设备发送通知,即使当用户设备处于离线状态时我发送了10个不同的通知,一旦用户上线,她/他将会收到所有10个通知。
然而,在Firebase文档中指出:
FCM允许应用服务器在任何给定时间使用最多四个不同的折叠键(collapse key)来向每个设备发送同步消息。换句话说,FCM连接服务器可以同时存储每个设备的四个不同可折叠的发送-同步消息,每个消息都有一个不同的折叠键。如果超过此数量,则FCM仅保留四个折叠键,无法保证保留哪些折叠键。
所以用户只应该收到4条通知,我错过了什么吗?(我没有扩展FirebaseMessagingService
,我将通知处理留给SDK)
更新:如果你在Firebase通知控制台中没有指定折叠键,则似乎会分配一个隐式的折叠键给通知,这是应用程序的包名。我通过检查getIntent().getExtras()
关键字集合中的所有键/值对来测试它,一旦我点击通知启动应用程序。确实,我得到了一个带有包名值的collapse_key
键,即使我没有指定它。
更新2:我尝试通过扩展FirebaseMessagingService
来处理通知,这样当应用程序在前台时,我就能从通知控制台接收消息了。我收到了通知消息并手动向用户显示了通知。你猜怎么着。折叠键很好用!即使我发送了具有相同折叠键的多个通知,我也只会收到一个通知。但是,显然,只有当应用程序在前台时才会发生这种情况,因为Firebase SDK在应用程序处于后台时不会调用onMessageReceived()
,而是自己处理通知。这是否意味着这是Firebase SDK的一个漏洞?(因为问题只发生在SDK显示通知时)
问题仍然存在,由于每个通知都具有相同的折叠密钥,为什么我会收到全部10个通知?可能是FCM的错误?