Пытаюсь сохранить все уведомления в базе данных Firebase Realtime. Но это не работает, когда приложение не запущено, любое уведомление, полученное при закрытии приложения, не будет сохранено в базе данных Firebase. Но любое уведомление, полученное при использовании приложения, будет сохранено.
Пожалуйста, кто-нибудь может посоветовать мне, как заставить это работать?
Ниже мой saveTokenToDatabase
метод, который используется для сохранения уведомления.
public void saveTokenToDatabase(String title, String message, String image) {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference notificationDatabase = database.getReference("user_notifications");
String key = notificationDatabase.push().getKey();
String userSessionId = "peter123";
if(userSessionId.equals("NULL")){
return;
}
//Create Object saveNotifications
saveNotifications newmessages = new saveNotifications(message, title, "firebase", image, userSessionId, key);
notificationDatabase.child(userSessionId).child(key).setValue(newmessages).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(_this, "Token Saved", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(_this, Objects.requireNonNull(task.getException()).getMessage(), Toast.LENGTH_LONG).show();
}
}
});
}
Ниже приведен send
метод, который я вызываю в Firebase onMessageReceived
метод для RemoteMessage
void send(int type, String title, String message, Bitmap image, String imageurl, String clickAction) {
long when = System.currentTimeMillis();
NotificationManager notificationManager = (NotificationManager) _this.getSystemService(NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && notificationManager != null){
createChannel(notificationManager);
}
Intent intent = new Intent(_this, MainActivity.class);
switch(type){
case 1:
title = _this.getString(R.string.loc_fail);
message = _this.getString(R.string.loc_fail_text);
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
break;
case 2:
title = _this.getString(R.string.app_name);
message = _this.getString(R.string.loc_perm_text);
intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
break;
case 3:
default:
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
//intent.setData(Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
break;
}
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("NotificationClickAction", clickAction);
PendingIntent pendingIntent = PendingIntent.getActivity(_this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri = Uri.parse("android.resource://" + _this.getPackageName() + "/" + R.raw.notification_alert);
Vibrator vibration = (Vibrator) _this.getSystemService(Context.VIBRATOR_SERVICE);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(_this, Utils.CHANNEL_ID);
notificationBuilder.setContentTitle(title);
notificationBuilder.setContentText(message);
notificationBuilder.setContentIntent(pendingIntent);
notificationBuilder.setSound(defaultSoundUri);
notificationBuilder.setColor(ContextCompat.getColor(_this, R.color.colorPrimaryDark));
notificationBuilder.setPriority(Notification.PRIORITY_MAX);
notificationBuilder.setVibrate(new long[]{350, 700, 350, 700, 350});
notificationBuilder.setWhen(when);
notificationBuilder.setOngoing(false);
notificationBuilder.setAutoCancel(true);
notificationBuilder.setTicker(_this.getString(R.string.app_name));
notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
if(image != null){
notificationBuilder.setLargeIcon(image);
notificationBuilder.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(image));/*Notification with Image*/
}else{
notificationBuilder.setLargeIcon(BitmapFactory.decodeResource(_this.getResources(),R.mipmap.ic_launcher));
notificationBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(_this.getString(R.string.loc_perm_more)));
}
if(vibration != null) { vibration.vibrate(1000); }
if (notificationManager != null) {
notificationManager.notify(0, notificationBuilder.build());
saveTokenToDatabase(title, message, imageurl);
}
}