在Nougat上多次接收FCM通知

3
我在我的应用程序中使用Firebase推送通知。但是,当我为某个事件发送通知时,在Nougat设备上的2-3分钟后,我会多次收到通知。在低于Nougat版本的设备上,我只收到一条通知。
我已经检查了服务器一次只发送一条通知。 在我的应用gradle中,我有以下依赖关系。
compile `com.google.firebase:firebase-messaging:11.8.0`

这里是FCM监听器的代码:

public class MyFcmListenerService extends FirebaseMessagingService {

    @Override
public void onMessageReceived(RemoteMessage remoteMessage) {

  }
}

在清单文件中:
<service android:name="com.myApp.test.fcm.MyFcmListenerService">
  <intent-filter>
     <action android:name="com.google.firebase.MESSAGING_EVENT" />
   </intent-filter>
</service>
2个回答

5
当我尝试从旧的GCM迁移到新的FCM时,这种情况开始发生。您需要确保删除所有与GCM相关的代码,包括gradle(删除com.google.android.gms:play-services-gcm)和Manifest(删除:

)。
<uses-permission android:name="mypackage.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<permission
    android:name="mypackage.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

同时确保你清理项目并重新构建,以删除对GCM类的任何缓存引用。最后一个部分让我花了大约2个小时才想明白。 一个好的技巧是查找所有 (⇧⌘F) "GCM" 并查看是否从生成的文件中获取到结果。


1

我也遇到了同样的问题,尝试了一切方法都无效。

后来我意识到我们从一开始就在存储 Android 设备的所有 FCM 令牌,而没有对其进行验证或删除。

我删除了所有 FCM 令牌,并重新登录我的应用程序,这将在服务器的数据库中插入一个新的唯一令牌。

这样做很有效,我认为 FCM 应该在发放新令牌之前使早期令牌失效,即使跨安装、多个 APK 和多个 APK 调试会话也是如此。

尝试只向一个令牌发送,同时清除构建并重新安装您的应用程序。


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