Как сохранить все уведомления Firebase в базе данных Firebase в реальном времени при получении уведомления - PullRequest
0 голосов
/ 11 января 2020

Пытаюсь сохранить все уведомления в базе данных 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);
        }
    }
...