私は非常にシンプルな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'
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 APIが含まれます。したがって、play-services-xのような分割ライブラリを、play-servicesだけではなく常に使用してください。
私にとっては、アプリがFCMを使用している間にGCMを使用していたサードパーティのSDKでした。両方のサービスに登録すると、2つの通知が表示されます。
(また、FirebaseMessagingServiceでsuper.onMessageReceived(remoteMessage)
を呼び出していたため、3番目の通知が表示されました:p
削除しなければならなかった
<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から
これは私にとってうまくいきました、ありがとう
受け入れられた答えは私にとってはうまくいきませんでした。以下はうまくいったものです:
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":"刊物"
}
}
アプリケーションがバックグラウンドまたは閉じている場合(および通知とデータの両方を送信する場合)に、同じ問題が発生していました。 AndroidManifest.xmlで古いGCM権限をリクエストしたことが原因
ビルドグラドルファイルで使用して「com.google.firebase:firebase-core:10.2.1」をコンパイルし、「com.google.firebase:firebase-messaging:10.2.1」をコンパイルして、レシーバーでhandleIntent()を使用します。