web-dev-qa-db-ja.com

Firebaseがプッシュ通知を2回送信する

私は非常にシンプルなAndroidアプリを作成して、Firebaseのプッシュ通知をテストしましたが、1つの通知を2回受け取ります。

これはマニフェストサービスです。

<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>

これはアプリグラドルです。

    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'

そしてこれがプロジェクトレベルのgradleです:

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

com.google.Android.gms:play-services:9.0.0(play-services-gcmを含む)とcom.google.firebase:firebase-messaging:9.0.0を使用しているようです

Firebase-massagingのFCMはインスタンスIDトークン(デバイスID)を自動的に登録するため、アプリでトークンを登録するロジックがある場合は、2回登録している可能性があります。これは、複数の通知を受信する原因となる可能性があります。より一般的には、同じ理由でFCMとGCMを同じアプリで使用すべきではありません。したがって、FCMを使用する場合は、アプリからGCMを削除する必要があります。

また、play-servicesの使用には、play-services-gcmやplay-services-driveなどのすべてのplay-services-x A​​PIが含まれます。したがって、play-services-xのような分割ライブラリを、play-servicesだけではなく常に使用してください。

9
Arthur Thompson

私にとっては、アプリがFCMを使用している間にGCMを使用していたサードパーティのSDKでした。両方のサービスに登録すると、2つの通知が表示されます。

(また、FirebaseMessagingServiceでsuper.onMessageReceived(remoteMessage)を呼び出していたため、3番目の通知が表示されました:p

3
Tom Brinkkemper

削除しなければならなかった

<receiver Android:name="com.google.Android.gms.gcm.GcmReceiver" 
Android:exported="true" Android:permission="com.google.Android.c2dm.permission.SEND"> 
  <intent-filter> <action Android:name="com.google.Android.c2dm.intent.RECEIVE" /> 
  <category Android:name="${applicationId}" /> 
  </intent-filter> 
</receiver>

androidManifest.xmlから

これは私にとってうまくいきました、ありがとう

1
Khushboo Tahir

受け入れられた答えは私にとってはうまくいきませんでした。以下はうまくいったものです:

data-messages の代わりに display-messagesこれにより、アプリがフォアグラウンドまたはバックグラウンドにある場合でも、通知が1つだけ表示されます。

交換する

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

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

参照: アプリがFirebaseでバックグラウンドにある場合の通知の処理方法

1
TharakaNirmana

アプリケーションがバックグラウンドまたは閉じている場合(および通知とデータの両方を送信する場合)に、同じ問題が発生していました。 AndroidManifest.xmlで古いGCM権限をリクエストしたことが原因

ご覧ください https://stackoverflow.com/a/44435980/1533285

1
jlbofh

ビルドグラドルファイルで使用して「com.google.firebase:firebase-core:10.2.1」をコンパイルし、「com.google.firebase:firebase-messaging:10.2.1」をコンパイルして、レシーバーでhandleIntent()を使用します。

0
kevin