我有一个带有Firebase云消息通知的Android应用程序,但是如果我关闭该应用程序,则直到我再次打开该应用程序,通知才会出现。是否有可能创建某种在后台运行并拦截传入消息并创建通知的服务?需要明确的是 - 我的意思是应用程序甚至不在后台运行的情况。
此外,当收到通知时,我需要后端API的身份验证令牌,因此有时应用程序会崩溃(FirebaseMessagingService的onMessageRead在应用程序获取令牌之前被触发(。是否有一个易于实现的选项,即在Firebase中将消息标记为未读,以便它在一段时间后再次出现?或者选择在应用程序打开时触发onMessageeRead的时刻?
这段代码可以帮助你。
if (isAppIsInBackground(context)) {
int res = Utility.getRandomId();
PendingIntent pendingIntent;
Intent intent = setActivityIntent(notifyDataModel);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
pendingIntent = PendingIntent.getActivity(context, res, intent, 0);
mBuilder.setContentTitle(notifyDataModel.getStrTitle())
.setContentText(notifyDataModel.getStrMessage())
.setNumber(1)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
.setSmallIcon(R.mipmap.ic_launcher)
.setAutoCancel(true)
.setColor(ContextCompat.getColor(context, R.color.colorAccent))
.setContentIntent(pendingIntent);
getManager().notify(res, mBuilder.build());
} else {
int res = Utility.getRandomId();
PendingIntent pendingIntent;
Intent intent = setActivityIntent(notifyDataModel);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
pendingIntent = PendingIntent.getActivity(context, res, intent, 0);
mBuilder.setContentTitle(notifyDataModel.getStrTitle())
.setContentText(notifyDataModel.getStrMessage())
.setNumber(1)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
.setSmallIcon(R.mipmap.ic_launcher)
.setAutoCancel(true)
.setColor(ContextCompat.getColor(context, R.color.colorAccent))
.setContentIntent(pendingIntent);
getManager().notify(res, mBuilder.build());
}