web-dev-qa-db-fra.com

Firebase envoie deux fois la notification Push

J'ai écrit une application Android très simple pour tester les notifications push de Firebase et je reçois une notification deux fois.

c'est le service manifeste:

<service
        Android:name="com.google.firebase.messaging.FirebaseMessagingService">
        <intent-filter>
            <action Android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
    <service
        Android:name="com.google.firebase.iid.FirebaseInstanceIdService">
        <intent-filter>
            <action Android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>

c'est le titre de l'application:

    compile 'com.google.Android.gms:play-services:9.0.0'
    compile 'com.google.firebase:firebase-core:9.0.0'
    compile 'com.google.firebase:firebase-messaging:9.0.0'
}
apply plugin: 'com.google.gms.google-services'

et voici le niveau de projet:

classpath 'com.google.gms:google-services:3.0.0'
8
Siavash Abdoli

On dirait que vous utilisez com.google.Android.gms:play-services:9.0.0 (qui inclut play-services-gcm) et com.google.firebase:firebase-messaging:9.0.0

FCM de firebase-massaging enregistre automatiquement un jeton ID d'instance (ID de périphérique). Ainsi, si vous avez une logique qui enregistre un jeton dans votre application, il est probable que vous vous enregistrez deux fois. Cela pourrait expliquer que vous receviez plusieurs notifications. Plus généralement, vous ne devez pas utiliser FCM et GCM dans la même application pour cette raison. Donc, si vous envisagez d’utiliser FCM, vous devez supprimer GCM de votre application.

En outre, play-services inclut toutes les API play-services-x, telles que play-services-gcm et play-services-drive, etc. Utilisez donc toujours les bibliothèques divisées telles que play-services-x plutôt que play-services.

9
Arthur Thompson

Pour moi, c’était un sdk de troisième partie qui utilisait GCM alors que notre application utilisait FCM. L'enregistrement auprès des deux services vous donnera deux notifications.

(J'appelais également super.onMessageReceived(remoteMessage) dans FirebaseMessagingService, ce qui a entraîné l'apparition d'une troisième notification:

2
Tom Brinkkemper

La réponse acceptée n'a pas fonctionné pour moi. Voici ce qui a fonctionné:

J'ai utilisé data-messages au lieu de display-messages afin que, même si l'application est au premier plan ou en arrière-plan, la seule notification apparaisse.

Remplacer

{
      "to": "/topics/journal",
      "notification": {
        "title" : "title",
        "text": "data!",
        "icon": "ic_notification"
       }
}

Avec

{
  "to": "/topics/dev_journal",
   "data": {
       "text":"text",
       "title":"",
       "line1":"Journal",
       "line2":"刊物"
   }
} 

Référence: Comment gérer les notifications lorsque l'application est en arrière-plan dans firebase

1
TharakaNirmana

J'avais le même problème lorsque l'application était en arrière-plan ou fermée (et envoyant à la fois des notifications et des données). Causé par la demande d'anciennes autorisations GCM dans AndroidManifest.xml 

Jetez un oeil à https://stackoverflow.com/a/44435980/1533285

1
jlbofh

utiliser dans le fichier de génération compile 'com.google.firebase: firebase-core: 10.2.1', compile 'com.google.firebase: firebase-messaging: 10.2.1' et utilise handleIntent () dans reciver.

0
kevin