У меня есть приложение для обмена сообщениями, и сейчас я делаю часть push-уведомлений.Для этого я использую FCM
(Firebase Cloud Messaging).Теперь у меня проблема.Например, введите 2 пользователей (user1 и user2).Если пользователь1 пишет мне, я получаю уведомление с FCM
и показываю его.Когда user2 пишет мне, я создаю новое уведомление для него.Но когда user1 пишет мне снова, и я не удаляю свое уведомление user1, мне нужно обновить уведомление, иначе создайте новое.Я думаю, ты меня понимаешь.Теперь я застрял в части обновления, потому что каждый раз я создаю новое уведомление о доходе сообщения.
Я искал и нашел что-то.Он говорит, что я должен использовать NotificationListenerService
для этого и getActiveNotifications()
для получения всех активных уведомлений в строке состояния.
Итак, я что-то пробовал, но получаю null
.Я включил это приложение в Notification Access, так что я думаю, что это не проблема.Я зарегистрировал свои службы в файле манифеста.
Вот мой код, в котором я создал службу FCM
.Если я сделал что-то не так в своем коде, пожалуйста, исправьте это.
public class FireBaseService extends FirebaseMessagingService {
private static final String TAG = "FireBaseMessagingServiceTag";
@SuppressLint("LongLogTag")
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// Handle FCM messages here.
Intent service = new Intent(FireBaseService.this, NotificationService.class);
startService(service);
//I think I'm doing wrong here.
NotificationService notificationService = new NotificationService();
StatusBarNotification[] activeNotifications = notificationService.getActiveNotifications();
Log.d(TAG, "Array: " + Arrays.toString(activeNotifications));
//show notification
}
}
А вот класс NotificationService
.
public class NotificationService extends NotificationListenerService {
@Override
public IBinder onBind(Intent intent) {
return super.onBind(intent);
}
@Override
public void onListenerConnected() {
super.onListenerConnected();
}
@Override
public void onNotificationPosted(StatusBarNotification sbn){
// Implement what you want here
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn){
// Implement what you want here
}
@Override
public StatusBarNotification[] getActiveNotifications() {
return super.getActiveNotifications();
}
}
Так что это все, что я сделал.Вы можете мне помочь?Спасибо и, пожалуйста, исправьте мой код, если я сделал что-то не так, вместо того, чтобы голосовать против моего вопроса.
Вот часть уведомления.
private void showNotification(String title, String body) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
String NOTIFICATION_CHANNEL_ID = "com.example.fcmnotification.FireBaseService";
if(notificationManager != null) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(
NOTIFICATION_CHANNEL_ID, "NotificationManager",
NotificationManager.IMPORTANCE_DEFAULT);
notificationChannel.setDescription("My Channel");
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.BLUE);
notificationChannel.setVibrationPattern(new long[]{0, 1000, 500, 1000});
notificationManager.createNotificationChannel(notificationChannel);
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
notificationBuilder.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher_notification)
.setContentTitle(title)
.setContentText(body)
.setContentInfo("info");
notificationManager.notify(new Random().nextInt(), notificationBuilder.build());
}
}