提问者:小点点

应用程序在后台时显示重复通知的FCM


null

而当app在后台时,系统托盘总是显示一个到达一个重复的通知(如收到通知a,系统托盘显示2个通知a)。

怎么解决这个问题?

编辑:添加的代码

我扩展了类,并在方法中包含该类

这是项目中我使用NotificationManager的唯一部分。

另外,我尝试在这个方法上添加一个日志。当应用程序处于前台时调用onMessageReceived。当应用程序在后台时,它不会被调用

@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
    RemoteMessage.Notification notification = remoteMessage.getNotification();

        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                PendingIntent.FLAG_ONE_SHOT);

        String title = notification.getTitle();
        String message = notification.getBody();

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(title)
                .setContentText(message)
                .setAutoCancel(true)
                .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE)
                .setContentIntent(pendingIntent);


        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());
}

共3个答案

匿名用户

null

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

所以,从清单中删除它,卸载并重新安装应用程序,我的问题就解决了。

匿名用户

要手动处理推送通知,请使用FireBaseMessagingService的handleIntent(intent)。当应用程序处于前台,后台和kill状态时调用该方法。为了避免重复,不要调用Super.HandleIntent(intent)。这样会防止app处于BG或Kill状态时的自动推送通知。

这对我有用。

匿名用户

我遇到了完全一样的“重复”问题。这可能只是一个变通方法,因为当应用程序处于前台时,如果不出现“重复”问题,我就无法得到通知。相反,我实现了一个WakefulBroadcastReceiver,当将Android:Exports切换到“false”时,它开始运行。

AndroidManifest.xml
    <receiver
        android:name="PACKAGE.MyWakefulBroadcastReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </receiver>

MyWakefulListenerService.java
    public class MyWakefulBroadcastReceiver extends WakefulBroadcastReceiver {

        private final String TAG = "MyWakefulListener";

        public void onReceive(Context context, Intent intent) {
            sendNotification(context);
        }
    }