在运行和终止时处理 FCM 通知

Posted

技术标签:

【中文标题】在运行和终止时处理 FCM 通知【英文标题】:Handling FCM Notification while running and killed 【发布时间】:2017-11-14 07:45:19 【问题描述】:

我正在寻找一种在应用程序运行、后台或被终止时处理 fcm 通知的模式。

我们的应用程序具有登录过程,因此当应用程序未启动时,通知需要打开启动器,但是当应用程序运行时,我只想在用户单击通知时推送一个活动。

所以我猜最好的方法是 ContentIntent,它要么被传递到堆栈中最顶层的 Activity,要么被传递到 Launch-Activity。

无论应用程序是否正在运行,我当前的代码总是使用 TaskStackBuilder 重新启动应用程序。

我的代码示例:

resultIntent = new Intent(this, MyProfileActivity.class);
resultIntent.putExtra(ActivityUtil.KEY_IMAGE_URL, SharedPref.getUserImage(this));
resultIntent.putExtra(KEY_NOTIFICATION_ID, notificationID);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(SetDetailReworked.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "...")
            .setLargeIcon(getBitmapFromUrl(images[UI.GetDensityInt(this)]))
            .setSmallIcon(R.drawable.bar_icon)
            .setContentTitle(getString(R.string.push_notification_Title))
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(resultPendingIntent);

Notification not = builder.build();

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

notificationManager.notify(ID, not);

【问题讨论】:

【参考方案1】:

尝试在androidManifest中将你的MyProfileActivity的launchMode设置为singleInstance,

        <activity
        android:name=".MyProfileActivity"
        android:label="@string/app_name"
        android:launchMode="singleInstance"

当用户单击通知时,它不会重新启动您的后台活动。相反,MyProfileActivity 的 onNewIntent 将被触发。

【讨论】:

以上是关于在运行和终止时处理 FCM 通知的主要内容,如果未能解决你的问题,请参考以下文章

如果应用程序终止,则未收到 iOS FCM 推送通知

当应用程序处于后台/终止并收到 FCM 通知时,如何在 Flutter 中显示本地通知?

我需要使用 FCM 实现静默通知

Flutter IOS 通知的 FCM 在应用程序处于后台或终止时不显示

如何在应用程序后台接收FCM推送通知数据,但在前台点击

oppo,vivo应用程序终止通知没有出现在android fcm中