我可以通过FCM服务向我的应用程序发送推送通知。我正在使用POSTMAN/INSOMNIA。
一切都很好。我可以看到通知。但在处理传入消息时,我需要一些建议/指出正确的方向。
我已经使用FCM官方文档设置了所有内容。
我的服务器调用如下:
{
"to":"...",
"data" : {
"sound" : "default",
"body" : "Message body",
"title" : "My APP",
"content_available" : true,
"priority" : "high",
"my_message": "123456"
}
}
我可以访问onMessageReceived((方法中的数据:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getData().size() > 0) {
// get incoming data
}
}
到目前为止没有什么特别的。我想实现的是,如果我的"活动"在前台,我不需要显示任务栏通知,只需要在"活动"中显示FCM消息(my_message键(附带的消息。这可能吗?
如果应用程序在后台,我想打开一个活动(我可以做(,并将我的数据(上面的消息(传递给Intent。这就是我正在努力的。
如果发生"后台应用程序"情况,我的通知将以这种方式显示:
private void sendNotification(String messageBody) {
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
String channelId = "my_channel_id";
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.ic_person)
.setContentTitle(getString(R.string.app_name))
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Since android Oreo notification channel is needed.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(channelId,
"DG_Channel",
NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(channel);
}
notificationManager.notify(0, notificationBuilder.build());
}
所以我的3个主要问题是:
- 当通知到达时,我能判断我的应用程序是否在前台/后台吗
- 如果在前台,我如何访问活动中的数据
- 如果在后台,如何将数据传递给活动
感谢的任何建议
要让您的应用程序了解传入数据,请注册一个与活动生命周期相关的BroadcastReceiver
:查看此处
如果你的应用程序处于后台,你可以根据你的用例将其存储在数据库/SharedPreferences中,并在每次打开应用程序时检查其是否存在。
关于确定您的应用程序是否在FG中:此处
如果它在Foreground中,请发送一个自定义广播,您的活动将接收该广播。
如果它在后台,请存储它,并在下次打开应用程序时进行处理。